日志管理
现在centos中使用的是rsyslogd日志管理服务,是之前syslogd的升级版。
Linux中的日志文件一般保存在/var/log目录下。
[root@ddkk.com log]# ls
anaconda cron-20220206 kdump.log private vmware-network.2.log
audit cron-20220221 lastlog secure vmware-network.3.log
boot.log cron-20220227 mail secure-20220206 vmware-network.4.log
boot.log-20220204 cron-20220306 maillog secure-20220221 vmware-network.5.log
boot.log-20220206 dnf.librepo.log maillog-20220206 secure-20220227 vmware-network.6.log
boot.log-20220221 dnf.log maillog-20220221 secure-20220306 vmware-network.7.log
boot.log-20220307 dnf.rpm.log maillog-20220227 spooler vmware-network.8.log
boot.log-20220308 firewalld maillog-20220306 spooler-20220206 vmware-network.9.log
boot.log-20220309 hawkey.log messages spooler-20220221 vmware-network.log
boot.log-20220311 hawkey.log-20220206 messages-20220206 spooler-20220227 vmware-vgauthsvc.log.0
btmp hawkey.log-20220221 messages-20220221 spooler-20220306 vmware-vmsvc-root.log
btmp-20220304 hawkey.log-20220227 messages-20220227 sssd vmware-vmtoolsd-root.log
chrony hawkey.log-20220306 messages-20220306 tuned wtmp
cron httpd pcp vmware-network.1.lo
系统中常见的日志文件
日志文件 | 说明 |
---|---|
/var/log/cron | 记录了系统定时任务相关的日志。 |
/var/logs/dmesg | 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息。 |
/var/log/btmp | 记录错误登录的日志,这个文件是二进制文件,需要用lastb命令查看。 |
/var/log/lastlog | 记录所有用户最后一次登录时间的日志,需要用lastlog明令查看。 |
/var/log/mailog | 记录邮件信息。 |
/var/log/message | 记录系统中重要信息的日志,如果系统出了问题,首先要检查的就应该是这个日志。 |
/var/log/wtmp | 永久记录所有用户的登录,需要用last命令来查看。 |
/var/log/secure | 记录验证和授权方面的信息,只要设计账户和密码的程序都会记录。 |
rpm包安装的服务记录的日志才会/var/log目录下,源码包安装服务的日志则是在源码包指定目录中。
日志文件格式
只要是由日志服务rsyslogd记录的日志文件,格式都是一样的,基本日志格式有以下四列:
- 事件产生的事件
- 发生事件的服务器的主机名
- 产生事件的服务名或程序名
- 事件的具体信息
rsyslogd服务的配置文件
/etc/rsyslog.conf配置文件格式 :
[root@ddkk.com log]# vim /etc/rsyslog.conf
...
mail.* -/var/log/maillog
#mail服务名 .连接符 *日志登记 -是指先存在内存中,存满后存在磁盘里 /var/log/maillog存放位置
*.emerg :omusrmsg:*
#如果情况比emerg严重的,通知给所有用户
...
日志服务连接符号:
- “.”:代表只要比后面等级高,就记录。
- “.=”:代表只记录所需等级的日志。
- “.!”:除了该等级的日志,都记录。
日志等级
等级名称 | 说明 |
---|---|
debug | 一般的调试说明信息 |
info | 基本的通知信息 |
notice | 普通信息,但有一定的重要性 |
warning | 警告信息,但是还不会影响到服务或系统的运行 |
err | 错误信息,一般达到err等级的信息以及可以影响到服务或系统的运行 |
crit | 临界状况信息,比err严重 |
alert | 警告状态信息,比crit严重,必须立即采取行动 |
emerg | 疼痛等级信息,系统已经无法使用了 |
* | 所有日志等级 |
/etc/rsyslog.d/
# Include all config files in /etc/rsyslog.d/
include(file="/etc/rsyslog.d/*.conf" mode="optional")
这一行的意思是所有/etc/syslog.d/*.conf的文件都会被包括进来,所以要想给指定的服务添加日志管理,可以写入/etc/rsyslog.conf,也可以在/etc/rsyslog.d/文件中添加日志管理文件。
日志轮替
在工作中,我们需要保存一定时间范围内的日志文件,以分析和预防系统中可能出现的问题,这个时候,logrotate服务就很重要了,它是Linux提供的日志轮替服务。
日志轮替的功能就是把旧的日志文件改名,同时建立新的日志文件,把超过保存范围时间的日志文件给删除。如果配置文件中有"dateext"参数,那么logrotate将会用日期来作为旧日志的后缀。
logrotate配置文件
[root@ddkk.com log]# vim /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
#轮替时间,一周轮替一次
# keep 4 weeks worth of backlogs
rotate 4
#会保存4个旧文件
# 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
#/etc/logrotate.d中的文件被包括进来,也是logrotate的配置文件
# system-specific logs may be also be configured here.
英文是官方注释,中文是解释了一下。
配置文件夹 /etc/logrotate.d
[root@ddkk.com logrotate.d]# ls
bootlog btmp chrony dnf firewalld httpd kvm_stat sssd syslog wtmp
[root@ddkk.com logrotate.d]# vim /etc/logrotate.d/httpd
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
delaycompress
postrotate
/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
endscript
}
logrotate配置文件的参数解释:
参数 | 解释 |
---|---|
daily | 每天轮替 |
weekly | 每周轮替 |
mouthly | 每月轮替 |
rotate 数字 | 保留的日志个数 |
create mode owner group | 新建日志,并规定日志文件的权限、所有者、所属组,如create 0600 root utmp |
mail address | 当日志轮替是,输出内容通过邮件地址发送到指定的邮件地址 |
missingok | 当日止文件不存在时,忽略该日志文件的警告信息。 |
notifempty | 如果日志为空文件,则不进行日志轮替 |
minsize | 日志轮替的最小值,也就是日志一定要达到这个最小值才会轮替,否则就断时间达到也不轮替 |
size | 日志只有达到指定大小才轮替,不按照时间轮替 |
dateext | 使用日期作为轮替文件后缀 |
sharedscripts | 该关键字后的脚本只执行一次 |
prerotate/endscript | 在日志轮替之前执行脚本命令 |
postrotate/endscript | 在日志轮替之后执行脚本命令 |
注:
被轮替日志的服务和rsyslogd需要在轮替后重启一次,否则无法正常运行。
把自己日志加入轮替
- 直接写在/etc/logrotate.conf配置文件中。
- 直接在/etc/logrotate.d/目录中加入配置文件。
模板:
/date/logs/nginx/access/access.log /date/logs/nginx/access/default.log{
daily
rotate 15
sharedscripts
postrotate
/bin/kill -HUP $(/bin/cat /var/run/syslog.pid) &>/dev/null
#重启rsyslogd服务,平滑重启
/bin/kill -HUP $(/bin/cat /usr/local/nginx/logs/nginx.pid) &>/dev/null
#重启Nginx服务
endscript
}