json - 用 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 代码。
我认为这里的主要问题/与其他文章/答案的不同之处在于它不仅仅是纯粹的扁平化。但也需要重新排列名称:值。
解决方案
这似乎也可以解决问题:
纽菲尔德
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)
'
}