我想使用 在我的服务器上集中记录日志,syslog-ng
它会将 JSON 格式的行写入文件,然后会被 拾取logstash
,然后 会将其转发给elasticsearch
。此设置有效,但有些特定的 JSON 问题除外。
我syslog-ng
通过以下节将日志格式化为 JSON destination
:
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' blog精确解:
destination d_json { file("/tmp/test.json" template("$(format-json --scope selected_macros --scope nv_pairs)\n")); };