使⽤rsyslog限制⽇志⽂件⼤⼩,outchannel实现⾃动回滚
rotate
最近在使⽤rsyslog进⾏⽇志的集中管理,需要限制服务器的⽇志⽂件⼤⼩,让它在达到⼀定⼤⼩后⾃动rotate。发现outchannel能实现这种需求,遂查阅(也可执⾏$f查看本地⼿册中的OUTPUT CHANNELS部分,通常这种⽅法更有参考价值),依葫芦画瓢做了以下配置:
thankyouverymuch--------------------------------
在/etc/rsyslog.f⽂件中添加下⾯两⾏:
办英语四级成绩单$outchannel log_rotation,/var/log/mylogs/logfile.log, 500,/var/log/mylogs/rotate_script.sh /var/log/mylogs/logfile.log相去无几
greedisgoodlocal1.* $log_rotation
(红字意思是:执⾏rotate_script.sh脚本时附加logfile.log的绝对路径作为参数)
深圳北大青鸟
并新建/var/log/mylogs/rotate_script.sh脚本⽂件,内容只有⼀⾏:
mv -f ${1} ${1}.1
(接收⽂件名参数,将logfile.log⽂件move到logfile.log.1)
---------------------------------
本以为⼤功告成,乐呵呵地重启rsyslog服务开始测试。结果发现,每当logfile.log超过500B后,总是卡在那⾥不动了,新来的⽇志再也插不进去,logfile.log.1⽂件也没创建出来。
想来想去,应该是卡在了执⾏脚本的地⽅。outchannel在检测到内容超出指定⼤⼩时,执⾏mv命令失败。是⽂件权限的问题吗?由于本⼈Linux知识极端匮乏,在对⽂件权限胡乱更改⼀通之后,宣告失败。不过最后还是在⽹上搜到了解决办法,问题确实出在⽂件权限上。⽅向没找错,但解决问题的⼿段实在拙劣(惭愧。。。)。
怎么样提高表达能力rsyslog内部指定了对哪种⽂件有操作权限,在f中能够找到下⾯⼏⾏配置:
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
mho$PrivDropToUr syslog
$PrivDropToGroup syslog
前两⾏即指明rsyslog所操作的⽂件其所有者是syslog、所在组是adm,关键就在这⾥!据此更改⽇志⽂件的权限。
smac
chown -R syslog:adm /var/log/mylogs
chmod -R g+w /var/log/mylogs
疯了go
chmod ug+x /var/log/mylogs/rotate_script.sh
然后重启rsyslog服务,测试,It all works!新⽇志总是输出到logfile.log,当⼤⼩超出500B就rotate,把旧⽇志放⼊logfile.log.1(覆盖)同时logfile.log清空,接收新⽇志,如此重复。
anone在看rsyslog⽂档时还看到2009年时官⽅提出停⽤outchannel的计划,因⽽现在做好的配置在更⾼版本
的rsyslog中都有可能失效。不过也不必担⼼,就算有别的模块取代outchannel也会提供相同的功能,因为log rotation的需求是不可避免的。