用于提取复杂线结构的Grok模式?

时间:2016-12-22 13:01:38

标签: regex logstash-grok grok

我有像

这样的单行

sgcib.solstis.core.dao.referential.InsertionMonitoringDao:10:37:36.860 [SOLSTAIRJVM1: customService :false-persistor-3-] INFO Begin updating insertion_monitoring table: analysisProcessId=1000000648897, insertionMonitorId=9153700, binFileName=TIS_MRM_Meteor_DeltaSpot_RA_SMCPLX_47769.2x2.2016-11-29-00-00-00_1480377600000.bin.tisdevweb043.SOLSTAIRJVM1

此处,将值[SOLSTAIRJVM1:customService:false-persistor-3-]提取为线程字段,将 1000000648897提取为一个analysisProcessId字段,将 9153700提取为另一个insertionMonitorId字段。输入行中的字段值是可选的,输入行字段中找不到的值必须显示为空值。

任何人都可以建议如何写模式吗?

1 个答案:

答案 0 :(得分:1)

您可以使用

\[(?<thread>[^\]\[]*)].*?analysisProcessId=(?<analysisProcessId>\d+).*?insertionMonitorId=(?<insertionMonitorId>\d+)

<强>描述

  • \[ - 文字[
  • (?<thread>[^\]\[]*) -
  • ].*? - 文字]后跟除了换行符之外的任何0 +字符,尽可能少到第一个字符
  • analysisProcessId= - analysisProcessId=子字符串
  • (?<analysisProcessId>\d+) - 群组“analysisProcessId”捕获1+位数
  • .*?insertionMonitorId= - 除了换行符之外的任何0 +字符尽可能少,直到和包含。第一个insertionMonitorId=
  • `(?\ d +) - 组“insertionMonitorId”捕获1+位数

请参阅演示屏幕:

enter image description here