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

**URL:** <https://discuss.elastic.co/t/logstash/267943>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [March 22, 2021, 6:15am UTC](https://discuss.elastic.co/t/logstash/267943 "2021-03-22T06:15:29Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ryosuke.mm](https://avatars.discourse-cdn.com/v4/letter/r/94ad74/32.png) [@Ryosuke.mm](https://discuss.elastic.co/u/Ryosuke.mm)\
**Post date:** [March 22, 2021, 6:15am UTC](https://discuss.elastic.co/t/logstash/267943/1 "2021-03-22T06:15:29Z")

</div>

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
}

```

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

---

<div class="post-metadata">

**Author:** ![tsgkdt](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tsgkdt/32/39151_2.png) [@tsgkdt](https://discuss.elastic.co/u/tsgkdt)\
**Post date:** [March 22, 2021, 10:23am UTC](https://discuss.elastic.co/t/logstash/267943/2 "2021-03-22T10:23:12Z")

</div>

こんにちわ

Logstashで、とのことでしたらfilterでrubyを選択すると出来そうでした。

```auto
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は以下としました。

```json
{"id":1,"custom_fields":[{"name":"customField_1","id":"A","value":"TestValue1"},{"name":"customField_2","id":"B","value":"TestValue2"}]}

```

としますと、outputのところで以下の値が得られました。

```ruby
{
               "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が出ているので、出来ていそうな気がします。  
こんな感じでどうでしょうか？

---

<div class="post-metadata">

**Author:** ![Ryosuke.mm](https://avatars.discourse-cdn.com/v4/letter/r/94ad74/32.png) [@Ryosuke.mm](https://discuss.elastic.co/u/Ryosuke.mm)\
**Post date:** [March 23, 2021, 3:48am UTC](https://discuss.elastic.co/t/logstash/267943/3 "2021-03-23T03:48:45Z")

</div>

tsgkdtさん

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

ありがとうございます！

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [April 20, 2021, 3:48am UTC](https://discuss.elastic.co/t/logstash/267943/4 "2021-04-20T03:48:56Z")

</div>

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