首页 > 解决方案 > 用 logstash ruby​​ 展平 json

问题描述

我有一个 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

ETC..

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

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

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

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

标签: jsonrubylogstash

解决方案


这似乎也可以解决问题:

纽菲尔德

    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)

        '

    }

推荐阅读