如何在日志行中理解管道分隔的字符串

How to grok a pipe-delimited string in a log line

我需要在 grok 行中 grok 一个竖线分隔的值字符串;例如:

|NAME=keith|DAY=wednesday|TIME=09:27:423227|DATE=08/06/2019|amount=68.23|currency=USD|etc...

最简单的方法是什么?

是否有任何形式的 grok 拆分?

谢谢, 基思

您的场景是 logstashs 的完美用例kv (key-value) filter

此过滤器插件背后的基本思想是像您一样以重复模式提取键值对。

在这种情况下,field_split 字符将是竖线 (|)。

要区分键和值,您可以将 value_split 字符设置为等号 ( = )。

这是一个未经测试的过滤器配置示例:

filter{
  kv{
    source => "your_field_name"
    target => "kv"
    field_split => "\|"
    value_split => "="
  }
}

注意 field_split 设置中的竖线字符是如何转义的。由于管道是正则表达式识别的字符,所以你必须转义它!

此过滤器将从您的源字段中提取所有找到的键值对,并将其设置到名为 "kv"(名称是任意的)的目标中,您可以从中访问这些字段。

您可能想查看 kv 过滤器的其他可能设置以满足您的需要。

希望能帮到你! :-)