Grok模式,用于由管道分隔的数据,其中包含空格和可选值

时间:2018-06-19 18:11:02

标签: elasticsearch logstash kibana elastic-stack logstash-grok

我有一个文本文件/日志文件,其中的值由管道符号分隔。 “ |”带有多个空格。

我也只想在没有gsub的情况下尝试。

下面是一个例子,

有人知道如何编写GROK模式以提取logstash吗?因为我对此很陌生。预先感谢

5000|       |       |applicationLog     |ClientLog      |SystemLog      |Green      |       |2014-01-07 11:58:48.76948      |12345 (0x1224)|1) Error 2)Sample Log | Configuration Manager

1 个答案:

答案 0 :(得分:0)

由于不同单词之间|的数量不一致,因此您可以将其与.*?匹配,并将其余数据提取为predefined grok pattern

%{NUMBER:num}.*?%{WORD:2nd}.*?%{WORD:3rd}.*?%{WORD:4th}.*?%{WORD:5th}.*?%{TIMESTAMP_ISO8601}

这会给你

{
  "num": [
    [
      "5000"
    ]
  ],
  "BASE10NUM": [
    [
      "5000"
    ]
  ],
  "2nd": [
    [
      "applicationLog"
    ]
  ],
  "3rd": [
    [
      "ClientLog"
    ]
  ],
  "4th": [
    [
      "SystemLog"
    ]
  ],
  "5th": [
    [
      "Green"
    ]
  ],
  "TIMESTAMP_ISO8601": [
    [
      "2014-01-07 11:58:48.76948"
    ]
  ],
  "YEAR": [
    [
      "2014"
    ]
  ],
  "MONTHNUM": [
    [
      "01"
    ]
  ],
  "MONTHDAY": [
    [
      "07"
    ]
  ],
  "HOUR": [
    [
      "11",
      null
    ]
  ],
  "MINUTE": [
    [
      "58",
      null
    ]
  ],
  "SECOND": [
    [
      "48.76948"
    ]
  ],
  "ISO8601_TIMEZONE": [
    [
      null
    ]
  ]
}

您可以在online grok debugger上对其进行测试。

由于您是grok的新手,您可能想阅读grok filter plugin basics

如果可以的话,建议您在dissect filter中进行浏览,它比grok更快,更有效,

  

Dissect过滤器是一种拆分操作。不像普通的   拆分操作,其中一个定界符应用于整个字符串,   此操作将一组定界符应用于字符串值。解剖   不使用正则表达式,并且非常快。但是,如果   文本的结构因行而异,因此Grok更   适当。在混合情况下,可以使用Dissect   解构可靠重复的线段,   然后可以用更多的正则表达式在剩余的字段值上使用Grok   可预测性和较少的整体工作要做。