Webサービスのモニタリングについてのチェックリスト

この記事は はてなエンジニア Advent Calendar 2020 11日目の記事です。

はじめに

運用しているWebサービスについて、より良いモニタリングにしていくために普段考えていることをチェックリスト形式でまとめてみました。

全部にチェック付いていないとダメというわけでもなく、Webサービスの性質によっては当てはまらないものもあると思うので参考程度に現状を把握するツールとして使ってください。

チェックリスト

疎通確認

  • それぞれのコンポーネントに対して疎通確認を行っている
  • localhostでなくネットワーク経由でのコンポーネントへの疎通確認を行っている
  • 疎通が取れなかったときに正しくアラートになることを確認している

メトリック

  • 可能な限りチェック監視ではなくメトリック経由での監視にしている
  • ビジネスロジックに関わる値をメトリックにしている

ログ

  • 利用しているログ配送システムの可用性や完全性について理解している
  • ログをメトリックにする際に詰まってしまった場合のことを考慮できている

アラート通知

  • 閾値の根拠をアラート通知から確認できるようにしている
  • アラート発生時にどうすれば良いのかをアラート通知から確認できるようにしている
  • SLOに関係するような重大なものとそうでないものでアラートのレベルを使い分けている
  • 通知の再送を設定している

HTTPリクエストの場合

  • 5xx系だけでなく4xx系もモニタリングしている
  • nginxを使っている場合、499とその他の4xx系を区別してモニタリングしている
  • レイテンシの平均及びパーセンタイル値をモニタリングしている
  • 以上の項目をエンドポイント単位でモニタリングしている

バッチの場合

  • バッチの実行に成功したかどうかをモニタリングしている
  • バッチの実行時間をモニタリングしている
  • 決まった時間に実行されているということを監視している

ジョブキューの場合

  • 正しい結果が返ってくる割合をモニタリングしている
  • 処理の遅延状況をモニタリングしている
  • ジョブキューに入ってきたジョブの数と処理したジョブの数をモニタリングしている

ダッシュボード

  • The Four Golden Signalsに従ってダッシュボードを構築している
  • 単なる数字ではなく割合を確認している
  • 1日前や7日前と比較した数値を確認している
  • リリースタイミングをダッシュボードから確認できるようにしている
  • 開発イテレーションの期間内だけでなく数ヶ月以上での傾向も確認している

開発メンバーとの振り返り

  • リリース・障害に伴って数字に変化は現れたか確認している
  • 監視項目について議論し見直しを行っている
  • 半期や四半期の単位で起きた障害について原因を分類できている

その他

  • サービスの構成図やリクエストのフロー図を用意している
  • 依存している他サービスがあれば、そのサービスが動かなかったときの影響を考慮できている

おわり

他にも色々あったような気がしますが、とりあえず思いついたものはこのあたりです。他にもあれば教えて下さい。