【问题标题】:flatten json with logstash ruby用 logstash ruby​​ 展平 json
【发布时间】:2021-07-28 15:01:48
【问题描述】:

我有一个 json 日志,它扩展为:

JSON:
 |-host : hostname
 |-httpRequest
   |-httpVersion : HTTP/1.1
   |-headers
     |-0
       |-name: X-Forwarded-For
       |-value: 1.1.1.1
     |-1
       |-name: X-Forwarded-Prot
       |-value: https
     |-2
       |-name: X-Forwarded-Port
       |-value: 443
   |-httpMethod: post
 |-action: allow

等等。

我想像这样重新格式化它:

JSON:
 |-host : hostname
 |-httpRequest
   |-httpVersion : HTTP/1.1
   |-headers
     |-X-Forwarded-For : 1.1.1.1
     |-X-Forwarded-Prot : https
     |-X-Forwarded-Port : 443
   |-httpMethod: post
 |-action: allow

Split 将只取最后一个 [#] 名称/值,因为它会覆盖前一个。 我很确定这将需要一个 ruby​​ 代码块,但我没有运气跟随我在网上找到的类似场景的 ruby​​ 代码。

我认为这里的主要问题/与其他文章/答案的不同之处在于它不仅仅是纯粹的扁平化。但也需要重新排列 name:value 。

【问题讨论】:

  • 我现在没有精力将其重写为答案,但可以在 here 找到所需的 ruby​​ 过滤器。
  • 谢谢。我在此线程上发布了另一个有效的帖子,但也会检查一下。

标签: json ruby logstash


【解决方案1】:

这似乎也能解决问题:

纽菲尔德

    ruby {

        code => '

            event.get("[@metadata][json][httpRequest][headers]").each do |header|

                event.set("[newfield][#{header["name"]}]", header["value"])

            end

        '

    }

相同的字段

    ruby {

        code => '

            headerHash = {}

            event.get("[@metadata][json][httpRequest][headers]").each do |header|

                headerHash[header["name"]] = header["value"]

            end

            event.set("[@metadata][json][httpRequest][headers]", headerHash)

        '

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 2021-03-05
    • 2020-10-19
    相关资源
    最近更新 更多