Logstashのfilterにて、条件を満たす配列の要素を抽出し、別の属性として複製したいです。
inputのデータ
{
"id" : 1,
"custom_fields" : [
{
"name" : "customField_1",
"id" : A,
"value" : "TestValue1"
},
{
"name" : "customField_2",
"id" : B,
"value" : "TestValue2"
}
]
}
具体的には、上記のデータのcustom_fieldsにおいてid=Bを満たす要素
を抽出し、value値を別のフィールドにコピーして保持させたいと考えております。
フィルタ後のデータ
{
"id" : 1,
"custom_fields" : [
<省略>
]
customField_2 : TestValue2
}
もし分かる方がいらっしゃいましたら、ご教授をくお願い致します。
tsgkdt
(tsgkdt)
March 22, 2021, 10:23am
2
こんにちわ
Logstashで、とのことでしたらfilterでrubyを選択すると出来そうでした。
input {
stdin {
codec => "json"
}
}
filter {
ruby {
code => '
for field in event.get("custom_fields") do # 配列を取得する
if field["id"] == "B" # 指定した条件に合致するか
event.set(field["name"], field["value"]) # nameをフィールド名にして、valueを値にセットする
end
end
'
}
}
output {
stdout {}
}
インプットのjsonは以下としました。
{"id":1,"custom_fields":[{"name":"customField_1","id":"A","value":"TestValue1"},{"name":"customField_2","id":"B","value":"TestValue2"}]}
としますと、outputのところで以下の値が得られました。
{
"id" => 1,
"@version" => "1",
"@timestamp" => 2021-03-22T10:21:34.820Z,
"host" => "348ca721c497",
"custom_fields" => [
[0] {
"id" => "A",
"name" => "customField_1",
"value" => "TestValue1"
},
[1] {
"id" => "B",
"name" => "customField_2",
"value" => "TestValue2"
}
],
"customField_2" => "TestValue2"
}
customField_2のところにTestValue2が出ているので、出来ていそうな気がします。
こんな感じでどうでしょうか?
tsgkdtさん
ご丁寧に回答いただきありがとうございます。
提示して頂いた実現方法で意図通りのデータを作成することができました。
ありがとうございます!
system
(system)
Closed
April 20, 2021, 3:48am
4
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.