二、远程发送日志
rsyslog提供三个远程日志传输方式:
关于RELP的更进一步了解可以参考 Using TLS with RELP RELP Input Module RELP Output Module (omrelp)
/etc/rsyslog.conf
rsyslogd需要打开 udp 514端口 如下
syslogd需要打开tcp 514端口
|
|
当然,如果你是用的之前老版本的syslogd程序,则发送端不需要配置文件,直接syslogd -R 服务器地址即可,只不过syslogd好像是UDP协议的514端口,照样可以用rsyslogd接收。
客户端和服务端重启相关服务即可在服务器(192.168.2.108)端看的如下结果:
重启rsyslogd之后如果没有收到日志,查看防火墙是否开启了514端口,没有开启就在服务器端打开514端口
iptables -I INPUT -p tcp --dport 514 -j ACCEPT
iptables -I OUTPUT -p tcp --dport 514 -j ACCEPT
三、日志自动转存-logrotate程序
logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。另外,旧日志也可以通过电子邮件发送,不过该选项超出了本教程的讨论范围。
1、在/etc/logrotate.d/ 路径下建立自己的日志配置文件,如下所示:
第一行:要管理的日志文件
daily: 按天转存
dateext: 按日志备份文件
rotate: 共备份5份,之后会依次替换掉最旧的文件
size=1M:当日志文件达到1M时,才备份
最后3句:必须重启rsyslogd程序,否则日志转存之后,不会写入最新的文件
另外,如果你的远程服务器没有建立好连接,也会影响本地日志的生产速度
四、logrotate触发过程
centos从6开始,daily hourly monthly weekly等这些文件夹里面的任务已经不用crond处理,而是交给了anacron处理
1、/etc/cron.hourly/0anacron 会每小时定时运行,由 /etc/cron.d/0hourly 每小时调用一次
/etc/cron.hourly/0anacron 内容如下
if test -r /var/spool/anacron/cron.daily; then
day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
exit 0;
fi
# Do not run jobs when on battery power
if test -x /usr/bin/on_ac_power; then
/usr/bin/on_ac_power >/dev/null 2>&1
if test $? -eq 1; then
exit 0
fi
fi
/usr/sbin/anacron -s
它会检测系统当前时间和/var/spool/anacron/cron.daily(谁写入的还没搞清楚)文件里的日期是否一致,一致就退出,否则运行anacron
2、anacron 程序启动,它的配置文件为/etc/anacrontab ,内容如下:
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=54 (延时54分、默认延时最小为6分)
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22 这个设置就是你看到日志切割的时间范围,一般是凌晨3点+RANDOM_DELAY+5 大约是凌晨3:59切割文件
下面任务列表:第一列是轮询天数、第2列是延时时间(单位分钟)、第3、4列是任务描述和命令,在此调用daily、weekly、monthly任务
#period in days delay in minutes job-identifier command
15cron.dailynice run-parts /etc/cron.daily
725cron.weeklynice run-parts /etc/cron.weekly
@monthly 45cron.monthlynice run-parts /etc/cron.monthly
3、由上面的anacron 调用cron.daily任务后,logrotate程序得以执行
cat /etc/cron.daily/logrotate ,内容如下:
#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate.status /etc/logrotate.conf (这里的路径要注意,有的是 /var/lib/logrotate/logrotate.status)
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
logrotate程序调用配置文件/etc/logrotate.conf 及/etc/logrotate.d/路径下的配置,生成按天、周、月为周期的文件。
遗留问题:
logrotate生成的备份日志,日期不太对,没有明确的分隔点。例如16号生成的日志,备份到了17号文件里,而17文件里包含部分18号的内容。
我感觉这类问题,应该通过START_HOURS_RANGE这个参数来设置以尽量缩小时间误差。