1、系统日志管理
将系统和应用发生的事件记录至日志中,以助于排错和分析使用
日志记录的内容包括:
历史事件:时间,地点,人物,事件
日志级别:事件的关键性程度,Loglevel
sysklogd 系统日志服务
CentOS 5 之前版本采用的日志管理系统服务
syslogd: system application 记录应用日志
klogd: linux kernel 记录内核日志
事件记录格式:
日期时间 主机 进程[pid]: 事件内容 (参照messages里面的内容)
C/S架构:通过TCP或UDP协议的服务完成日志记录传送,将分布在不同主机的日志实现集中管理
rsyslog 系统日志服务
CentOS 6 以后版本的系统管理服务
rsyslog特性
多线程
UDP, TCP, SSL, TLS, RELP
MySQL, PGSQL, Oracle实现日志存储
强大的过滤器,可实现过滤记录日志信息中任意部分
自定义输出格式
ELK
ELK:由Elasticsearch, Logstash, Kibana三个软件组成
非关系型分布式数据库;
基于apache软件基金会jakarta项目组的项目lucene
Elasticsearch是个开源分布式搜索引擎,可以处理大规模日志数据,比如:Nginx、Tomcat、系
统日志等功能;
Logstash对日志进行收集、分析,过滤,并将其存储供以后使用;
Kibana 可以提供的日志分析友好的 Web 界面。
系统日志术语
facility:设施,从功能或程序上对日志进行归类
auth, authpriv, cron, daemon,ftp,kern, lpr, mail, news, security(auth),
user, uucp, syslog
#自定议的分类
local0-local7 可以通过配置文件/etc/rsyslog.conf来读取
Priority 优先级别,从低到高排序
debug, info, notice, warn(warning), err(error), crit(critical), alert,
emerg(panic)
参看帮助: man 3 syslog,man logger
rsyslog 相关文件
程序包:rsyslog
主程序:/usr/sbin/rsyslogd
CentOS 6:/etc/rc.d/init.d/rsyslog {start|stop|restart|status}
CentOS 7,8:/usr/lib/systemd/system/rsyslog.service
配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
库文件: /lib64/rsyslog/*.so
rsyslog配置文件
/etc/rsyslog.conf 配置文件格式:由三部分组成
MODULES:相关模块配置
GLOBAL DIRECTIVES:全局配置
RULES:日志记录相关的规则配置
RULES配置格式:
facility.priority; facility.priority... target
facility格式:
priority格式:
*: 所有级别
none:没有级别,即不记录
PRIORITY:指定级别(含)以上的所有级别
=PRIORITY:仅记录指定级别的日志信息
target格式:
文件路径:通常在/var/log/,文件路径前的-表示异步写入
用户:将日志事件通知给指定的用户,* 表示登录的所有用户
日志服务器:@host,把日志送往至指定的远程UDP日志服务器 @@host 将日志发送到远程TCP日志服务器
管道: | COMMAND,转发给其它命令处理
通常的日志文件的格式:
日志文件有很多,如: /var/log/messages,cron,secure等,基本格式都是类似的。格式如下
事件产生的日期时间 主机 进程(pid):事件内容
例子:将ssh服务的日志记录至自定义的local的日志设备
#修改sshd服务的配置
vim /etc/ssh/sshd_config
SyslogFacility local2
service sshd reload
#修改rsyslog的配置
vim /etc/rsyslog.conf
local2.* /var/log/sshd.log
systemctl restart rsyslog
#测试
ssh登录后,查看/var/log/sshd.log有记录
#logger测试
logger -p local2.info "hello sshd"
tail /var/log/sshd.log有记录
记录登陆信息lastb
实战案例:利用rsyslog日志服务,将收集的日志记录于MySQL中
环境信息:
两台主机
一台:rsyslog日志服务器,IP:192.168.48.107
一台:mariadb数据库服务器,IP:192.168.48.121
操作步骤:
在rsyslog服务器上安装连接mysql模块相关的程序包
yum install rsyslog-mysql
查看相关程序包
rpm -ql rsyslog-mysql
/usr/lib/.build-id
/usr/lib/.build-id/d7
/usr/lib/.build-id/d7/77fc839aa07e92f0a8858cf3f122996436c7df
/usr/lib64/rsyslog/ommysql.so
/usr/share/doc/rsyslog/mysql-createDB.sql
查看脚本文件相关内容
cat /usr/share/doc/rsyslog/mysql-createDB.sql
上传至mysql服务器
scp /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql 192.168.48.121:/data/
mariadb数据库服务器端
安装mysql服务
yum install mariadb-server
在mariadb数据库服务器上创建相关数据库和表,并授权rsyslog能连接至当前服务器
mysql < /data/mysql-createDB.sql
mysql -e "grant all on Syslog.* to loguser@'192.168.48.%' identified by '123456'";
vim /etc/rsyslog.conf
####MODULES####
#在 MODULES 语言下面,如果是 CentOS 8 加下面行
module(load="ommysql")
#在 MODULES 语言下面,如果是 CentOS 7,6 加下面行
$ModLoad ommysql
#在RULES语句块加下面行的格式
#facility.priority :ommysql:DBHOST,DBNAME,DBUSER, PASSWORD
*.info :ommysql:10.0.0.18,Syslog,loguser,123456
修改完成以后重启生效
systemctl restart rsyslog.service
测试
在日志服务器上生成日志
logger "this is a test log"
#在数据库上查询到上面的测试日志
mysql>SELECT COUNT(*) FROM SystemEvents
实战案例2:通过 loganalyzer 展示数据库中的日志
loganalyzer是用 php 语言实现的日志管理系统,可将MySQL数据库的日志用丰富的WEB方式进行展示数据库中的日志
官网:Home - Adiscon LogAnalyzer
环境信息
三台主机
一台日志服务器,利用上一个案例实现,IP:192.168.48.107,
一台数据库服务器,利用上一个案例实现,IP:192.168.48.121
一台当httpd+php 服务器,并安装loganalyzer展示web图形,IP:192.168.48.118
操作步骤:
在192.168.48.118主机上安装php和相关软件包
yum -y install httpd php-fpm php-mysqlnd php-gd
systemctl restart httpd php-fpm
在192.168.48.118上安装LogAnalyzer
从http://loganalyzer.adiscon.com/downloads/ 下载loganalyzer-4.1.10.tar.g
tar -xvf loganalyzer-4.1.12.tar.gz -C /var/www/html/log
mv loganalyzer-4.1.12/src/ /var/www/html/logs
touch /var/www/html/logs/config.php
chmod 666 /var/www/html/logs/config.php
基于web页面初始化
访问http://192.168.48.118/logs 实现初始化
选择:MySQL Native, Syslog Fields, Monitorware
安全加强(权限回收)
chmod 644 /var/www/html/logs/config.php
logrotate日志转储
logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志转储或滚动。可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行
logrotate 配置
软件包:logrotate
相关文件
计划任务:/etc/cron.daily/logrotate
程序文件:/usr/sbin/logrotate
配置文件: /etc/logrotate.conf
日志文件:/var/lib/logrotate/logrotate.status
设置http日志转储
对指定日志手动执行日志转储
#生成测试日志
dd if=/dev/zero of=/var/log/test1.log bs=2M count=1
dd if=/dev/zero of=/var/log/test2.log bs=2M count=1
#针对不同的日志创建转储配置文件
cat /etc/logrotate.d/test1
/var/log/test1.log {
daily
rotate 5
compress
delaycompress
missingok
size 1M
notifempty
create 644 root root
postrotate
echo `date +%F_%T` >> /data/test1.log
endscript
}
cat /etc/logrotate.d/test2
/var/log/test2.log {
daily
rotate 5
compress
delaycompress
missingok
size 1M
notifempty
create 644 root root
postrotate
echo `date +%F_%T` >> /data/test2.log
endscript
}
#针对一个测试日志,手动执行日志转储
logrotate /etc/logrotate.d/test1
ll /var/log/test*
cat /data/test1.log
logrotate /etc/logrotate.conf
ll /var/log/test*
ls /data
cat /data/test2.log