- Logstash を使って、日々出力されるログを Elasticsearch へと送りたい。
- filter で色々書く必要がある。
- お手軽に、書いた logstash.conf をすぐに試す環境が欲しい。
こんな必要性が出てきましたので、今回、まとめました。
環境
- Docker version 19.03.1, build 74b1e89
- docker-compose version 1.24.1, build 4667896b
logstash.conf を試しながら作り上げるための Docker Compose の Logstash 環境を書く
Docker Compose は使わなくとも実現可能と思います。
しかし、 Docker コンテナにプラグインをインストールしたくなったりなどの場合にカスタマイズできる方が便利です。また、ファイル共有周りを考えると Windows でも動かしやすいので、 Docker Compose を今回は使いました。
参考ページ
ディレクトリ構成
logstash/pipeline/logstash.conf
: 本投稿でメインとなるファイルです。これを修正して設定ファイルを作り上げていくことになります。log/
: 今は何も入っていませんが、ここに Logstash に取り込ませるログファイルを入れる想定です。logstash/Dockerfile
: logstash コンテナにプラグインをインストールしたくなった時に編集します。
docker-compose.yml
logstash/Dockerfile
logstash/pipeline/logstash.conf
input { stdin { } }
output {
stdout { codec => rubydebug }
}
必要最低限の logstash.conf を試す。
標準入力を受付け、それを Logstash が処理し、標準出力で表示する logstash.conf を作りました。
これがうまくいけば、正常に動作する Logstash を手に入れたことになります。そうすれば、あとは logstash.conf を編集していけば望む設定を作り上げることができるようになります。
まずはビルドして、 Logstash の Docker コンテナを動かす準備をします。
起動します。その後、 started Logstash API endpoint {:port=>9600}
が表示されたら、適当に入力して Enter 。今回は、 aiueo
としました。すると、
{
"host" => "0c447dc1370c",
"message" => "aiueo",
"@version" => "1",
"@timestamp" => 2019-08-24T02:23:40.305Z
}
と Logstash が処理した出力が返ってきました。成功です!
実施時は次のようになります。
logstash.conf を編集していく
ログファイルを log/
に配置します。
そして、最低限の logstash.conf を少し編集し、その後 docker-compose run --rm logstash
で結果を確認し、また編集し、を繰り返していきます。
次のページが役立ちました。
- Logstash Configuration Examples | Logstash Reference [7.3] | Elastic
- LogstashでのGrokの始め方 – Qiita
- 既存の Gork パターンを積極的に使う。
- 複数行で 1 つのログの場合。 [logstash 複数行] などで検索する。
- ログの日時を date 型に変換する
おわりに
Elasticsearch にログを送ることになりました。デフォルトではログの1行が message というキーの値として送信されます。
これでは後ほど Kibana などで分析する時にやりにくいです。そこで今回のように logstash.conf を編集すればよいわけですけれども。。。
Logstash には明るくないため、一つ一つ確認しながら作り上げていきたかったのです。
ですので、そのようなことができる環境づくりについて、本投稿ではまとめました。
以上です。