最近碰到一个需求是要用syslog接收远程日志,将远程日志输出到一个单独的文件中。
实现这个需求,只需要在/etc/rsyslog.conf添加如下配置:
$template IpTemplate,"/var/log/%FROMHOST-IP%.log"
*.* ?IpTemplate
& ~
添加这三行配置之后,远程日志会被单独输出到一个以IP命名的日志文件中。
查看该文件日志会发现每一条收到的日志都被添加上了一个日志头,这个非常讨厌,有没有办法去除掉这些日志头呢?
方法是有的,仍然是添加/etc/rsyslog.conf配置:
#$template myformat,"%$NOW% %TIMESTAMP:8:15% %hostname% %syslogtag% %msg%\n"
$template myformat,"%msg%\n" #去除日志头
$ActionFileDefaultTemplate myformat #使用自定义的日志模板
使用这种方式除了去除日志头,当然也是能修改日志头的。使用上面一个template就是修改时间格式了。
如果采用了去除日志头的日志模板,则会导致所有记录的日志(包括远程和本地的日志)都将不会有日志头。
勘误:如果使用"%msg%\n"输出日志,如果一条日志被分为多条日志输出,则会出现日志衔接不上,日志与日志之间会出现丢失一定字符的情况。为了解决这个问题,应该
"%syslogtag% %msg%\n"作为myformat template进行输出。
下面给出rsyslog的部分配置文件:
# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
$template myformat,"%msg%\n"
#$template myformat,"%$NOW% %TIMESTAMP:8:15% %hostname% %syslogtag% %msg%\n"
$ActionFileDefaultTemplate myformat
$template IpTemplate,"/var/log/%FROMHOST-IP%.log"
*.* ?IpTemplate
& ~
系统:debian 7
rsyslog 版本:5.8.11-3+deb7u2 (系统自带的版本)
参考链接:
https://linux.cn/article-5023-1.html
http://961911.blog.51cto.com/951911/1590365