最近碰到一個需求是要用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