日志管理
1. 常用日志
日志服务:rsyslogd
/var/log
常见的日志文件:
日志文件 | 说明 |
---|---|
/var/log/cron | 记录系统定时任务相关信息 |
/var/log/cpus | 记录打印信息的日志 |
/var/log/dmesg | 记录系统再开机是内核自检的信息,也可以通过dmesg目录查看 |
/var/log/btmp | 记录等罗错误日志,这是个二进制文件,只能通过命令lastb查看 |
/var/log/lastlog | 记录系统中所有用户最后一次等罗时间的日志,二进制文件,通过lastlog命令查看 |
/var/log/maillog | 记录邮件信息 |
/var/log/message | 记录系统重要信息的日志,如果系统出问题,首先要检查这个日志 |
/car/log/secure | 记录验证和授权的信息,只要涉及账户和密码的程序都会记录 |
/var/log/wtmp | 永久记录所有用户的注销、登录信息,启动、重启、关机等,二进制,使用last命令查看 |
/var/run/wtmp | 记录当前已经登录的用户信息,二进制,通过w、who、users等命令查询 |
配置文件etc/rsyslog
2. 日志轮替
/etc/logrotate
先来个题外话:
kill -HUP pid号,可以再不重启的情况下重新加载配置文件
如果我们想把日志加入到轮替当中,有两个办法:
- 直接在这个配置文件中加入配置项即可
- 在/etc/logrotate.d目录下面自己创建脚本文件,注意要按照对应格式来。
logrotate的一些配置项:
参数 | 参数说明 |
---|---|
daily | 日志的轮替周期是每天,相当于每天会重新生成一个日志文件 |
weekly | 日志的轮替周期是每周 |
monthly | 日志的轮替周期为每个月 |
rotate 数字 | 表示保留的文件个数 |
compress | 日志轮替时,旧的日志进行压缩 |
create mode owner group | 建立新的日志,指定权限、用户、组,mode代表权限,比如: create 0600 root utmp |
missingok | 如果日志不存在,则忽略该日志的警告信息 |
notifempty | 如果日志为空,组不进行日志轮替 |
minsize 大小 | 日志轮替的最小值,也就是日志一定要达到这个最小值才会轮替,否则时间到了也不会轮替 |
size 大小 | 日志只有大于指定大小才会进行轮替,而不是按照时间轮替 |
dateext | 使用日期做为日志轮替的文件后缀,比如:message-20220107 |
sharedscripts | 执行一次这个关键字后面的脚本 |
prerotate/endscript | 在日志轮替之前执行脚本命令 |
postrotate/endscript | 在日志轮替之后执行脚本命令 |
有了上面的配置说明,我们来解读一下一些基本的配置:
[wuqian@localhost ~]$ vim /etc/logrotate.conf
# create new (empty) log files after rotating old ones
create
# 创建新的日志文件
# use date as a suffix of the rotated file
dateext
# 以日期为后缀创建日志文件
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
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
# 轮替一次
}
/var/log/btmp {
missingok
# 若不存在,忽略警告
monthly
# 每月轮替
create 0600 root utmp
# 见上
rotate 1
# 轮替一次
}
# system-specific logs may be also be configured here.
再看一个apache的轮替:
[root@localhost httpd]# vim /etc/logrotate.d/httpd
1 /var/log/httpd/*log {
# 该目录下所有log文件生效
2 missingok
# 若时间不存在,忽略警告
3 notifempty
# 若日志文件为空,则不进行轮替
4 sharedscripts
# 执行脚本
5 delaycompress
# 将压缩推迟到下一个环节,但是必须要与compress组合才有效,也就是我们的配置文件中必须有compress配置项
6 postrotate
# 在论题完成之后执行脚本
7 /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
# 该脚本意思为重新加载apache服务,源文件中没有提及需要重新加载rsyslog服务,但是最好执行一下,不然日志会往旧的文件里写
bin/kill-HUP $(/bin/cat/var/run/syslogd.pid 2>/dev/null) &>/dev/null
# 重新加载rsyslog才生效
8 endscript
# 脚本结束
9 }
3. 将自己的日志加入轮替
我们之前自己建立了一个日志文件:/var/log/mytest,log
[root@localhost httpd]# vim /etc/rsyslog.conf
....
....
93 *.err /var/log/mytest.log
...
在配置文件中加入以下内容
...
/var/log/mytest.log{
monthly
rotate 5
create
}
4. logrotate命令
-l :显示日志轮替过程
-f:强制进行日志轮替
运行命令看我们的执行结果如何:
[root@localhost httpd]# logrotate -vf /etc/logrotate.conf
...
rotating pattern: /var/log/mytest.log forced from command line (5 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/mytest.log
log needs rotating
rotating log /var/log/mytest.log, log->rotateCount is 5
dateext suffix '-20220106'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /var/log/mytest.log to /var/log/mytest.log-20220106
creating new /var/log/mytest.log mode = 0600 uid = 0 gid = 0
如上所示,执行完成。
所以我们通过源码包按照的程序也可以通过logrotate来进行轮替。