【问题标题】:What should be the logstash grok filter for this log4j log?此 log4j 日志的 logstash grok 过滤器应该是什么?
【发布时间】:2016-06-20 20:48:58
【问题描述】:

我被要求将我们的 log4j 日志文件(目前不使用 Socket 调用)整合到一个 Logstash JSON 文件中,然后我将其提供给 Elasticsearch。我们的代码使用 RollingFileAppender。这是一个示例日志条目。

2016-04-22 16:43:25,172 ERROR :SomeUser : 2 [com.mycompany.SomeClass]  AttributeSchema 'Customer |Customer |Individual|Individual|Quarter|Date' : 17.203 The Log Message.

这是 log4j.properties 文件中的 ConversionPattern 值

<param name="ConversionPattern" value="%d{ISO8601} %p %x %X{username}:%t [%c] %m %n" />

有人可以帮我写一个 Logstash Grok 过滤器来解析该行吗?到目前为止,我有以下内容

filter {
  if [type] == "log4j" {
    grok {
        match => ["message", "%{TIMESTAMP_ISO8601:logdate} %{LOGLEVEL:loglevel} %{GREEDYDATA:messsage}"]
    }
    date {
        match => ["logdate", "yyyy-MM-dd HH:mm:ss,SSS", "ISO8601"]
    }
  }
}

当然,它会将优先级之后的所有内容作为消息。我想进一步隔离至少以下字段(在Log4j Pattern Layout 中定义)

  • 用户(%X{用户名})
  • 类路径 ([%c])
  • 线程 (%t)
  • 嵌套诊断内容 (%x)
  • 消息本身 (%m)

【问题讨论】:

    标签: log4j logstash logstash-grok


    【解决方案1】:

    我能够使以下过滤器工作。

    filter {
        mutate {
          strip => "message"
        }
        grok {
          match => {
            "message" => "%{TIMESTAMP_ISO8601:logdate} %{LOGLEVEL:loglevel} :%{DATA:thread} : %{NUMBER:thread_pool} \[(?<classname>[^\]]+)\] %{SPACE} %{GREEDYDATA:msgbody}"
          }
        }
        date {
          match => ["logdate", "yyyy-MM-dd HH:mm:ss,SSS", "ISO8601"]
        }
    }
    

    但是,这是特定于上述日志的。

    我有一个后续问题。我如何“填充”模式以管理每个模式中的“空格”。例如,一个 ERROR 日志级别占用 5 个空格,而一个 INFO 日志级别占用 4 个空格,那么如何管理它以便对 ERROR 和 INFO 日志都有效?

    【讨论】:

    • 要回答我的后续问题,请输入 %{SPACE} 或 \+s。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    相关资源
    最近更新 更多