常用日志
/var/log/boot.log
启动的时候系统内核会检测并启动硬件,然后启动内核的功能。这些流程都会记录在 /var/log/boot.log
里。该文件只保留 本次启动的信息,不记录上一次启动的信息。
/var/log/cron
crontab 计划任务 日志。
/var/log/dmesg
CentOS 在启动时默认不显示 内核的硬件检测信息,都保存在该日志。
/var/log/lastlog
记录所有帐号最近一次登陆系统的信息
/var/log/maillog
或 /var/log/mail/\*
邮件的往来信息,主要是 postfix (SMTP 协议提供者)与 dovecot(POP3 协议提供者)所产生的信息。
/var/log/messages
用于保存有价值的、非调试的、非关键的消息,即系统的普通活动日志。
/var/log/secure
用于追踪认证系统,所有与安全相关的消息,sudo login,SSH login 等其它登陆错误
/var/log/wtmp
成功登陆系统的帐号
/var/log/faillog
登陆失败的帐号
/var/log/httpd/
apache 服务日志
/var/log/samba/
samba 服务日志
日志的滚动
LOGROTATE
日志滚动的设计是为了简化日志管理的工作,控制无休止生成的大量日志。
日志滚动可以实现自动 滚动、压缩、删除、发邮件。滚动的频率要么是按 日、周、月,要么是日志 达到一定大小 时处理。
实现原理
logrotate 程序是依靠 cron 来实现计划任务的,系统一般把日志滚动作为计划任务来运行,通常每天进行一次。脚本大多位于 /etc/cron.daily/logrotate
。如果需要更高的滚动频率,也可以把脚本放到 /etc/cron.hourly
目录。
当 logrotate 运行时,它会读取配置文件,以了解日志文件的位置、滚动频率、保留归档日志的数量。

主配置文件
logrotate 通常由主配置文件 /etc/logrotate.conf
统一管理,它会用 include
语句把 /etc/logrotate.d/
目录中的所有其它需要的配置文件全部包含进来。
/etc/logrotate.d
目录是专门为 /etc/logrotate.conf
规划出来的。每个以 RPM 包方式创建的服务,都会把其日志的配置文件,放到该目录。
配置文件指令
用几个例子解释各指令。
配置文件默认值:
weekly # 每周滚动一次
rotate 4 # 保留 4 个日志文件
create # 原日志更名后新建空日志
dateext # 旧日志用日期做文件名
#compress # 压缩旧日志
include /etc/logrotate.d # 加载该目录下所有配置文件
/var/log/wtmp { # 针对 /var/log/wtmp 该日志文件单独设定参数
monthly # 每月一次滚动
create 0664 root utmp # 新建文件的权限,用户,组
minsize 1M # 日志超过 1M 才进行滚动
rotate 1 # 只保留一个日志文件
}
加载指定目录中的配置
include /etc/logrotate.d
滚动频率
每天
daily
每周滚动一次
每周
weekly
每周滚动一次
每月
monthly
每月滚动一次
每年
yearly
每年滚动一次
滚动条件判断
超过限定的大小
minsize 1M
日志超过 1M 才进行滚动,直到开始滚动时才会检查。与时间间隔不冲突。
size 10M
与时间间隔是互斥的。仅根据文件大小来判断是否滚动,只要文件大小满足,马上滚动,不考虑是否到达时间间隔。
空文件也滚动
ifempty
即使日志文件是空的,也要滚动。
如果有日志丢失也继续滚动
missingok
滚动前操作
全局滚动前操作
firstaction
......
......
endscript
介于 firstaction 和 endscript 之间的各行命令,会在所有日志滚动开始之前最先执行。
特定日志滚动前操作
prerotate
......
......
endscript
介于 prerotate 和 endscript 之间的各行命令,会在滚动开始之前执行,如修改日志属性。对于已加上隐藏属性的文件特别必要。
只能用于特定日志文件的定义中,如果日志文件有多个,这些命令会运行多次。
通常会在 prerotate 之前加上 sharedscripts
,以便所有文件只执行一次脚本,而不是多次。
滚动后操作
全局滚动后操作
lasstaction
......
......
endscript
介于 lastaction 和 endscript 之间的各行命令,会在所有日志滚动结束之后最后执行。
特定日志滚动后操作
postrotate
......
......
endscript
介于 postrotate 和 endscript 之间的各行命令,会在滚动完成之后执行,如重启某服务。对于已加上隐藏属性的文件特别必要。
只能用于特定日志文件的定义中,如果日志文件有多个,这些命令会运行多次。
通常会在 postrotate 之前加上 sharedscripts
,以便所有文件只执行一次脚本,而不是多次。
旧文件操作
保留
rotate 4
保留 4 个日志文件
压缩
compress
压缩 旧日志,默认用 gzip 压缩
delaycompress
延迟压缩。本次滚动产生的旧文件,要到下次滚动时才会压缩。因为有时有些程序暂时无法关闭日志文件,需要持续向日志文件写入一段时间。
compressext .xz
指定压缩文件的 后缀
compresscmd /usr/bin/xz
指定使用的 压缩命令
uncompresscmd /usr/bin/unxz
指定 解压缩命令
compressoptions -9
指定 压缩比,默认为 -9
,即最大压缩比
nocompress
不压缩旧日志
复制
copy
生成旧文件副本,但 不修改旧文件 本身。使用该指令时,create
失效。
nocopy
不复制原始旧文件,会覆盖 copy
。
copytruncate
生成旧文件副本后,直接修改旧文件。使用该指令时,create
失效。
nocopytruncate
生成旧文件副本后,不要直接修改旧文件,会覆盖 copytruncate
。
重命名
dateext
旧日志 用日期做文件名,会在原文件名后面加上格式为 -20180609
的字符串。
dateformat -%Y-%m-%d-%s
需要与 dateext
配合使用,自定义日期格式。
只能使用 %Y
、%m
、%d
、%s
,而且必须遵守年、月、日的先后顺序,因为 logrotate 会按第一个字段来排序,来判断哪个是旧的,再予以删除。
extension foo
指定在滚动日志时需要保留的后缀,mylog.foo
在滚动后会重命名为 mylog.1.foo.gz
,而不是 mylog.foo.1.gz
。
移动
olddir /home/neo/logs
把旧日志文件移动到指定目录中滚动。
删除
maxage 100
超过 100 天的旧日志将被删除。只有在开始滚动日志时才会检查。如果配置了 mail
和 maillast
,这些文件就会被做为附件发邮件给管理员。
shred
用 shred -u
来删除文件,而不是用 unlink()
,这样删除的比较彻底、安全。
新文件
新建
create
滚动后,新建 空日志
nocreate
滚动后,不要新建空日志,会覆盖 create
。
属性
create 0664 root utmp
新建空日志的 权限、所有者、属组
发邮件
给特定邮箱发邮件
mail imhawkz@gmail.com
邮件内容为刚刚滚动的日志
mailfirst
邮件内容为快要过期的文件
maillast
配置特定日志
日志绝对路径 { # 可以用空格分隔多个日志
参数设置1
参数设置2
执行脚本
...
}
执行脚本部分可调用外部指令来执行额外的命令,需用 sharedscripts .... endscript
标签包围。
配置范例
只对 /var/log/
内的 cron, maillog, messages, secure, spooler 这几个日志文件有效。
日志滚动每周一次,保留四个,滚动下来的日志不压缩,滚动完毕后获取 syslog 的 PID,用 kill -HUP 重启 syslogd。
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/messages
endscript
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/usr/bin/chattr +a /var/log/messages
endscript
}
/bin/kill -HUP
会让 rsyslogd 重启并读取其配置文件。