Logging
GELF 中的 Rsyslog 輸出
rsyslog 功能強大,但它的文件並不那麼明確。我不知道如何解析日誌文件並將其直接路由到GELF格式的 Graylog。
我找到了一些關於在 rsyslog 中輸出 gelf的文件,但我不確定如何繼續。
到目前為止,它試圖將下面的 conf 放入,
/etc/rsyslog.d/01-access.conf
但這似乎不起作用……template(name="gelf" type="list") { constant(value="{\"version\":\"1.1\",") constant(value="\"host\":\"") property(name="hostname") constant(value="\",\"short_message\":\"") property(name="msg" format="json") constant(value="\",\"timestamp\":\"") property(name="timegenerated" dateformat="unixtimestamp") constant(value="\",\"level\":\"") property(name="syslogseverity") constant(value="\"}") } input(type="imfile" File="/var/log/apache2/access.log" Tag="apache-access" ) if $programname == 'apache-access' then { action( type="omfwd" Target="GRAYLOG-IP" Port="12201" Protocol="tcp" template="gelf" ) stop }
由於 Gelf 的空字節消息分隔符規範,您遇到此問題是因為通過 tcp 發送無法使用 rsyslog。來自官方 rsyslog 文件:(http://www.rsyslog.com/doc/v8-stable/tutorials/gelf_forwarding.html)“請注意,上述情況僅適用於 UDP 傳輸。使用 TCP 時,Graylog 需要 Nullbyte作為消息分隔符。這目前在 rsyslog 中是不可能的。” 但是,您的範例應該通過 udp 工作。
一句忠告,我肯定會建議檢查 rsyslog 過濾器規則,因為消息處理將繼續您的範例(檢查波浪字元)。