【问题标题】:logstash config loop through fieldslogstash 配置循环遍历字段
【发布时间】:2020-12-27 19:11:35
【问题描述】:

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

我有一堆字段

[消息][详细][读数][值1]

[消息][详细][读数][值2]

[消息][详细][读数][Value3]

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

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

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

但我无法使用谷歌找到正确的语法.. 任何帮助表示赞赏。

我知道字段的名称,所以在最坏的情况下我必须对它们进行硬编码,但如果可能的话我想避免这种情况。

编辑:我还没有测试我的配置,所以我不知道“读出”是否会是一个哈希映射;我使用 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;
}

【问题讨论】:

  • 所以 [Message][Detail][Readout] 是一个哈希值,您想遍历成员吗?
  • 不,它们是单独的字段,但都带有 [Readout] 前缀
  • 您是说字段名称包含方括号,还是 [Message] 是包含 [Detail] 哈希的对象?
  • 不,我认为这就是您在 logstash 配置中访问它们的方式。当我在 kibana 中查看它们时,认为它们带有点。 Message.Detail.Readout.Value1
  • 老实说我不确定我会在原始消息中查找它

标签: ruby logstash logstash-configuration elk


【解决方案1】:

您将使用 .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
    '
}

【讨论】:

  • 你的建议很有效;谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
相关资源
最近更新 更多