- 日志介绍
- rsyslog
- 日志管理journalctl
- MySQL管理日志
一、日志介绍
(一)日志的基本概念
- 日志:将事件发生的时间、地点、人物、事件等信息保存记录
- 日志级别:根据事件的关键程度对日志的分级
- 事件记录格式:一般包含日期时间、主机、进程[pid]、事件内容
- 基于C/S架构的日志系统:通过TCP或UDP协议的服务完成日志记录传送,将分布在不同主机的日志实现集中管理
(二)日志系统的发展
-
sysklogd: CentOS5之前的系统日志服务
- syslogd: 记录应用日志
- klogd:记录内核日志
-
rsyslog: CentOS6, 7使用的系统日志服务
- 支持TCP, UDP
- 支持日志转储于数据库MySQL, Oracle
- 强大的过滤器
- 自定义输出格式
-
ELK:elasticsearch, logstash, kibana
- 非关系型分布式数据库
- 专业的日志管理平台
(三)rsyslog的关键概念
facility:设施,从功能或程序上对日志进行归类
auth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security(auth), user, uucp, local0-local7(预留自定义), syslogpriority:优先级别,从低到高排序
debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)
二、rsyslog
(一)rsyslog相关文件路径
- 主程序:/usr/sbin/rsyslogd
- CentOS 6服务管理:service rsyslog {start|stop|restart|status}
- CentOS 7服务管理:systemctl {start|stop|restart|status} rsyslog.service
- 配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
- 库文件:/lib64/rsyslog/*.so
(二)rsyslog配置文件格式
(1)总体分为三部分
- MODULES:相关模块配置
- GLOBAL DIRECTIVES:全局配置
- RULES:日志记录相关的规则配置
(2)RULES配置格式
格式:facility.priority;facility.priority… target
-
facility
- *:所有的facility
- facility1,facility2,facility3,...:指定的facility列表
-
priority
- *:所有级别
- none:没有级别,即不记录
- PRIORITY:指定级别(含)以上的所有级别
- =PRIORITY:仅记录指定级别的日志信息
-
target
- 文件路径:通常在
/var/log/
,文件路径前的-
表示异步写入 - 用户:将日志事件通知给指定的用户,
*
表示登录的所有用户 - 日志服务器:
@host
,把日志送往至指定的远程服务器记录 - 管道:
| COMMAND
,转发给其它命令处理
- 文件路径:通常在
(三)rsyslog的网络日志服务
(1)配置网络日志服务:修改配置文件,当UDP和TDP服务模块开启
vim /etc/rsyslog.conf
#### MODULES ####
# Provides UDP syslog reception
$ModLoadimudp //取消行前的注释符
$UDPServerRun514 //取消行前的注释符
# Provides TCP syslog reception
$ModLoadimtcp //取消行前的注释符
$InputTCPServerRun514 //取消行前的注释符
(2)实验:配置rsyslog网络日志服务
主机配置:两台主机
日志服务器:负责接收客户端通过UDP或TCP发来的日志信息(IP:192.168.136.230)
日志客户端:负责发出写入日志请求实验1:通过UDP使客户端的事件记录在日志服务器的/var/log/messages中
// 修改服务器配置文件module部分,开启UDP通信模块
vim /etc/rsyslog.conf
$ModLoad imudp //删除行前注释符
$UDPServerRun 514 //删除行前注释符
systemctl restart rsyslog
// 修改客户端配置文件rules部分
vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none @192.168.136.230 //修改target
systemctl restart rsyslog
//客户端测试
logger -p syslog.info "this is 1st message"
//服务器查看日志记录
tail /var/log/messages
- 实验2:通过TCP使客户端的事件记录显示在日志服务器的所有登录用户终端上
// 修改服务器配置文件module和rules部分,开启TCP通信模块
vim /etc/rsyslog.conf
$ModLoad imtcp //删除行前注释符
$InputTCPServerRun 514 //删除行前注释符
local2.* *
systemctl restart rsyslog
// 修改客户端配置文件rules部分
vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none /var/log/messages //恢复上个实验的修改
local2.* @@192.168.136.230 //TCP使用两个@
systemctl restart rsyslog
//客户端测试
logger -p local2.info "this is 2nd message"
(四)其他日志
/var/log/secure:系统安全日志,文本格式,应周期性分析
/var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,二进制格式,
lastb
命令进行查看/var/log/wtmp:当前系统上,用户正常登录系统的相关日志信息,二进制格式,
last
命令可以查看/var/log/lastlog:每一个用户最近一次的登录信息,二进制格式,
lastlog
命令可以查看/var/log/dmesg:系统引导过程中的日志信息,文本格式,可用文本查看工具查看,也可以专用命令
dmesg
查看/var/log/messages :系统中大部分的信息
/var/log/anaconda : anaconda的日志
三、日志管理journalctl
systemd的日志管理工具,可以查看所有内核日志和应用日志
配置文件:/etc/systemd/journald.conf
(一)journalctl查看日志
查看所有日志(默认情况下,只保存本次启动的日志)
journalctl查看内核日志(不显示应用日志)
journalctl -k查看系统本次启动的日志
journalctl -b
journalctl -b -0查看上一次启动的日志(需更改设置)
journalctl -b -1查看指定时间的日志
journalctl --since="2012-10-30 18:17:16"
journalctl --since "20 min ago"
journalctl --since yesterday
journalctl --since "2015-01-10" --until "2015-01-11 03:00"
journalctl --since 09:00 --until "1 hour ago"显示尾部的最新10行日志
journalctl -n显示尾部指定行数的日志
journalctl -n 20实时滚动显示最新日志
journalctl -f查看指定服务的日志
journalctl /usr/lib/systemd/systemd查看指定进程的日志
journalctl _PID=1查看某个路径的脚本的日志
journalctl /usr/bin/bash查看指定用户的日志
journalctl _UID=33 --since today查看某个Unit的日志
journalctl -u nginx.service
journalctl -u nginx.service --since today实时滚动显示某个Unit的最新日志
journalctl -u nginx.service -f合并显示多个Unit的日志
journalctl -u nginx.service -u php-fpm.service --since today
(二)journalctl查看指定优先级(及其以上级别)的日志,共有8级
0: emerg
1: alert
2: crit
3: err
4: warning
5: notice
6: info
7: debug
journalctl -p err -b
(三)输出格式和其他日志设置
日志默认分页输出,--no-pager 改为正常的标准输出
journalctl --no-pager以JSON 格式(单行)输出
journalctl -b -u nginx.service -o json以JSON 格式(多行)输出,可读性更好
journalctl -b -u nginx.service -o json-pretty显示日志占据的硬盘空间
journalctl --disk-usage指定日志文件占据的最大空间
journalctl --vacuum-size=1G指定日志文件保存多久
journalctl --vacuum-time=1years
四、MySQL管理日志
(一)实验1:rsyslog将日志记录于MySQL中
- 实现此功能需要两台主机
主机1:rsyslog服务器(IP: 192.168.136.230)
主机2:mysql数据库(IP: 192.168.136.130)
(1)主机1安装mysql与rsyslog的接口
安装rsyslog-mysql
yum install rsyslog-mysql
查看安装文件路径,其中的SQL脚本文件用于生成数据库,直接传送至主机2
rpm -ql rsyslog-mysql
scp /usr/share/doc/rsyslog-7.4.7/mysql-createDB.sql 192.168.136.130:/root
(2)主机2安装并配置数据库
- 安装mariadb
yum install mariadb-server
systemctl start mariadb.service
mysql_secure_installation
- 用传送来的SQL脚本生成数据库
mysql -u root -pmagedu < mysql-createDB.sql
- 创建管理用户并授权
MariaDB [(none)]> grant all on Syslog.* to loguser@'%' identified by 'centos';
(3)主机1配置rsyslog
- 编辑/etc/rsyslog.conf文件
vim /etc/rsyslog.conf
$ModLoad ommysql //载入模块
local2.* :ommysql:192.168.136.130,Syslog,loguser,centos //设置rules
- 重启rsyslog服务并测试
systemctl restart rsyslog.service
logger -p local2.info "this is the message for rsyslog-mysql"
(4)主机2查看数据库
mysql -u loguser -pcentos
MariaDB [(none)]> use Syslog;
MariaDB [Syslog]> show tables;
MariaDB [Syslog]> select * from SystemEvents\G;
(二)实验2:通过loganalyzer展示数据库中的日志
本实验环境承接实验1,并且需要添加主机3用于通过web界面展示数据库的日志
主机分工:
主机1:rsyslog服务器(IP: 192.168.136.230)
主机2:mysql数据库(IP: 192.168.136.130)
主机3:apache httpd服务器,php,loganalyzer(IP: 192.168.136.229)
(1)主机3安装apache httpd, php
yum install httpd php php-mysql php-gd
service httpd start
(2)主机3测试是否成功连接到数据库
vim /var/www/html/index.php
<?php
$mysqli=new mysqli("192.168.136.130","loguser","centos");
if(mysqli_connect_errno()){
echo "连接数据库失败!";
$mysqli=null;
exit;
}
echo "连接数据库成功!";
$mysqli->close();
phpinfo();
?>
浏览器登录http://192.168.136.229/
,测试连接数据库成功
(3)主机3编译安装loganalyzer
tar xvf loganalyzer-4.1.5.tar.gz
cd loganalyzer-4.1.5
cp -r src/ /var/www/html/log //只复制src子目录的文件至网页存放目录
cd /var/www/html/log/
touch config.php //准备安装配置文件
chmod 666 config.php
(4)配置loganalyzer
- 浏览器登录
http://192.168.136.229/log/
,出现提示如下图
- 点击here,进入安装过程。依次点击继续,在step 7时,填写mysql数据库的关键信息
红框中的信息按照创建数据库的相关信息填写
Source Type: MYSQL Native
Database Host: 192.168.136.130
Database Name: Syslog
Database Tablename: SystemEvents
Database User: loguser
Database Password: centos
- 安装成功,显示界面如下,可以看到日志信息