どこにでもいるSEの備忘録

たぶん動くと思うからリリースしようぜ

ElasticStackの使い方(その2 : Logstash)

f:id:nogawanogawa:20190429090430p:plain
 

結構前にElasticSearchの勉強をしてました。

nogawanogawa.hatenablog.com

今回は、Logstashの勉強をしていきます。

参考はこちら。

www.elastic.co

その他、こちらの本も参考にしました。

Logstash

Logstashは、複数の環境に散らばったログを集め、指定した対象に連携できる、データ処理パイプラインサーバーです。 また、その際にログの加工も行うことが可能です。

Webinarでは

高機能なパイプラインデータ加工・処理プログラム

と読んでいました。

類似の製品としては、fluentdなんかになると思います。

パイプラインデータ処理と実行モデル

パイプラインの中の処理の定義形式と、実際の実行モデルはこんな感じになっているようです。

f:id:nogawanogawa:20190221193559j:plain:w600

Logstashの制御として記述しないといけないのはinputとFilter、Outputになります。 それらの中身を定義することで内部の処理をカスタムします。

そして実行時には、

  1. まずinputの中身の処理が行われ、データが集められます。
  2. その後、一時領域であるqueueに貯められ、順番にFilter処理に移っていきます。マルチプロセスで動作する場合には、queueから複数のデータが取り出され、並列に動作することも可能になっています。
  3. 最後には、outputによって、整形されたデータが出力されていきます。

実際に使ってみる

環境構築

環境はこの辺で行けるでしょう。

www.docker.elastic.co

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のサンプルはこの辺にあります。

github.com

あとの細かい使い方はWebinarをご覧ください。このWebinarはわかりやすいです。

感想

マイクロサービスアーキテクチャの本にも、監視のところでLogstashは紹介されていたので、その世界では有名なのかもしれないですね。

nogawanogawa.hatenablog.com

監視というよりは、ログなどをきれいにするエンリッチメントが主な役割な気がしました。 今回はやっていませんが、ログの整形も結構できそうなので、ある程度の規模のシステムを使うようになったら、便利そうなんで検討したいと思います。 ちゃんと使いこなせるように引き続き勉強していきたいと思います。