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

お世話になります。

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

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

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で指定した期間の効き方が以下のマニュアルと違いがあります。
https://www.elastic.co/guide/en/logstash/current/plugins-filters-throttle.html#plugins-filters-throttle

Descriptionの

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

から始まる部分です。

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

②実際の動作

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

動作環境

  • Logstash 7.3.0
  • OS : Ubuntu 16.04.4 LTS

こんにちわ。

拙い英語力でドキュメントをおってみました。
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に新しいスロットが始まっているため、ドキュメントと実際の動作に相違ないように見えました。

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

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

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

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はあくまでデータを受信しない期間を指定しているだけ、というわけではないのですね。。。

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

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

下記の図の例でいうと、

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

のようにしたいです。

③こうなってほしい

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

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

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