Rsyslog日志管理系统
一、常见的系统日志
日志格式:文本日志/二进制日志/数据库日志
默认的相关日志文件:
/var/log/boot.log 系统引导日志,记录开机启动信息
/var/log/dmesg 核心的启动日志
/var/log/messages 系统的日志文件
/var/log/maillog 邮件服务的日志
/var/log/xferlog ftp服务的日志
/var/log/secure 网络连接及系统登录的安全信息
/var/log/cron 定时任务的日志
/var/log/wtmp 记录所有的登入和登出 last -f 查看
/var/log/btmp 记录失败的登入尝试
二、日志级别
# man syslog
日志信息分为以下级别,从上到下级别依次降低
none <-- none 不算是一个等级,它表示不记录服务的所有信息
0 emerg <-- 系统不可用
1 alert <-- 特别留意的报警信息
2 crit <-- 非常严重的状况
3 err <-- 错误信息
4 warning <-- 警告信息
5 notice <-- 稍微需要注意的信息
6 info <-- 正常信息
7 debug <-- 调试信息,开发人员使用
三、日志配置
1. 日志定义相关符号
配置文件中常见的表示符号
. <-- 用来分隔服务和级别
* <-- 任何服务,或者任何级别
= <-- 有等号表示等于某一级别,没有等号表示大于或者等于某一级别
! <-- 排除操作,前面有相同服务的表达式,这个操作才有意义
代表从前面表达式所包含的内容中排除某些内容
; <-- 用于分隔不同的 服务.级别 组合
, <-- 用于分隔不同的服务
- <-- 用于指定目标文件时,代表异步写入
举例说明:
mail.=info
mail.info mail服务的大于等于info级别的日志
mail.info;cron.=info /var/log/test.log
mail,cron.err
cron.=warning
mail,cron.info
cron.info;cron.!=err 012456
0123456 0124567
cron.info;cron.!err 456
0123456 4567
2. 了解配置文件
[root@review1 ~]# vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none /var/log/messages
所有服务产生的日志,除了mail/验证/任务计划相关日志都记录/var/log/message
authpriv.* /var/log/secure
记录所有跟验证有关日志
mail.* -/var/log/maillog
记录所有跟邮件有关的日志信息
cron.* /var/log/cron
记录跟任务计划查关的日志
*.emerg *
把所有级别为emerg 的信息发送给所有登录到系统上的用户
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
记录所有跟启动相关的日志信息
特别说明:
说明:
# man rsyslog.conf
The facility is one of the following keywords: auth, authpriv,
cron, daemon, kern, lpr, mail, mark, news, security (same as
auth), syslog, user, uucp and local0 through local7.
log facility 设备 设施: 用来记录一种类型日志的日志设备
daemon
auth
authpriv
user
mail
lpr
news
uucp
ftp
local0-7
四、本地日志管理
1、 修改配置文件
40 # Log anything (except mail) of level info or higher.
41 # Don't log private authentication messages!
42 *.info;mail.none;authpriv.none;cron.none /var/log/messages
43
44 # The authpriv file has restricted access.
45 authpriv.* /var/log/secure
46
47 # Log all the mail messages in one place.
48 mail.* -/var/log/maillog
49
50
51 # Log cron stuff
52 cron.* /var/log/cron
//修改配置文件定义的路径即可修改日志存储方式
2、 示例
[root@review1 ~]# vim /etc/rsyslog.conf //修改配置文件计划任务日志
cron.* /var/log/crontab.log
[root@review1 log]# rm -rf cron* //删除原本日志
[root@review1 log]# ls |grep cron* //检测是否删除
[root@review1 log]#
[root@review1 log]# service rsyslog restart //重启服务
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
[root@review1 log]# crontab -e //编辑计划任务
no crontab for root - using an empty one
crontab: installing new crontab
[root@review1 log]# crontab -l
*/2 * * * * /usr/bin/ntpdate -s 120.25.108.11 &>/dev/null
[root@review1 log]# ls |grep cron* //检查日志
crontab.log //新日志生成成功
[root@review1 log]# cat crontab.log
Jun 26 19:26:24 review1 crontab[1457]: (root) BEGIN EDIT (root)
Jun 26 19:31:00 review1 crontab[1457]: (root) REPLACE (root)
Jun 26 19:31:00 review1 crontab[1457]: (root) END EDIT (root)
Jun 26 19:31:06 review1 crontab[1459]: (root) LIST (root)
注:
也可以通过修改服务的日志载体来修改日志存储日志。
例:
60 # Save boot messages also to boot.log
61 local7.* /var/log/boot.log
五、远程日志管理
log-server(192.168.221.129):收集日志
log-client(192.168.221.139):将日志发送到log-server端
server端:打开TCP和UDP服务,默认端口514
12 # Provides UDP syslog reception
13 $ModLoad imudp
14 $UDPServerRun 514
15
16 # Provides TCP syslog reception
17 $ModLoad imtcp
18 $InputTCPServerRun 514
[root@log-server ~]# service rsyslog restart //重启服务,检查端口是否打开
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
[root@log-server ~]# netstat -ntpl |grep 514
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 1563/rsyslogd
tcp 0 0 :::514 :::* LISTEN 1563/rsyslogd
[root@log-server ~]#
client端:将sshd日志文件发送到远端去
//设置sshd日志文件载体
[root@log-client ~]# vim /etc/ssh/sshd_config
SyslogFacility LOCAL0
[root@log-client ~]# vim /etc/rsyslog.conf
local0.* @192.168.221.129:514
//@表示UDP传输,@@表示TCP传输
[root@log-client ~]# service sshd restart //重启服务
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
[root@log-client ~]# service rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
//测试
[root@log-client ~]# ssh 192.168.221.129
Last login: Tue Jun 26 21:35:05 2018 from 192.168.221.139
[root@log-server ~]#
[root@log-server ~]#
[root@log-server ~]# exit
logout
Connection to 192.168.221.129 closed. //登录成功
[root@log-server ~]# tail -f /var/log/messages
Jun 26 21:38:26 log-client sshd[1972]: Received signal 15; terminating.
Jun 26 21:38:26 log-client sshd[2003]: Server listening on 0.0.0.0 port 22.
Jun 26 21:38:26 log-client sshd[2003]: Server listening on :: port 22.
//server端成功看到ssh登录日志,日志传输成功
注: ssh登录日志传输成功,但是client也有记录,但是也可以在配置文件中关闭。
- 如何将远程传来的日志存到指定文件里
[root@log-server log]# vim /etc/rsyslog.conf
在该文件的最后面加入以下内容:
//定义一个模板DynFile,将日志保存在/var/log里,文件名为system-客户端的主机名.log
$template DynFile,"/var/log/system-%HOSTNAME%.log"
//动态加载调用上面的模板
local0.* ?DynFile
结果:
日志客户端发过来的日志就会单独保存在/var/log/system-log-client.log,这样就实现了日志的单独保存
六、日志轮转
1、日志轮转意义
- 日志轮转作用:日志轮转,切割,备份,归档。
日志轮转优点:
①避免日志过大占满/var/log的文件系统 ②方便日志查看 ③将丢弃系统中最旧的日志文件,以节省空间
日志轮转程序
①日志轮转的程序是logrotate ② logrotate本身不是系统守护进程,它是通过计划任务crond每天执行
2、日志轮转实现方法
- 配置文件
[root@log-server ~]# vim /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
#以7天为一个周期(每周轮转)
rotate 4
#每4周备份日志文件(保留4份日志文件)
create
#当老的转储文件被归档后,创建一个新的空的转储文件重新记录,权限和原来的转储文件权限一样.
dateext
#用日期来做轮转之后的文件的后缀名
#compress
#指定不压缩转储文件,如需压缩去掉注释就可以了.通过gzip压缩
include /etc/logrotate.d #加载外部目录
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
monthly 表示此文件是每月轮转,而不会用到上面的每周轮转
create 0664 root utmp 轮转之后创建新文件,权限是0664,属于root用户和utmp组
minsize 1M 文件大于1M,而且周期到了,才会轮转
rotate 1 保留1分日志文件,每1个月备份一次日志文件
}
/var/log/btmp {
missingok 如果日志文件不存在,不报错
monthly
create 0600 root utmp
rotate 1
}
- 子配置文件
[root@log-server ~]# vim syslog
//这个子配置文件,没有指定的参数都会以默认方式轮转
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
sharedscripts 不管有多少个文件待轮转,prerotate 和 postrotate 代码只执行一次
postrotate 轮转完后执行postrotate 和 endscript 之间的shell代码
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true 这一句话表示轮转后对rsyslog的pid进行刷新(但pid其实不变)
endscript
}
注: 先写日志再刷新PID,日志写到了旧日志里,先刷新PID再写日志,日志写在新日志文件里。
案例:SSH服务日志单独存储
- 方法一:修改主配置文件
[root@log-server ~]# vim /etc/logrotate.conf 37 /var/log/ssh { 38 daily 39 rotate 5 40 size 5M 41 create 42 } //指定ssh日志存储位置 [root@log-server log]# vim /etc/ssh/sshd_config 37 SyslogFacility LOCAL6 [root@log-server log]# vim /etc/rsyslog.conf 62 local6.* /var/log/ssh //测试 [root@log-server log]# find ./ -type f -delete //删除旧日志文件 [root@log-server log]# ls audit ntpstats samba [root@log-server log]# service sshd restart //重启服务 Stopping sshd: [FAILED] Starting sshd: [ OK ] [root@log-server log]# service rsyslog restart Shutting down system logger: [ OK ] Starting system logger: [ OK ] [root@log-server log]# ls //新日志已被创建 audit cron messages samba spooler boot.log maillog ntpstats secure ssh [root@log-server log]# logrotate -f /etc/logrotate.conf //强制轮转 error: stat of /var/log/wtmp failed: No such file or directory [root@log-server log]# ls //轮转成功 audit messages spooler boot.log messages-20180627 spooler-20180627 cron ntpstats ssh cron-20180627 samba ssh-20180627 maillog secure maillog-20180627 secure-20180627
- 方法二:修改子配置文件
[root@log-server logrotate.d]# pwd /etc/logrotate.d //在此文件夹下创建 [root@log-server logrotate.d]# vim ssh //创建需要轮转的日志文件的配置文件 1 /var/log/ssh { //注意这个"/var/log/ssh"必须与"/etc/rsyslog.conf"中的设置完全一样,不然logrotate找不到这个设置内容 2 daily 3 rotate 5 4 size 5M 5 create 6 } //测试 [root@log-server log]# find ./ -type f -delete [root@log-server log]# ls audit ntpstats samba [root@log-server log]# service rsyslog restart Shutting down system logger: [ OK ] Starting system logger: [ OK ] [root@log-server log]# logrotate -f /etc/logrotate.conf error: stat of /var/log/wtmp failed: No such file or directory [root@log-server log]# ls audit messages spooler boot.log messages-20180627 spooler-20180627 cron ntpstats ssh cron-20180627 samba ssh-20180627 maillog secure maillog-20180627 secure-20180627 //轮转成功
配置文件中常见参数
常用的指令解释,这些指令都可以在man logrotate 中找得到。
daily 指定转储周期为每天
monthly 指定转储周期为每月
weekly <-- 每周轮转一次(monthly)
rotate 4 <-- 同一个文件最多轮转4次,4次之后就删除该文件
create 0664 root utmp <-- 轮转之后创建新文件,权限是0664,属于root用户和utmp组
dateext <-- 用日期来做轮转之后的文件的后缀名
compress <-- 用gzip对轮转后的日志进行压缩
minsize 30K <-- 文件大于30K,而且周期到了,才会轮转
size 30k <-- 文件必须大于30K才会轮转,而且文件只要大于30K就会轮转
不管周期是否已到
missingok <-- 如果日志文件不存在,不报错
notifempty <-- 如果日志文件是空的,不轮转
delaycompress <-- 下一次轮转的时候才压缩
sharedscripts <-- 不管有多少个文件待轮转,prerotate 和 postrotate 代码只执行一次
prerotate <-- 如果符合轮转的条件
则在轮转之前执行prerotate和endscript 之间的shell代码
postrotate <-- 轮转完后执行postrotate 和 endscript 之间的shell代码