Syslog-Ng
如何以 JSON 格式編寫日誌?
我想在我的伺服器上集中日誌記錄,使用
syslog-ng
它將 JSON 格式的行寫入文件,該文件又將被 拾取logstash
,並將其轉發到elasticsearch
. 除了一些特定的 JSON 問題外,此設置有效。
syslog-ng
我通過destination
節將日誌格式化為 JSON:destination d_json { file("/var/log/all_syslog_in_json.log" perm(0666) template("{\"@timestamp\": \"$ISODATE\", \"facility\": \"$FACILITY\", \"priority\": \"$PRIORITY\", \"level\": \"$LEVEL\", \"tag\": \"$TAG\", \"host\": \"$HOST\", \"program\": \"$PROGRAM\", \"message\": \"$MSG\"}\n")); };
這通常可以正常工作,但有時 JSON 會因
$MSG
.有沒有更好的方法來格式化消息?我正在查看內置
json-parser
但它看起來需要鍵值對作為輸入,而我想將可用欄位分解為 JSON 條目編輯和解決方案:
我在Dustin Oprea 的部落格上找到了確切的解決方案:
destination d_json { file("/tmp/test.json" template("$(format-json --scope selected_macros --scope nv_pairs)\n")); };
由於您想將消息格式化為 JSON,而不是對其進行解析,因此您需要 syslog-ng 的 format-json() 函式(請參閱管理員指南> 模板和重寫 > 自定義消息格式 > 模板函式 > format-json)。
最新版本的 syslog-ng 可以直接向 Elasticsearch 發送消息(請參閱管理員指南> 目的地 > Elasticsearch)。
HTH,羅伯特