regex - 多个自定义grok模式不匹配,但它们成功匹配一个吗?

标签 regex elasticsearch logstash kibana logstash-grok

Grok匹配单个定制模式,但是在组合定制模式时匹配。

完整,有效,可验证的示例

样本数据:

OK 05/20 20:12:10:067 ABC_02~~DE_02 FGH_IJK jsmith _A0011

自定义模式:
MMDD [0-1][0-9]/[0-3][0-9]
THREAD _A\w+

他们分开工作;具体来说,这种模式本身可以工作:
%{MMDD:mmdd} 

// Result
{
  "mmdd": [
    [
      "05/20"
    ]
  ]
}

...并且这种模式本身起作用:
%{THREAD:thread}

// Result
{
  "thread": [
    [
      "_A0011"
    ]
  ]
}    

..但在一起,他们失败了:
%{MMDD:mmdd} %{THREAD:keyword}

No Matches

令人费解。泰姆·基思(Tyvm Keith):^)

在这里测试:
https://grokdebug.herokuapp.com/

正则表达式资源:
https://regex101.com/

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

根据下面的Jeff Y的评论进行编辑

注意将keyword更改为thread
// Grok Pattern
%{MMDD:mmdd}%{DATA}%{THREAD:thread}

// Result
{
  "mmdd": [
    [
      "05/20"
    ]
  ],
  "DATA": [
    [
      " 20:12:10:067 ABC_02~~DE_02 FGH_IJK jsmith "
    ]
  ],
  "thread": [
    [
      "_A0011"
    ]
  ]
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

EDIT 2基于Jeff Y在下面的第二条评论
// Data - HACKED - Note move of _A0011 to after mm/dd
OK 05/20 _A0011 20:12:10:067 ABC_02~~DE_02 FGH_IJK jsmith 

// Grok Pattern
%{MMDD:mmdd} %{THREAD:thread}

// Result
{
  "mmdd": [
    [
      "05/20"
    ]
  ],
  "thread": [
    [
      "_A0011"
    ]
  ]
}

最佳答案

Grok将针对整个消息测试您的模式。

如果您的消息是OK 05/20 _A0011 20:12:10:067 ABC_02~~DE_02 FGH_IJK jsmith,而您只想要05/20_A0011部分,则您的grok应该具有与其余字符串匹配的模式,但不要将其保存在字段中。

例如,%{WORD}%{SPACE}%{MMDD:mmdd}%{SPACE}%{THREAD:thread}%{SPACE}%{GREEDYDATA}模式将匹配您的字符串,它将保存mmddthread杂项,但忽略其他所有内容。

关于regex - 多个自定义grok模式不匹配,但它们成功匹配一个吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57295068/

相关文章:

c# - 需要知道如何使用 c# 在数组中搜索来在 ES 中进行搜索

elasticsearch - 解析多行stacktrace logstash

Docker Compose - Logstash - 启动后以代码 0 退出

javascript - 正则表达式 javascript 或 jquery

python - 截断/修剪列表每一行的日期和时间

javascript - 带有正则表达式的 JavaScript 中的第三个嵌套引用级别

jdbc - Logstash 'com.mysql.jdbc.Driver' 未加载

java - 按换行符分割 Java 字符串

java - Elasticsearch 最后使用 java 建立索引的日期

elasticsearch - elasticsearch映射分析器-GET未获得结果