プロローグ
ある日のこと、サービスを開発・運用しているチームの同期にこんな依頼をされた。
「システムからメールが送れてないみたいなので、調査を手伝ってほしい」
聞けば、システムからのメール送信は外部のメールサービスを利用していて、そこにログとして情報は出ているのだが、テキストであるログから情報を抽出してくるにはたいへんな労力がかかるとのことだった。
そこで、システムのメール送信状況をElastic Stackを利用して可視化することになった。
構成
- シェルを実行してインターネット経由でメールサービスからログを取得
- 情報を加工(マスク等)した後、ファイルを配置
- Filebeatでファイルを読ませ、Logstashに送る
- Logstashで情報をフィールドに分割し、Elasticsearchに送る
- Elasticsearchの情報をKibanaで可視化
(今回はElastic Stackをすでに立てていたため相乗りする形としたが、不要ならFilebeatとLogstashはなくして直接Elasticsearchに送信でも可)
LogstashやElasticsearchの設定などは他に良い記事がたくさんあると思うので、今回は割愛。
結果
どのくらいメール送信が失敗しているかや、挙動が変化したことなどが一目瞭然。
上図は送信に失敗したメールを失敗原因の分類別に積み上げたグラフであり、原因が水色だったものが9/5ごろなくなっているのがわかる。
Elasticsearchにデータを入れておくと、Kibana上で様々な条件でのデータの抽出が簡単に行えるため、データの分析がしやすくなる。例えば、上図はメールアドレスをtypoしていてそもそも届かないデータを抽出したもので、こういったそもそもメールが届かないデータが存在していることを知ることができる。
ElasticsearchのデータをKibanaで分析することで、新たな仮説を立て、さらなるサービス改善につなげることができる。
まとめ
システムの各所でログを出力させてても、それを適切に活用できていないことが多いのではないでしょうか。せっかくログを出してても、障害時の原因調査にしか使ってない。それではログがかわいそうです。
情報は活かしてなんぼ。活かすためには可視化!
Elastic Stackを使えば、お手軽に可視化できます!
エピローグ
Elastic Stackを使ってメールの送信状況を可視化することで、楽に問題の調査をすることができた。
後日... 「今度は問題あったとき通知されるようにできないかな?」
有償版のKibanaでは、機械学習と検知機能で異変を自動的に察知してくれる機能があるらしい。それを利用すれば、常にダッシュボードを確認していなくても異変を知らせてくれるようになる。
しかし、それはまた別のお話。