tomcat日志的Grok模式在Grok Debugger上出现编译错误

时间:2015-07-09 19:13:36

标签: tomcat logstash logstash-grok logstash-configuration elastic-stack

我正在尝试为Java应用程序设置ELK。使用log4j生成tomcat日志。要编写测试模式,我使用的是Grok Debugger。但是在调试器上它始终显示

  

编译错误

我的日志示例:

YYYY-MM-DD HH:MM:SS,SSS INFO : [so-me-uni-que-id] com.xx.xx.xx.xx.xx - log message here

我的grok过滤器:

filter {   if [type] == "tomcat" {     grok {       match => { "message" => "%{TOMCATLOG}" }     }     date {       match => [ "timestamp", "yyyy-MM-dd HH:mm:ss,SSS" ]     } } }

我的模式:

TOMCATLOG %{TOMCAT_DATESTAMP:timestamp} \| %{LOGLEVEL:level} \| %{UNIQUEID:uniqueid}\| %{JAVACLASS:class} - %{JAVALOGMESSAGE:logmessage}

2 个答案:

答案 0 :(得分:1)

基本问题是您的模式与您的输入不匹配。看看开头:

YYYY-MM-DD HH:MM:SS,SSS INFO : [so-me-uni-que-id]

%{TOMCAT_DATESTAMP:timestamp} \| %{LOGLEVEL:level} \| %{UNIQUEID:uniqueid}\|

您的模式已转义管道(" |"),但输入未使用它们。

我也没有看到TOMCAT_DATESTAMP处于默认模式,但也许它被埋在某处。

从左侧开始,在调试器中一次匹配一个。

%{TIMESTAMP_ISO8601} %{WORD:level} : \[%{GREEDYDATA:uniqueid}\]

然后继续努力,在你的模式中抓住更多东西。请注意,文字(":"以及转义的" [")会成为您模式的一部分。

祝你好运!

答案 1 :(得分:0)

我也遇到了 Tomcat 的问题。也不要忘记 %LOGLEVEL 模式不包含 Tomcat 的所有级别(CONFIG、FINE、FINER、FINEST)。可能是

TOMCAT_LOGLEVEL ([A-a]lert|ALERT|[T|t]race|TRACE|[D|d]ebug|DEBUG|[N|n]otice|NOTICE|[I|i]nfo|INFO|[W|w]arn?(?:ing)?|WARN?(?:ING)?|[E|e]rr?(?:or)?|ERR?(?:OR)?|[C|c]rit?(?:ical)?|CRIT?(?:ICAL)?|[F|f]atal|FATAL|[S|s]evere|SEVERE|EMERG(?:ENCY)?|[Ee]merg(?:ency)?|CONFIG|FINE|FINER|FINEST)

我在一个地方添加了所有的 grok 模式(Nginx、Tomcat、Spring):https://gist.github.com/petrov9/4740c61459a5dcedcef2f27c7c2900fd

希望它能节省您的时间