Syslog-Ng

如何以 JSON 格式編寫日誌?

  • October 12, 2020

我想在我的伺服器上集中日誌記錄,使用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,羅伯特

引用自:https://serverfault.com/questions/730924