繁体   English   中英

这个log4j日志的logstash grok过滤器应该是什么?

[英]What should be the logstash grok filter for this log4j log?

我被要求将我们的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模式布局中定义)

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

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

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日志?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM