多值字段只存储最后一个值

Multi-value fields only store last value

我对 ELK 和 grok 比较陌生。我正在尝试解析一个日志文件,该文件可能包含相同值的 1 次或多次重复。例如,日志文件可能包含:

值 1;值 2;值 3;

值 1;

值 1;值 2;值 3;值 4;.......值 900;

对于这个例子,我使用了以下 grok 模式:

((?[a-z0-9]*)[;])+

这似乎工作正常,并解析了每个值。问题是 "tag" 字段只包含最后一个值(即 value900)。所有以前的值似乎都被覆盖了。

有没有办法收集所有的值并将它们存储到一个数组中,而不是只获取最后一个值?

只需使用 mutate:

mutate {
  split => ["tag",";"]
}

这会将标记字段中的值拆分为一个数组。因此,只需匹配您的 grok 中的整个字符串((?<tag>[a-z0-9;]+),然后从那里拆分它。