【问题标题】:From Logstash log4j input to beats从 Logstash log4j 输入到节拍
【发布时间】:2017-06-13 11:03:33
【问题描述】:

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

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

Elastic 现在,在 5.4.1 版本中,将此输入标记为 deprecated,现在的替代方案是 filebeats,它会监听直接记录文件。

问题是你需要通过 grok 过滤器再次解析你的日志文件...有没有什么可能的方法可以在 log4j 中使用 beats 而无需再次解析日志行,就像旧的 log4j socketAppender ?

谢谢

【问题讨论】:

    标签: parsing elasticsearch log4j logstash filebeat


    【解决方案1】:

    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 出现故障,则不会丢失任何日志。当 Logstash 关闭时,SocketAppender 会丢弃日志。
    • 你说得对,我认为使用json日志文件的想法很聪明,谢谢,我会接受你的回答
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 2017-08-06
      • 2016-12-30
      相关资源
      最近更新 更多