相当不错得参考文档
不错得博主
很全面得文章
日志管理
基本情况介绍:
两个进程
进程一: rsyslogd 系统日志管理
主要得作用是: 收集哪类程序得哪种级别得日志,并为其找个位置
进程二: logrotate 日志轮询
主要得作用是: 对产生得日志进行自定义管理(日志文件得大小、如何删除已产生得日志等)
rsyslogd :
centos7 系统默认已安装得服务
启动方式
systemctl status rsyslog
/etc/rsyslog.conf # 默认得主配置文件
/etc/sysconfig/rsyslog # rsyslogd 相关文件,定义级别(可以看看)
#####日志分割######
/etc/logrotate.d/syslog #日志轮询配置
rpm -qc rsyslog
cat /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
sharedscripts
dateext #使用日期作为后缀
rotate 25 #保留25份
size 40M
compress #使用压缩
dateformat -%Y%m%d%s
postrotate
/bin/kill -HUP cat /var/run/syslogd.pid 2> /dev/null 2> /dev/null || true
endscript
}
nginx 日志分隔配置文件
cat /etc/logrotate.d/nginx
/var/log/nginx/access.log
{
daily
rotate 7
missingok
#notifempty
compress
dateext
create 0640 root root
sharedscripts
dateformat -%Y%m%d%s
postrotate
if [ -f /run/nginx.pid ]; then
kill -USR1 `cat /run/nginx.pid`
fi
endscript
}
/usr/sbin/logrotate -vf /etc/logrotate.d/nginx #立即执行nginx 得日志分隔
logrotate 的配置文件是 /etc/logrotate.conf。主要参数如下表:
参数 功能
compress 通过gzip 压缩转储以后的日志
dateext: 表示添加YYYYMMDD形式字符串作为文件名一部分
nocompress 不需要压缩时,用这个参数
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 备份日志文件但是不截断
create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
nocreate 不建立新的日志文件
delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。
errors address 专储时的错误信息发送到指定的Email 地址
ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty 如果是空文件的话,不转储
mail address 把转储的日志文件发送到指定的E-mail 地址
nomail 转储时不发送日志文件
olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录下
sharedscripts 运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本
prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
tabootext [+] list 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
size size 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).
在/etc/logrotate.d 编辑文件,下面是部分语法内容
daily : 指定每天自动切割
weekly: 指定每周自动切割
monthly: 指定每月自动切割
rotate [值]: 保留日志文件个数
notifempty: 空文件不切割
nocompress: 不压缩日志文件
delaycompress: 延迟压缩(当次切割不压缩,下次切割再压缩上一个文件)
create 0640 nginx root 指定新文件权限,属主属组
prerotate [命令] endscript 指定切割前进行命令操作
postrotate [命令] endscript 指定切割后进行命令操作
missingok 如果日志不存在,不提示错误
nomissingok 如果日志不存在,提示错误,默认值
示例1: 治理系统日志
[root@cg-app ~]# cat /etc/logrotate.d/rsyslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
daily #每天轮询一次
rotate 6 #指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
notifempty # 如果是空文件的话,不转储
compress # 通过gzip 压缩转储以后的日志
dateext #表示添加YYYYMMDD形式字符串作为文件名一部分
dataformat -%Y%m%d%s # 配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数
copytruncate #用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。
missingok # 如果日志丢失,不报错继续滚动下一个日志
size 40M # 当日志文件到达指定的大小时才转储,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem).
sharedscripts # 运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本
postrotate
/usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
endscript
}