結構前にElasticSearchの勉強をしてました。
今回は、Logstashの勉強をしていきます。
参考はこちら。
その他、こちらの本も参考にしました。
Introduction of Elastic Stack 6 これからはじめるデータ収集&分析 Elastic Stackシリーズ (技術の泉シリーズ(NextPublishing))
- 作者: 石井葵,前原応光,須田桂伍
- 出版社/メーカー: インプレスR&D
- 発売日: 2018/06/15
- メディア: Kindle版
- この商品を含むブログを見る
Logstash
Logstashは、複数の環境に散らばったログを集め、指定した対象に連携できる、データ処理パイプラインサーバーです。 また、その際にログの加工も行うことが可能です。
Webinarでは
高機能なパイプラインデータ加工・処理プログラム
と読んでいました。
類似の製品としては、fluentdなんかになると思います。
パイプラインデータ処理と実行モデル
パイプラインの中の処理の定義形式と、実際の実行モデルはこんな感じになっているようです。
Logstashの制御として記述しないといけないのはinputとFilter、Outputになります。 それらの中身を定義することで内部の処理をカスタムします。
そして実行時には、
- まずinputの中身の処理が行われ、データが集められます。
- その後、一時領域であるqueueに貯められ、順番にFilter処理に移っていきます。マルチプロセスで動作する場合には、queueから複数のデータが取り出され、並列に動作することも可能になっています。
- 最後には、outputによって、整形されたデータが出力されていきます。
実際に使ってみる
環境構築
環境はこの辺で行けるでしょう。
docker pull docker.elastic.co/logstash/logstash:6.4.3
コンテナの中に入ってみます。
docker container run -it
bash
中はこんな感じですね。
bash-4.2$ ls bin CONTRIBUTORS Gemfile lib logstash-core modules pipeline vendor config data Gemfile.lock LICENSE logstash-core-plugin-api NOTICE.TXT tools
中身の確認
Webinarの内容を写経してみます。
やることはだいたいこんな感じ。
まず、logstash.conf に設定を書きます。
input{ file {path => "/tmp/log.txt"} } filter { } output { stdout {codec => rubydebug} }
この例だと、/tmp/log.txtがインプットになっていて、それを標準出力に出力しています。
次にlogstashを起動します。
logstash -r -f ./logstash.conf
次に、ログファイルに書き込みを行ってみます。
echo "test" >> /tmp/log.txt
すると、こんな感じにコンソールに反映されました。
{ "host" => "49eb9c54ac3b", "@timestamp" => 2019-05-02T13:13:28.146Z, "message" => "test", "@version" => "1", "path" => "/tmp/log.txt" }
こんな感じでログファイルをずっと監視しているんですね。 (そういうふうにconfig書いてるんだからそりゃそうか。。。)
このまま使ってもいいんですが、ログを整形していきたいです。 そういうときはfilterをいじっていきます。
細かいところはWebinerをご参照ください。 grok patternのサンプルはこの辺にあります。
あとの細かい使い方はWebinarをご覧ください。このWebinarはわかりやすいです。
感想
マイクロサービスアーキテクチャの本にも、監視のところでLogstashは紹介されていたので、その世界では有名なのかもしれないですね。
監視というよりは、ログなどをきれいにするエンリッチメントが主な役割な気がしました。 今回はやっていませんが、ログの整形も結構できそうなので、ある程度の規模のシステムを使うようになったら、便利そうなんで検討したいと思います。 ちゃんと使いこなせるように引き続き勉強していきたいと思います。