📝
Logstash filter のデバッグ方法
備忘録です。
対象のログ
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