Web システム障害時の原因切り分け32パターン

概要

Web システムの障害原因って幅が広いよなと感じる機会があり、頭の整理も兼ねて書き出してみました。

単に原因と言ってもシステム構成や障害の深刻さによって異なってくるため、ひとまず思いついた項目だけをまとめてみます。全体的にインフラ寄りです。

f:id:yuu2634:20180318162550p:plain


ページすら開けない場合

ドメイン編

  • 名前解決が成功するか
  • CNAMEを利用している場合、IPアドレスまで取得できるか

ネットワーク編

  • 別のインターネット回線から接続できるか
  • ping応答が返ってくるか(塞いでいない場合)
  • 公開ポートへのtelnet接続が可能か

HTTPS編

  • TLSコネクションが確立できるか
  • 利用している証明書は有効か

ロードバランサ編

  • 有効状態の Web サーバがぶら下がっているか

Webサーバ編

  • Web サーバのプロセスが起動しているか
  • 443(80)ポートがLISTENとなっているか
  • (アクセスログ等で)クライアントからの接続が来ているか
  • 同時接続数等の上限に達していないか
  • (リバースプロキシ時)バックエンドのサーバから応答があるか

データベース編

  • DBにログイン→クエリ発行が可能か
  • デッドロックが発生していないか
  • スロークエリが大量に出ていないか
  • 物理的/論理的なディスクが枯渇していないか

メモリキャッシュ編

  • memcached/Redis などプロセスは起動しているか
  • 最大コネクション数に達していないか
  • メモリ領域が不足していないか

サーバOS編

  • サーバの負荷(CPU, RAM, I/O, NW)に問題が無いか
  • 他サーバと通信する場合、ローカルポートが枯渇していないか
  • ファイルディスクリプタが枯渇していないか

API編

  • APIとの通信が確立できているか
  • APIからのレスポンスが遅延していないか
  • APIからのレスポンス内容は正常か

出力内容がおかしい場合

フロントエンド編

  • CSS / JavaScript などのリソースが取得できているか
  • 他のブラウザでも再現するか
  • ブラウザコンソールにエラーが出ていないか

データ編

  • 入力内容やログイン状態を切り替えても再現するか

キャッシュ編

  • ブラウザキャッシュが古い状態でないか
  • CDNキャッシュが古い状態でないか


まとめ

やはり多いですね。。。パブリッククラウドやマネージドサービスでは気にしなくてよい部分も出てきましたが、知識として持っておいて損はないかなと感じます。

物理レイヤやアプリレイヤなども含めるとさらに倍以上になりそうです。「他にこんなものがあるよ!」と言ったコメントやツッコミもお待ちしています。