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:调试信息
(2info:
(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
  1. 程序:/usr/sbin/logrotate
  2. 配置:/etc/logrotate.conf 和/etc/logrotate.d/
  3. 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的梳理的主要内容,如果未能解决你的问题,请参考以下文章

日志轮替(logrotate)的常用配置参数

使用logrotate轮替MySQL的mysql-audit审计日志

rsyslogd日志管理

Linux实操篇—— 日志管理

Linux_rsylogd日志轮替

Linux中的日志功能