我已经设置 syslog-ng 3.25.1 来从文件读取日志消息、将其解析为 JSON,并将它们转发到 ElasticSearch 集群。
当消息格式正确为 JSON 时,这种方法很有效,但是当json-parser
无法在我的日志消息中找到有效的 JSON 对象时,我想将非 JSON 日志消息包装在 JSON 对象中(通过模板format-json
)并将其发送到 ElasticSearch 中的不同索引。
我理解这json-parser
可以充当过滤器,只传递有效的 JSON 消息。有没有办法创建一个只传递无效的JSON 消息?
答案1
我不确定这是否是让它工作的最佳方式,但我最终使用了if/else 流控制在我的日志路径中,类似于以下内容。
source s_json_source {
...
};
destination d_valid_json {
... // includes template definition
};
destination d_invalid_json {
... // includes template definition that wraps the ${MSG} in a timestamped json object
};
parser p_json {
json-parser();
};
log {
source(s_json_source)
if {
parser(p_json);
destination(d_valid_json);
} else {
destination(d_invalid_json);
};
};