我正在尝试为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}
答案 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
希望它能节省您的时间