# Logstash http\_poller で 取得したデータのfilter方法について

**URL:** https://discuss.elastic.co/t/logstash-http-poller-filter/248426
**Category:** 日本語による質問・議論はこちら
**Created:** [September 13, 2020, 2:53am UTC](https://discuss.elastic.co/t/logstash-http-poller-filter/248426 "2020-09-13T02:53:17Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![unisuke](https://avatars.discourse-cdn.com/v4/letter/u/9d8465/32.png) [@unisuke](https://discuss.elastic.co/u/unisuke)
#### Post date: [September 13, 2020, 2:53am UTC](https://discuss.elastic.co/t/logstash-http-poller-filter/248426/1 "2020-09-13T02:53:18Z")

</div>

こんにちは。 http\_poller pluginで取得したデータをfilterしたいと思っています。

http\_pollerで得たデータは下記としまして、

```auto

"content" => [
  [0] {
    "AList" => [
      [0] {
        "name" => "X",
      },
      [1] {
        "name" => "Y,
      }
    ],
    "BList" => [
      [0] {
        "name" => "X",
      },
      [1] {
        "name" => "Y",
      }
    ],
  },

  [1] {
    "AList" => [
      [0] {
        "name" => "X",
      },
      [1] {
        "name" => "Y,
      }
    ],
    "BList" => [
      [0] {
        "name" => "X",
      },
      [1] {
        "name" => "Y",
      }
    ],
  }
],

"allFetched" => false,
"result" => true,
"number" => 0
}

```

以下のを削除したく  
[content][0][AList]  
[content][0][BlList]  
[content][1][AList]  
[content][1][BList]

以下にすれば削除してくれるのですが、[0]、[1]とある分指定する必要があり非常に非効率のため、  
色々試してみたものの、かなっておりません。  
お手数ですがアドバイスをいただけないでしょうか？

```auto
filter {
        mutate {
                remove_field => [
                "[content][0][AList]",
                "[content][1][AList]",
                "[content][0][BList]",
                "[content][1][BList]"
                ]
        }
}

```

---

<div class="post-metadata">

### Author: ![Koji\_Kawamura](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/koji_kawamura/32/93938_2.png) [@Koji\_Kawamura](https://discuss.elastic.co/u/Koji_Kawamura)
#### Post date: [September 15, 2020, 1:32pm UTC](https://discuss.elastic.co/t/logstash-http-poller-filter/248426/2 "2020-09-15T13:32:56Z")

</div>

@unisuke さん

こんばんは。ちょっと自分で試せていないのですが、参考までに。  
残念ながら `mutate` の `remove_field` ではワイルドカード指定のオプションがなさそうです。  
代替え案として、 `ruby` フィルタを使うと、配列の要素でループしながら削除するスクリプトを書けそうです。

参考になりそうなコードスニペットを共有させていただきます。  
[配列の要素をループする例](https://discuss.elastic.co/t/ruby-code-for-array-iteration/137450)

```
event.get('db_user_details').each do |item|
  if item['country'] == 'india'
    event.set('flagger', 'done')
  end
end

```

[フィールドを削除する例](https://discuss.elastic.co/t/how-to-remove-subfield-using-ruby/68072/5)

```
event['outputdata'].keys.each { |k|
  event['outputdata'].delete(k) if k.start_with?('ID')
}

```

上記の二つを組み合わせればループしながら `content` 配列内のそれぞれで `AList` と `BList` を削除できないでしょうか？

---

<div class="post-metadata">

### Author: ![unisuke](https://avatars.discourse-cdn.com/v4/letter/u/9d8465/32.png) [@unisuke](https://discuss.elastic.co/u/unisuke)
#### Post date: [September 17, 2020, 1:35pm UTC](https://discuss.elastic.co/t/logstash-http-poller-filter/248426/3 "2020-09-17T13:35:46Z")

</div>

@Koji_Kawamura さん

コメント頂き大変ありがとうございます。  
お返事が2日遅れて申し訳ありません。  
やはりワイルドカードは無理ということがわかってよかったです。  
rubyで頑張ればいけるのではと思っていたものの、あまりアイディアがなく、ご提示頂き大変ありがとうございます。  
いちど試してみたいと思います。

---

<div class="post-metadata">

### Author: ![unisuke](https://avatars.discourse-cdn.com/v4/letter/u/9d8465/32.png) [@unisuke](https://discuss.elastic.co/u/unisuke)
#### Post date: [September 19, 2020, 8:56am UTC](https://discuss.elastic.co/t/logstash-http-poller-filter/248426/4 "2020-09-19T08:56:01Z")

</div>

@Koji_Kawamura さん  
こんばんは。やっているもののruby力が足りなくて、うまくいきません。。  
もし、具体的な案を頂けましたら幸いです。

---

<div class="post-metadata">

### Author: ![unisuke](https://avatars.discourse-cdn.com/v4/letter/u/9d8465/32.png) [@unisuke](https://discuss.elastic.co/u/unisuke)
#### Post date: [September 19, 2020, 11:52am UTC](https://discuss.elastic.co/t/logstash-http-poller-filter/248426/5 "2020-09-19T11:52:00Z")

</div>

こちらで試してみたところ、何もフィルターせずの結果でした。

```auto
input {
        http_poller {
                urls => {
                        db1 => {
                                method => POST
                                url => "http://xxx.com"
                                headers => {"Content-Type" => "application/json"}
                                body => '{"statuses": ["OPEN"]"}'
                        }
                }
                request_timeout => 10
                schedule => {every => "30s"}
                codec => "json"
                metadata_target => "http_poller_metadata"
        }
}

filter {
        ruby {
                code => "
                        event.get('content').each do |num|
                                event['content'].keys.each { |k|
                                        event['content'].delete(k) if k.end_with?('List')
                                }
                        end
                "
        }
}

output {
        stdout {
                codec => rubydebug
        }
}

```

---

<div class="post-metadata">

### Author: ![unisuke](https://avatars.discourse-cdn.com/v4/letter/u/9d8465/32.png) [@unisuke](https://discuss.elastic.co/u/unisuke)
#### Post date: [September 19, 2020, 2:46pm UTC](https://discuss.elastic.co/t/logstash-http-poller-filter/248426/6 "2020-09-19T14:46:20Z")

</div>

できました！  
こちらのが大変ヒントというかそのままでしたいことができました。

> [@Remove Subfield using ruby](https://discuss.elastic.co/t/remove-subfield-using-ruby/225055/4):
>
> Hi badger thank you, but i tweak a little ruby { code =\> ' event.get("attachments").each\_with\_index { |b,index| event.remove("[attachments][#{index}][documentCharacteristic]") } ' }

```auto
filter {
        ruby {
                code => '
                        event.get("content").each_with_index { |b,index|
                                event.remove("[content][#{index}][AList]")
                        }
                '
        }
}

```

---

<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: [October 17, 2020, 2:46pm UTC](https://discuss.elastic.co/t/logstash-http-poller-filter/248426/7 "2020-10-17T14:46:21Z")

</div>

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