如何设置 syslog-ng 以仅将无效的 JSON 日志发送到目的地

如何设置 syslog-ng 以仅将无效的 JSON 日志发送到目的地

我已经设置 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);
  };
};

相关内容