1

我正在尝试为 Java 应用程序设置 ELK。tomcat 日志是使用 log4j 生成的。要编写测试模式,我正在使用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}
4

2 回答 2

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}\]

然后继续努力,在你的模式中加入更多的东西。请注意,文字(“:”和转义的“[”)成为您的模式的一部分。

祝你好运!

于 2015-07-09T22:36:11.623 回答
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)

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

希望它能节省您的时间

于 2021-06-02T16:56:19.810 回答