tomcat日志的Grok模式在Grok调试器上给出编译错误

tomcat日志的Grok模式在Grok调试器上给出编译错误,tomcat,logstash,logstash-grok,logstash-configuration,elastic-stack,Tomcat,Logstash,Logstash Grok,Logstash Configuration,Elastic Stack,我正在尝试为Java应用程序设置ELK。tomcat日志是使用log4j生成的。要编写测试模式,我使用。但在调试器上它总是显示 编译错误 我的日志示例: 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 => { "messag

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

编译错误

我的日志示例:

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}

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

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

%{TOMCAT_DATESTAMP:timestamp} \| %{LOGLEVEL:level} \| %{UNIQUEID:uniqueid}\|
您的模式具有转义管道(“|”),但输入不使用它们

我也看不到TOMCAT_的邮戳是默认模式,但也许它埋在了某个地方

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

%{TIMESTAMP_ISO8601} %{WORD:level} : \[%{GREEDYDATA:uniqueid}\]
然后继续努力,在你的模式中加入更多的东西。请注意,文本(“:”和转义的“[”)成为模式的一部分


祝你好运!

我也遇到了Tomcat的问题。也不要忘记,
%LOGLEVEL
模式并没有包含Tomcat的所有级别(配置、精细、精细、精细)。它可能是

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):


希望这能节省您的时间

为什么在您的输入没有管道的情况下,您的模式中却没有管道?我对这一点相当陌生。因此,我在一些博客上读到了一些内容,但我记不起链接。我想我不太了解写作模式。这是一个大话题,但您可以从这里开始:我担心,我会因为这样做而受到严厉的批评一个基本的问题。但是这些答案/评论确实令人鼓舞。谢谢@AlainCollins。在你对这些问题发表评论的时间里,我在网上挖掘了很多东西,还有尝试和错误,就像你说的:一次一块,我可以做到。跟上!!所以我在Grok调试器上使用了这个模式:模式:%{TOMCAT_日期戳:timestamp}%{LOGLEVEL:level}:%{GREEDYDATA:coorrelationid}%{JAVACLASS:class}-%{GREEDYDATA:logmessage}自定义模式:TOMCAT_日期戳%{YEAR:YEAR}-%{MONTHNUM:month}-%{MONTHDAY:day}%{HOUR:HOUR}:?%{MINUTE MINUTE}:(:?{SECOND:SECOND})我看到您使用了%{WORD level对于日志级别。仅供参考,有一个默认的logstash grok模式。您可以使用“:”和“[”分隔符来检查它。TMTOWTDI!我不需要增加复杂性。