Regex 格罗克在支架上失败了
我在括号上得到了一个一致的grok失败。我用一个“\”跳过了括号。我还试图用通配符来愚弄它。Grok调试器正确解析,但无法在生产中解析。我还有另外两个条目显示了相同的行为,而其他没有括号的模式正在解析 “{WORD:type}[%{INT:pid}]”是问题所在Regex 格罗克在支架上失败了,regex,logstash,logstash-grok,grok,Regex,Logstash,Logstash Grok,Grok,我在括号上得到了一个一致的grok失败。我用一个“\”跳过了括号。我还试图用通配符来愚弄它。Grok调试器正确解析,但无法在生产中解析。我还有另外两个条目显示了相同的行为,而其他没有括号的模式正在解析 “{WORD:type}[%{INT:pid}]”是问题所在 #Jan 15 13:35:44 firewall sshd[1468]: Accepted publickey for john from 192.168.1.16 port 62529 ssh2: ..... AUTHLOG1 (%
#Jan 15 13:35:44 firewall sshd[1468]: Accepted publickey for john from 192.168.1.16 port 62529 ssh2: .....
AUTHLOG1 (%{SYSLOGTIMESTAMP:timestamp} %{WORD:src_host} %{WORD:type}\[%{INT:pid}\]: Accepted publickey for %{USERNAME:user} from %{IP:src_ip} port %{INT:port} %{WORD:protocol}*)
#Jan 15 13:35:44 firewall systemd-logind[1221]: New session 481 of user john.
AUTHLOG4 (%{SYSLOGTIMESTAMP:timestamp} %{WORD:src_host} (?<type>[a-z-]+)\[%{INT:pid}\]: Removed session %{INT:session}.)
AUTHLOG (?:%{AUTHLOG1}|%{AUTHLOG2}|%{AUTHLOG3}|%{AUTHLOG4}|%{AUTHLOG5}|%{AUTHLOG6})
if [type] == "authlog" {
grok {
match => { "message" => "%{AUTHLOG}"}
patterns_dir => ["/etc/logstash/grok"]
}
}
#Jan 15 13:35:44防火墙sshd[1468]:接受来自192.168.1.16端口62529 ssh2的john公钥:。。。。。
AUTHLOG1(%{SYSLOGTIMESTAMP:timestamp}%{WORD:src_host}%{WORD:type}\[%{INT:pid}\]:从%{IP:src_IP}端口%{INT:port}%{WORD:protocol}*接受%{USERNAME:user}的公钥)
#Jan 15 13:35:44防火墙系统登录[1221]:用户john的新会话481。
AUTHLOG4(%%{SYSLOGTIMESTAMP:timestamp}%{WORD:src\u host}(?[a-z-]+)\[%{INT:pid}\]:删除了会话%{INT:session}。)
AUTHLOG(?:%%{AUTHLOG1}|%{AUTHLOG2}|%{AUTHLOG3}|%{AUTHLOG4}|%{AUTHLOG5}|%{AUTHLOG6})
如果[type]=“authlog”{
格罗克{
匹配=>{“消息”=>“%{AUTHLOG}”
模式\u dir=>[“/etc/logstash/grok”]
}
}
你用这个配置咬了很多东西
首先,尝试先取出系统日志。这对每一行都是通用的,因此很容易匹配和删除这一行,只留下更独特的内容供其他模式解析。换句话说,不要执行“日期A |日期B |日期C”,而是拉取日期,然后查找A、B、C。针对短正则表达式运行的较短字符串应该更好
接下来,想象一下您试图使用的底层regexp是什么样子。我远离“|”,除了非常小的模式(“开|关”类型的东西)。我还没有测量性能,但我更喜欢看到它写下来:
match => { message => [
"Pattern 1 %{WORD} ...",
"Pattern 2 %{WORD} ..."
]
}
要开始回答真正的问题,正则表达式中的括号用于显示字符类,例如“[a-z]”。要告诉格罗克你指的是文字括号,你只需要避开开放括号,例如“\foo]”(因为封闭括号由于没有与开放括号配对而失去了魔力)。为了可读性,可以同时转义这两者,例如“\[foo\]”
您的示例包含应用于每个输入行的6个模式。grokparsefailure只告诉你它们都不匹配。要找出原因,请查看您希望匹配的单一模式。如果错误不明显,则将模式和输入行带到grok调试器。切掉图案的后半部分,看看是否匹配。重复上述步骤,直到找到断裂的零件
在您的例子中,仅将模式粘贴到调试器中就让我想知道,为什么在输入中没有显示模式时,在模式周围有括号。把它们拿出来(最后还有星号),我想它们是匹配的。好的,我想出来了。这与我是如何逃出监狱无关。我使用了保留字“type”作为变量。请读取并创建一个。我在Kibana中得到了一个“tags:\u grokparsefailure”。Logstash没有正确解析它。谢谢你的建议。这里有很多东西可以尝试