这个 log4j 日志的 logstash grok 过滤器应该是什么?
What should be the logstash grok filter for this log4j log?
我被要求将我们的 log4j 日志文件(现在不使用套接字调用)整合到一个 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)
我能够使以下过滤器工作。
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"]
}
}
不过,这是上面日志特有的。
我有一个后续问题。我如何 "pad" 模式来管理每个模式中的 "spaces"。例如,ERROR 日志级别占用 5 个空格,而 INFO 日志级别占用 4 个空格,那么如何管理它才能同时适用于 ERROR 和 INFO 日志?
我被要求将我们的 log4j 日志文件(现在不使用套接字调用)整合到一个 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)
我能够使以下过滤器工作。
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"]
}
}
不过,这是上面日志特有的。
我有一个后续问题。我如何 "pad" 模式来管理每个模式中的 "spaces"。例如,ERROR 日志级别占用 5 个空格,而 INFO 日志级别占用 4 个空格,那么如何管理它才能同时适用于 ERROR 和 INFO 日志?