Ruby logstash配置通过字段循环

Ruby logstash配置通过字段循环,ruby,logstash,logstash-configuration,elk,Ruby,Logstash,Logstash Configuration,Elk,ruby/logstashnoob在这里使用ELK堆栈 我有很多田地 [信息][详情][读数][数值1] [信息][详情][读数][数值2] [信息][详情][读数][数值3] 我想在logstash配置中使用ruby循环使用它 然后我想对每一个都执行一个简单的操作,例如将它们从十六进制改为十进制 event.set('[currField]', event.get('[currField]').to_s.hex); 但是我用谷歌找不到正确的语法。。谢谢你的帮助 我知道字段的名称,所以在最坏的

ruby/logstashnoob在这里使用ELK堆栈

我有很多田地

[信息][详情][读数][数值1]

[信息][详情][读数][数值2]

[信息][详情][读数][数值3]

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

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

event.set('[currField]', event.get('[currField]').to_s.hex);
但是我用谷歌找不到正确的语法。。谢谢你的帮助

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

编辑:我还没有测试我的配置,所以我不知道“读出”是否是一个哈希映射;im使用grok筛选器在配置中添加值

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

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

所以[Message][Detail][Readout]是一个散列,你想在成员上迭代吗?不,它们是独立的字段,但都有[Readout]前缀。你是说字段名包含方括号,还是[Message]是一个包含[Detail]散列的对象?不,我想这只是你在logstash配置中访问它们的方式。。当我在kibana看到它们的时候,我想它们是带点的<代码>消息.细节.读数.值1老实说,我不确定我会在原始消息中查找你的建议很有魅力;谢谢
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
    '
}