filebeatのモジュールをLogstashで使用する方法

filebeatのapacheモジュールを、logstashで使用できるように設定したいです。
以下のマニュアルを参考に、translateを実施するように設定してみたのですが、
期待通りtranslateされませんでした。
モジュールをLogstashで使用する場合、filebeat側にも何か設定する必要はありますでしょうか。

https://www.elastic.co/guide/en/logstash/current/logstash-config-for-filebeat-modules.html

■Logstashのconf設定内容

input {
beats {
port => 5044
}
}
filter {
if [fileset][module] == "apache" {
translate {
field => "[http.response.status_code]"
destination => "[http_status_description]"
dictionary => {
"100" => "Continue"
"101" => "Switching Protocols"
"200" => "OK"
"500" => "Server Error"
}
fallback => "I'm a teapot"
}
}
}
output{
elasticsearch{
hosts => [ "XXX.XXX.XXX.XXX:9200" ]
user => "******"
password => "******"
manage_template => false
index => "apache_test"
}
}

filebeatでmoduleを使用したとき、実際にパース処理が行われるのbeatsの中ではなく、ElasticsearchのIngest Processorだと思います。

そのため、filebeat -> logsatsh -> Elasticsearchという構成とした場合に、moduleを使用していたとしても、logstashのfilter内ではfilebeatのmoduleによる処理結果が入っていない(messageと、filebeatが付与したホスト情報などのメタデータだけな)ので、期待した結果にならないのだと思います。

input {
  beats {
    port => 5044
  }
}

output {
  stdout {}
}

として確認いただくと、http.response.status_codeといったフィールドが何もないことが確認できるかと思います。

これをふまえまして、
beatsのmodule(Ingest Processorの処理)とLogstashのfilterを組み合わせたいという場合でしたら、2通り考えられそうです。

  1. ModuleのIngest ProcessorをLogstashに変換する(Logstash側によせる)
    PipelineをLogstashの設定に変換してくれるツールがあるので、これが使えないか検討します。

    https://www.elastic.co/guide/en/logstash/7.4/ingest-converter.html

  2. LogstashのFilter部分を、Ingest Processorに変換する(Pipeline側によせる)
    見たところ、それほど数の多くないシンプルな置き換え処理であれば、Script Processorで置換処理を書いてしまうのもありかと思います。

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