【问题标题】:HEXADECIMAL string to Binary and Binary to decimal in log-stash using ruby filter使用 ruby​​ 过滤器在日志存储中将十六进制字符串转换为二进制和二进制到十进制
【发布时间】:2021-07-04 01:37:23
【问题描述】:

我正在使用 logstash,并且正在使用 ruby​​ 过滤器将 HEX 更改为十进制,这对于一组数据来说效果很好。我用的是;

ruby{
        code => "event.set('xxx', event.get('xx').hex)"
    }

我正在寻找类似的东西,可以将 HEX 转换为二进制,然后在我对 patterm 进行摸索后将其转换为十进制。我需要这样做的原因是因为我从十六进制值中挑选不均匀的位,例如

十六进制字符串 - “ABC” 二进制 - “101010111100”

然后我将使用 GROK 只选择前三位“101”并转换为十进制字段,这是我想要的值,例如下一个“010”到另一个字段。我只是在两次转换的帮助之后。不是 Grok

【问题讨论】:

    标签: ruby logstash


    【解决方案1】:

    您可以通过使用 to_i 和 to_s 并指定基数来进行转换

        mutate { add_field => { "[HexNum]" => "4a" } }
        ruby {
            code => '
                hexNum = event.get("HexNum")
                event.set("binNum", hexNum.to_i(16).to_s(2))
            '
        }
    

    然后,您可以使用 grok 过滤器挑选出 [binNum] 中您想要的部分并将它们放入几个字段中,然后将它们转换为十进制

        ruby {
            code => '
                event.set("field1", event.get("field1").to_i(2).to_s)
                event.set("field2", event.get("field2").to_i(2).to_s)
            '
        }
    

    【讨论】:

    • 嘿,非常感谢您的回复。就一件事。如果我的 parten 被分成 3 个,这个例子就可以工作。我的示例有所不同,例如,一旦我得到二进制文件 1111010101010,我将要选择字符 1-3,即“111”作为字段 1,然后可能是字符 (8 -13),即“101010”字段2等
    • 如何使用 grok 拆分字段,您说不需要帮助。很难说如何“可能”分割领域。
    • 我使用 Grok 将转换后的二进制消息拆分如下 grok { match => {"HexNum" => "(?.{220})(?.{10 })(?.{4})(?.{24})(?.{18}) 等等 }
    猜你喜欢
    • 2013-11-24
    • 2020-06-27
    • 1970-01-01
    • 2014-10-30
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 2021-10-30
    相关资源
    最近更新 更多