从 Logstash log4j 输入到节拍

From Logstash log4j input to beats

拜托,我正在使用 logstash 的 log4j 输入,它允许我 跳过日志解析 (grok ...)。

`input {
   log4j {
      mode => "server"
      host => "0.0.0.0"
      port => 8090
     }
   }`

Elastic 现在在版本 5.4.1 中将此输入标记为 已弃用 ,现在的替代方案是 filebeats,直接监听日志文件。

问题是您需要通过 grok 过滤器再次解析您的日志文件...是否有任何可能的方法来使用 log4j 的节拍而无需再次解析日志行,确切地说像旧的 log4j socketAppender ?

谢谢

log4j socket appender 不使用布局。它以结构化格式发送数据,因此不需要 grok。

要获得类似的结果,您可以配置 log4j 以结构化格式将数据写入日志文件。这通常用 JSON layout 完成。因此,配置您应用的 log4j 设置以将 JSON 事件写入文件。

然后,一旦您拥有结构化格式的日志,您就可以配置 Filebeat 来读取日志、解码 JSON 数据,并将事件转发到 Logstash 或 Elasticsearch。

filebeat.prospectors:
- type: log
  paths:
    - /var/log/myapp/output*.json
  json.keys_under_root: true
  json.add_error_key: true
  json.message_key: message

你可以使用logstash-logback-encoder,它提供了一个LogstashSocketAppender,它实现了SocketAppender,并使用RSysLog将json格式的日志发送到elasticsearch。