# Throttle filter pluginの動作のマニュアルとの違いについて

**URL:** <https://discuss.elastic.co/t/throttle-filter-plugin/245875>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [August 21, 2020, 8:20am UTC](https://discuss.elastic.co/t/throttle-filter-plugin/245875 "2020-08-21T08:20:26Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![sshota](https://avatars.discourse-cdn.com/v4/letter/s/f9ae1b/32.png) [@sshota](https://discuss.elastic.co/u/sshota)\
**Post date:** [August 21, 2020, 8:20am UTC](https://discuss.elastic.co/t/throttle-filter-plugin/245875/1 "2020-08-21T08:20:26Z")

</div>

お世話になります。

Throttle filter pluginの動作について教えてください。

以下のconfでlogstashを動作させています。

```auto
input {
 ～
}

filter {
 ～
  throttle {
    before_count => -1
    after_count => 1
    period => 60
    max_age => 120 
    key => "%{item}"
    add_tag => "throttled"
  }
  if "throttled" in [tags] {
    drop { }
  }
～
}

output {
 ～
}

```

ここで期待している動作は、itemの値ごとに、取得するデータを1分に1件とすることです。  
throttleされたらadd\_tagしてdropする、という動作はできているのですが、periodで指定した期間の効き方が以下のマニュアルと違いがあります。

> **[Throttle filter plugin | Logstash Plugins](https://www.elastic.co/docs/reference/logstash/plugins/plugins-filters-throttle)**
>
> Plugin version: v4.0.4 (Other versions), Released on: 2017-11-07, Changelog. For questions about the plugin, open a topic in the Discuss forums. For bugs...

Descriptionの

> Another example is if you wanted to throttle events so you only receive 1 event per hour,～

から始まる部分です。

### ①イメージしていた動作（マニュアルの通りだとこっち）

 ![イメージ1](https://us1.discourse-cdn.com/elastic/original/3X/c/5/c5af78b6dc54ed251dee13bbffa07a8aa6fe1e95.jpeg)

### ②実際の動作

 ![イメージ2](https://us1.discourse-cdn.com/elastic/original/3X/5/5/5505950f3abdc62769b2141c7785acae44c74e08.jpeg)

希望としては、①の動作をしてほしいのですが、②の動作をします。  
これは私の理解が間違っているだけで、②の動作しかできないのでしょうか？  
もしくは何か私の設定で間違っている点などあれば教えていただきたいです。

## 動作環境

- Logstash 7.3.0
- OS : Ubuntu 16.04.4 LTS

---

<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:** [August 21, 2020, 9:26am UTC](https://discuss.elastic.co/t/throttle-filter-plugin/245875/2 "2020-08-21T09:26:26Z")

</div>

こんにちわ。

拙い英語力でドキュメントをおってみました。  
periodの説明のところに、以下があります。

> The period in seconds after the first occurrence of an event until a new timeslot is created.

"イベントが最初に発生してから新しいタイムスロットが作成されるまでの期間を秒単位で示します。"  
とすれば、②の動作になるのでは？と思います。

最初の10:00:30にイベント発生し、60秒後の10:01:30に新しいスロットが始まっているため、ドキュメントと実際の動作に相違ないように見えました。

---

<div class="post-metadata">

**Author:** ![sshota](https://avatars.discourse-cdn.com/v4/letter/s/f9ae1b/32.png) [@sshota](https://discuss.elastic.co/u/sshota)\
**Post date:** [August 24, 2020, 5:53am UTC](https://discuss.elastic.co/t/throttle-filter-plugin/245875/3 "2020-08-24T05:53:23Z")

</div>

@tsgkdt さん  
いつもご回答ありがとうございます。  
そうなのですね。。。

> "イベントが最初に発生してから新しいタイムスロットが作成されるまでの期間を秒単位で示します。"  
> とすれば、②の動作になるのでは？と思います。

はい、確かにその記述は確認していたのですが、あわせてDescriptionには以下の記述もあったため、誤って認識してしまいました。

```auto
Which would result in:

event 1 - not throttled (period start)
event 2 - throttled (successful filter)
event 3 - throttled (successful filter)
event 4 - throttled (successful filter)
event x - throttled (successful filter)
period end
event 1 - not throttled (period start)
event 2 - throttled (successful filter)
event 3 - throttled (successful filter)
event 4 - throttled (successful filter)

```

この記述だと、period endしてから、event 1 を受信したタイミングで、_ **period start** _となっているので、periodが経過後の一番最初のイベントを受信したタイミングからまた新しいperiodが始まる、と解釈しておりました。

periodはあくまでデータを受信しない期間を指定しているだけ、というわけではないのですね。。。

---

<div class="post-metadata">

**Author:** ![sshota](https://avatars.discourse-cdn.com/v4/letter/s/f9ae1b/32.png) [@sshota](https://discuss.elastic.co/u/sshota)\
**Post date:** [August 24, 2020, 9:46am UTC](https://discuss.elastic.co/t/throttle-filter-plugin/245875/4 "2020-08-24T09:46:39Z")

</div>

本件の延長で質問させてください。  
もしどなたかいいアイデアがあれば、お助けいただけますと幸いです。

通常状態であれば絶え間なく来る大量データを、logstashを使って1分に1件のデータに間引きをしたいです。  
当初はshやプログラムを使って間引くことを検討していたのですが、大量データをファイルに書き出す際のファイルI/Oがボトルネックになる懸念もあったので、何とかlogstashで出来ないかを検討しています。

下記の図の例でいうと、

```auto
 10:00:00-59のうち最初（もしくは最後）のデータを、data-2020-08-24.1000.txtに登録する
 10:01:00-59のうち最初（もしくは最後）のデータを、data-2020-08-24.1001.txtに登録する
 …繰り返し

```

のようにしたいです。

### ③こうなってほしい

 ![イメージ3](https://us1.discourse-cdn.com/elastic/original/3X/6/5/6561ffaa27d69e2964370e896500177490fd190d.jpeg)

この度のthrottleの仕様だと、logstash起動後の初回データを受信して時点がperiod startとなるので、peirodの開始時間（秒）が定まらないこと  
また、このため1つの時分に対して、データが2件になってしまう場合ががあること、などが課題となります。  
※throttleされたらadd\_tagしてdropする、受信した日時で出力先ファイルを振り分けるといった動作はできています。

背景からすべて説明しきれず、恐縮なのですが、  
何か良いアイディアがありましたら、ご教授賜りたいです。  
よろしくお願いいたします。

---

<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:** [September 21, 2020, 9:46am UTC](https://discuss.elastic.co/t/throttle-filter-plugin/245875/5 "2020-09-21T09:46:49Z")

</div>

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