rsyslogd以及日志轮替logrotate的梳理
Posted ZHE
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rsyslogd以及日志轮替logrotate的梳理相关的知识,希望对你有一定的参考价值。
1. rsyslog
- rsyslog可记录的日志有
auth :(authpriv) 主要与认证有关的机制,例如 login, ssh, su 等需要帐号/密码的咚咚; cron: 就是例行性工作排程 cron/at 等产生讯息记录的地方; daemon: 与各个 daemon 有关的讯息; kern: 就是核心 (kernel) 产生讯息的地方; lpr: 亦即是列印相关的讯息啊! mail: 只要与邮件收发有关的讯息纪录都属于这个; news: 与新闻群组伺服器有关的东西; syslog: 就是 syslogd 这支程式本身产生的资讯啊! user, uucp, local0 ~ local7 与 Unix like 机器本身有关的一些讯息。
- rsyslog的日志等级
(1)debug:调试信息 (2)info: (3)notice (4)warning (5)err (6)crit (7)alert (8)emerg (9)* :所有日志等级的信息 (10).none :忽略日志服务,不记录
- /etc/rsyslog.conf配置文件解读
*.info;mail.none;authpriv.none;cron.none /var/log/messages #除了mail、authpriv、cron之外的任何服务产生日志等级为info的信息都记录在message之内 authpriv.* /var/log/secure #authpriv服务发生的任何等级的日志都记录在secure中 mail.* -/var/log/maillog #同理,是Mail服务发生的日志都记录在maillog中 $ModLoad ommysql #引用mysql模块 mail.* :ommysql:localhost,Syslog,rsyslog,password #将mail的任何信息记入:本地mysql中的Syslog库中,用户为rsyslog,密码为:password
- 赋值方法
(1) . :代表大于等于指定的等级的日志会记录到指定的日志里面 (2) .= :代表日志等级等于指定的等级会记录 (3) .! :除了指定等级之外的日志会被记录
2. logrotate
- 关于logrotate
程序:/usr/sbin/logrotate
配置:/etc/logrotate.conf 和/etc/logrotate.d/
在crontab里排期: /etc/cron.daily/logrotate
- /etc/logrotate.conf 解读
#每个礼拜滚一次 weekly #保留4个档,比如第5次更替,那第一次的就没了 rotate 4 #建立新的日志来继续存储 create # 将日期作为轮替日志的结尾,比如:maillog-20160701 dateext # 是否压缩日志,压缩工具gzip,比如:maillog-20160701.gz compress # 子配置文件的包含目录 include /etc/logrotate.d # 轮替的两个实例 /var/log/wtmp { monthly create 0664 root utmp minsize 1M rotate 1 } /var/log/btmp { missingok monthly create 0600 root utmp rotate 1 }
- /etc/logrotate.d 下面包含了日志轮替的实例,拿其中一个分析
/var/log/maillog { daily 每天都执行 rotate 7 保留7份轮替日志 dateext 以日期作为轮替日志的标识 create 创建新文件 minsize 1G 日志最小1G,不到1G不轮替 sharedscripts :和endscript对应,中间放脚本 postrotate :在启动logrotate前,执行下面的动作 /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true /bin/kill -HUP `cat /var/run/fail2ban/fail2ban.pid 2> /dev/null` 2> /dev/null || true endscript :结束脚本 compress :压缩 }
- 强制日志轮替命令
/usr/sbin/logrotate /etc/logrotate.conf
3. 屡一下计划任务和rsyslog 以及logrotate之间的关系
- rsyslog:负责将产生的日志分类,打到各个日志文件中
- logrotate:负责切割日志
- crontab:定时任务在/etc/下面有 cron.hourly cron.daily cron.weekly cron.monthly 等目录,在对应目录下的程序,会按其给定的时间执行一次,比如cron.daily下的程序会每天都执行一次。
- 在cron.daily目录下有logrotate的一个Shell脚本:
#!/bin/sh /usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1 EXITVALUE=$? if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" fi exit 0
这个脚本每天执行一次,所以会将 /etc/logrotate.conf 中设定的切割策略都执行一遍,当然include 所包含的 /etc/logrotate.d/* 的所有策略也会执行,因此实现了日志的轮替。
以上是关于rsyslogd以及日志轮替logrotate的梳理的主要内容,如果未能解决你的问题,请参考以下文章