logstash 配置循环遍历字段

logstash config loop through fields

ruby/logstash 菜鸟在这里使用 ELK 堆栈。

我得到了一堆字段

[Message][Detail][Readout][Value1]

[Message][Detail][Readout][Value2]

[Message][Detail][Readout][Value3]

我想在 logstash 配置中使用 ruby 循环。

然后我想对每个执行一个简单的操作,例如将它们从十六进制更改为十进制,例如

event.set('[currField]', event.get('[currField]').to_s.hex);

但我无法使用 google 找到正确的语法。感谢任何帮助。

我知道字段的名称,所以最坏的情况我将不得不对它们进行硬编码,但我希望尽可能避免这种情况。

编辑:我还没有测试我的配置,所以我不知道“Readout”是否是一个哈希映射;我正在使用 grok 过滤器在配置

中添加值
"(?<[Message][Detail][Readout][Value1]>(?<=0x.{8})([A-F0-9]{2}))",
"(?<[Message][Detail][Readout][Value2]>(?<=0x.{8})([A-F0-9]{2}))" 

等等

伪:

event.get('[Message][Detail][Readout]') each { |k, v|
  event[k] = newValue;
}

您可以使用 .each 遍历 [Message][Detail][Readout] 散列。您的伪代码会将值设置在顶层。要覆盖它们,请使用

ruby {
    code => '
        readout = event.get("[Message][Detail][Readout]")
        if readout
            readout.each { |k, v|
                event.set("[Message][Detail][Readout][#{k}]", v.to_s.hex)
            }
        end
    '
}