📝

Logstash filter のデバッグ方法

2024/03/28に公開

備忘録です。

対象のログ

example.log
2023-02-16 15:44:36.569 +0900 INFO [log.performance] - PERF LOG - [totalTime=120, status=200, path=/abc/def]

デバッグ用の設定ファイル

標準入力から取得したログを、filterで分解して、デバッグ出力する。

grok pattern: https://github.com/hpcugent/logstash-patterns/blob/master/files/grok-patterns

filter.conf
input {
  stdin{}
}
filter {
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:time} %{ISO8601_TIMEZONE:tz} %{NOTSPACE:lv} \[%{NOTSPACE:ctx}\] - %{DATA:msg} - \[%{DATA:kv}\]" }
  }
  kv {
    source => "kv"
    target => "kv"
    field_split_pattern => "[, ]+"
  }
  mutate {
    convert => {
      "[kv][totalTime]" => "integer"
    }
  }
}
output {
  stdout{codec => rubydebug{metadata => true}}
}

デバッグ手順

localのdocker環境で実行する。

# docker login
docker pull centos:centos7
docker run --name logstash-test -it centos:centos7

# install logstash
yum -y install wget java
cd /opt
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.5.1.tar.gz
tar -xzvf logstash-7.5.1.tar.gz
cd logstash-7.5.1

# テスト用のファイルを作成
vi example.log
vi filter.conf

# デバッグ実行
cat example.log | bin/logstash -f filter.conf

次使う時

docker start logstash-test && docker exec -it logstash-test bash && docker stop logstash-test

不要になったら消す

docker rm logstash-test

Discussion