[英]_grokparsefailure on matching grok debugger pattern
我在使logstash识别我的模式方面遇到一些问题,该模式似乎与Grok调试器( https://grokdebug.herokuapp.com/ )相匹配。
这与在另一个StackOverflow问题( logstash _grokparsefailure问题 )上发现的问题类似,但不幸的是,那里的解决方案似乎不起作用。
这些是我要匹配的日志:
Mon Jan 25 11:12:12.890 [conn44141] authenticate db: admin { authenticate: 1, user: "person", nonce: "f00000000f", key: "a0000000000e" }
"2015-01-25 14:46:31" id=Admin id=Admin,ou=user,dc=gooogle-wa,dc=com a000000a 100.00.00.01 INFO dc=gooooogle-wa,dc=com "cn=user,ou=AME Users,dc=goooogle,dc=com" BARF-4 aO.access "Not Available" 100.00.00.01
我用来解析这些的模式分别是:
if [type] == "openam" {
if [file] =~ "access" {
grok{
match => [ 'message', '\"%{TIMESTAMP_ISO8601:timestamp}\"(\s*)(%{QUOTEDSTRING:data_}|%{DATA:data_})(\s*)(%{QUOTEDSTRING:LoginID}|%{DATA:LoginID})(\s*)%{DATA:ContextID}(\s*)(\"%{DATA:IP}\"|%{IP:IP})(\s*)?%{LOGLEVEL:loglevel}(\s*)%{DATA:Domain}(\s*)\"%{DATA:LoggedBy}\"(\s*)(?<messageID>[a-zA-Z0-9._-]+)(\s*)(%{DATA:ModuleName})(\s*)\"%{DATA:NameID}\"(\s*)(%{IP:hostname}|%{GREEDYDATA:hostname}) '
]
add_tag => "openam_access"
}
}
else if [file] =~ "error" {
grok{
match => ['message', '\"%{TIMESTAMP_ISO8601:timestamp}\"(\s*)(%{QUOTEDSTRING:data_}|%{DATA:data_}) (\s*)(%{QUOTEDSTRING:LoginID}|%{DATA:LoginID}) (\s*)%{DATA:ContextID}(\s*)(\"%{DATA:IP}\"|%{IP:IP})(\s*)?%{LOGLEVEL:loglevel}(\s*)%{DATA:Domain}(\s*)\"%{DATA:LoggedBy}\"(\s*)(?<messageID>[a-zA-Z0-9._-]+)(\s*)(%{DATA:ModuleName})(\s*)\"%{DATA:NameID}\"(\s*)(%{IP:hostname}|%{GREEDYDATA:hostname})',
]
add_tag => "openam_error"
}
}
}
if [type] == "mongo" {
grok {
match => [
"message", "(?m)%{GREEDYDATA} \[conn%{NUMBER:mongoConnection}\] %{WORD:mongoCommand} %{WORD:mongoDatabase}.%{NOTSPACE:mongoCollection} %{WORD}: \{ %{GREEDYDATA:mongoStatement} \} %{GREEDYDATA} %{NUMBER:mongoElapsedTime:int}ms",
"message", "%{DATA:DayOfWeek} %{SYSLOGTIMESTAMP:timestamp} %{DATA:Thread} %{GREEDYDATA:msg} %{IP:ip}:%{NUMBER:port} ?#?%{NUMBER:ID}? %{GREEDYDATA:connections} ",
'message', '%{DATA:DayOfWeek} %{SYSLOGTIMESTAMP:timestamp} %{DATA:Thread} %{DATA:msg}: %{WORD:userType} \{ authenticate: %{NUMBER:authenticate}, user: %{QS:user}, nonce: %{QS:nonce}, key: %{QS:key} \}'
]
add_tag => "mongodb"
}
}
正如您可以检查的那样,这些模式在调试器上可以正常工作,但是由于某些原因,在我的kibana仪表板上,它们会显示_grokparsefailure标记。 我怀疑这可能与我转义字符或使用{QS}/{QOUTEDSTRING}
。
谢谢
您的模式看起来不错,但是
filter {
grok {
...
}
grok {
...
}
}
您将两种模式都应用于所有输入字符串,并且匹配第一个模式的输入字符串将永远不会匹配第二个模式,反之亦然。 因此,您始终会获得_grokparsefailure标记。
改为这样做:
filter {
grok {
match => ['message', 'pattern1',
'message', 'pattern2']
}
}
如果您确实必须使用其他grok过滤器,请使用消息的潜伏条件来限制它们的包含:
filter {
if [message] =~ /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) / {
grok {
match => ['message', 'pattern1']
}
}
...
}
这显然会比较慢,这意味着您将需要维护更多的正则表达式。
我知道了。 似乎还有另一个错误阻止我的logstash conf更新。 强烈建议类似地点的任何人使用./logstash --configtest。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.