Logstash 特定データのみを抽出し、フィールドに複製したい

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
}

もし分かる方がいらっしゃいましたら、ご教授をくお願い致します。

こんにちわ

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さん

ご丁寧に回答いただきありがとうございます。
提示して頂いた実現方法で意図通りのデータを作成することができました。

ありがとうございます!

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.