障害が発生した場合、一時切り分けが必要になりますが、それってどうやって行っていますか?
今回は私がインフラをやっていて障害対応時に切り分ける方法について説明してみます(対象は Linux サーバです)。
障害切り分けでできること
「何か突然繋がらなくなった」(つまり、状況がよく分からない)という一報を受けた場合、受けた方も「それだけじゃこっちも分からないよ。。。」となりますが、とりあえず対象のサーバへアクセスしてみることから始まります。
以下にアクセス順とその時起きていると予想されることをまとめてみました。
- その1:まずは SSH でログイン
- その2:top で現在の状況を確認
- その3:とにかく telnet でポートを叩いてみる(IP と TCP レベルの確認)
これらの順序の根拠はアプリケーションとは遠いところ(OS レベル)から近いところへとだんだんと近づいています。
その1:まずは SSH でログイン
とにかく最初は SSH でログインしてみます。これができなければ始まりません。自宅等でできない場合は誰かにやってもらうしかないでしょう。この時点で SSH ですらログインできない場合は SSH デーモン(OS 上のプロセス)に何らかの異常が発生しています。
SSH がコネクションエラーとなるようであれば、ping を使ってコネクションが生きているかを調べてみましょう。SSH がエラーとなり ping が応答する状況というのはカーネルレベル(ネットワーク経由の割り込み)では応答を返していることになり、OS は動いているものと考えられます。
恐怖の ping 応答のみ状態
いずれにせよこの状況になってしまった場合は直接サーバの目の前に行き、何が起こっているかを自分の目で見て確認する必要があります。この場合、I/O 関連の一時的な障害が多いため、通常は再起動すれば復旧します。
ただ、再起動してしまうと結局何が起きていたのかが分からず、次回も同じ障害が繰り返される可能性があることに注意して下さい。
なお、後日 Linux サポートに問い合わせ依頼を行う場合でもこの状態の場合、「原因究明の為、再度現象発生時にカーネルダンプを行って下さい」と回答が来ることがほとんどです(つまり、再度発生してその場で何かしないと原因もよくわからない)。
このあたりを踏まえて、落ち着いて行動するべきでしょう。