What should be the logstash grok filter for this log4j log?
我被要求将我们的log4j日志文件(暂时不使用Socket调用)整合到一个Logstash JSON文件中,然后将其输入到Elasticsearch中。 我们的代码使用RollingFileAppender。 这是一个示例日志条目。
1 | 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值
1 | <param name="ConversionPattern" value="%d{ISO8601} %p %x %X{username}:%t [%c] %m %n" /> |
有人可以帮我写一个Logstash Grok过滤器来解析该行吗? 到目前为止,我有以下内容
1 2 3 4 5 6 7 8 9 10 | 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 {username})
- 类路径([%c])
- 线程(%t)
- 嵌套诊断内容(%x)
- 邮件本身(%m)
我能够使以下过滤器起作用。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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日志都起作用?