Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 格罗克在支架上失败了_Regex_Logstash_Logstash Grok_Grok - Fatal编程技术网

Regex 格罗克在支架上失败了

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 (%

我在括号上得到了一个一致的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 (%{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没有正确解析它。谢谢你的建议。这里有很多东西可以尝试