将matcher集成到logstash grok配置时出错

将matcher集成到logstash grok配置时出错,logstash,logstash-grok,logstash-configuration,Logstash,Logstash Grok,Logstash Configuration,我使用的是logstash 7.6.2。我的日志行是json字符串。每个json都有3个字段,“msg”是文本,“topic”是文本,“ts”是浮点 下面是我的匹配表达式: {"msg"\s*:\s*(?<msg>".*")\s*,\s*"topic"\s*:\s*(?<topic>".*")\s*,\s*"ts"\s*:\s*(?<ts>[+-]?([0-9]*[.])?[0-9]+)\s*} 我用了几个grok测试仪来证明这是有效的。及 问题是,当我集成

我使用的是logstash 7.6.2。我的日志行是json字符串。每个json都有3个字段,“msg”是文本,“topic”是文本,“ts”是浮点

下面是我的匹配表达式:

{"msg"\s*:\s*(?<msg>".*")\s*,\s*"topic"\s*:\s*(?<topic>".*")\s*,\s*"ts"\s*:\s*(?<ts>[+-]?([0-9]*[.])?[0-9]+)\s*}
我用了几个grok测试仪来证明这是有效的。及

问题是,当我集成到logstash配置中时,它会给我一个语法错误。我不确定我做错了什么

这是我的logstash配置中的grok matcher:

grok {
   match => {"msg"\s*:\s*(?<msg>".*")\s*,\s*"topic"\s*:\s*(?<topic>".*")\s*,\s*"ts"\s*:\s*(?<ts>[+-]?([0-9]*[.])?[0-9]+)\s*}
}

我相信我的匹配表达式是正确的,但我不知道如何将其添加到grok配置中。任何帮助都将不胜感激。

您需要告诉grok筛选器模式匹配应应用于哪个字段

从文档()中可以看到,匹配设置遵循以下语法

grok{
  match => { "FIELDNAME" => "PATTERN" }
}
默认字段Logstash将日志行文本放入名为
message
的字段中。因此,您可以这样调整代码:

grok{
  match => { "message" => "PATTERN" }
}
此外,请注意,模式必须被引用,特殊字符必须转义(在下面的示例中,我没有做后者)。由于在模式本身中使用双引号,因此需要使用单引号,如下所示:

grok{
  match => { 'message' => '{"msg"\s*:\s*(?<msg>".*")\s*,\s*"topic"\s*:\s*(?<topic>".*")\s*,\s*"ts"\s*:\s*(?<ts>[+-]?([0-9]*[.])?[0-9]+)\s*}' }
}
grok{
match=>{'message'=>'{“msg”\s*:\s*(?“*”)\s*,\s*“topic”\s*:\s*(?“*”):\s*,\s*“ts”\s*:\s*(?[+-]([0-9]*[.])?[0-9]+)\s*}
}
我希望我能帮助你

grok{
  match => { "message" => "PATTERN" }
}
grok{
  match => { 'message' => '{"msg"\s*:\s*(?<msg>".*")\s*,\s*"topic"\s*:\s*(?<topic>".*")\s*,\s*"ts"\s*:\s*(?<ts>[+-]?([0-9]*[.])?[0-9]+)\s*}' }
}