ログの監視と通知方法
SREチームの竹田です。Tech Kayac Advent Calendar Migration Track 5日目の記事になります
アプリケーションの挙動を監視し、ある閾値を超えたときにだけ通知が欲しい時があります。
ある程度の障害は想定内として頻繁に起きているときにだけエスカレーションさせたい場合などです。
障害頻度の把握と通知を実現するために、アプリケーションからログをfluentdで集約し、fluent-plugin-grepcounterで一定の閾値を超えたら通知がいくような仕組みを作りました。
しかし運用していく中で以下のような問題がでてきました
- 閾値を変更する際にはfluentdの設定を変更する必要がある
- 通知のテストが難しい
- fluentdのバージョンアップに追随しにくい
そこで、ログ集約と通知を分離することにしました。
fluentdはログの集約に専念させて通知は別のツールを利用する構成です。
Redashで通知
fluentdで集約されたログは最終的にRedshiftに投入されます。RedashでRedshiftへSQLを定期実行しアラート機能を使って通知を送るようにしました。Redashは一般的なツールでもあるので、SQLとテーブル構造さえ知っていれば非エンジニアでも扱える良さがあります。
Mackerelで通知
Mackerelでログやサーバ状態を監視し閾値を超えた場合に通知を行います。
Redashとの違いとしては
- 通知先のメンバーを管理しやすい
- メンテ時に通知のオン/オフを切り替えられる
- サーバメトリクスをトリガーとして通知を送ることができる
と言ったところがあります
最初から分離していれば?
最初から分離していれば...という考えもあるでしょう
サービス開始当初はRedashもMackerelも導入していませんでした。またfluentdですべてやってしまおうという野心がありました。
現在では道具の進歩もあり、より扱いやすい構成に変更する事ができました。