エラーログで障害原因を突き止めろ!
障害対応の前に
第3回の今回は、実際にエラーログが記録された場合にどのような対応をすればよいか、いくつかシステムログに記録されるようなローレベルのエラーをピックアップし、説明します。
ですがその前にまず、ログの監視とそのツールについて簡単に説明しておきましょう。障害は、いつ発生するか分かりません。しかし、いつ発生するか分からない障害に対応するために、四六時中コンソールの前に張り付いている訳にもいきません。また、四六時中コンソールに張り付いていたとしても、数多く存在するログファイルすべてに同時に目を通し、障害を示すログに漏れなく対応するのは困難です。
そこで、登場するのがログ監視ツールです。ログ監視ツールを使うことで、エラーログの検出と通知を自動化できます。ここでは、代表的なログの監視/解析ツールとして、以下の3つを紹介します。
- logwatch
- swatch
- logcheck
なお、ここでは使い方などの詳細な説明は行いませんので、配布物に含まれるドキュメントやWebの情報などを調べてみてください。
Logwatch(http://www.logwatch.org/)はログファイルを分析し、結果をメールで通知するツールです。CentOSにはRPMパッケージが用意されており、インストールしてあれば、デフォルトで毎朝4:00にログの解析が実行され、rootに「Logwatch for "ホスト名" (Linux)」のような件名で解析結果がメールで送信されます。1日分のログを確認するのには向いていますが、リアルタイム処理はできません。
Logcheck(http://logcheck.org/)は、特定のパターンにマッチしたログを特定のメールアドレスに送信するなどの処理を行うプログラムで、通常cronなどで定期的に実行します。Logcheckでは、同梱(どうこん)のlogtailというコマンドにより、前回実行時以降に記録されたログだけを対象にチェックを行うことができるようになっています。
Swatch(http://swatch.sourceforge.net/)は、リアルタイムでログを監視し、特定のパターンにマッチするログが記録された場合に、特定のアドレスへのメール送信や、特定のコマンドの実行などが可能なプログラムです。
残念なことにLogcheckもSwatchもCentOS標準のパッケージには含まれていませんが、エラーログに即座に対応する必要があるような場合には、LogcheckやSwathのようなツールが必要になってきます。必要に応じて、こうしたツールの導入も検討してみてください。
エラーログに対応する~ハードディスク障害編
さて、それでは実際にエラーログを見ていきましょう。
まず、/var/log/messagesに図1-1ののようなログが記録された場合の対応です。このログは、ハードディスク(以下HDD)の一部に対する読み書きがエラーになったことを示すログです。
このログが記録されるようになったHDDは、まず、物理的に故障しているとみて間違いありません。実際、このHDDは、この後すぐに多くのデータが正常に読み込めなくなり、OSが起動しなくなりました。
また、このとき、/var/log/messagesには、図1-1のログのほかに、HDDの故障を示すログとして、図1-2のようなsmartd(S.M.A.R.T利用したハードディスク監視デーモン)のログも記録されていました。こちらのログからは、時間とともに、読み込めないセクターが増加していることが分かります。
HDDがこのような状態になってしまった場合、必要な対応はHDDの交換です。場合によっては、故障したHDDに保存されているデータのサルベージが必要になるかもしれません。HDDの交換は説明するまでもないでしょうから、ここでは、故障したHDDからのデータサルベージ方法を簡単に説明しましょう。
データのサルベージは、まず、故障したHDDからデータを吸い出すところから始めますが、これにはddコマンドが利用できます。ddコマンドで吸い出したデータを、直接別のHDDに書き込んだり、ディスクイメージとしてファイルに保存したりします。
直接別のHDDに書き込む場合には、以下のように実行します。hdaが故障したHDD、hdcがデータのサルベージ先のHDDです。
# dd if=/dev/hda of=/dev/hdc ibs=512 obs=1024k conv=sync,noerror
無事ddコマンドが完了したら、fsckでファイルシステムの整合性をとった上で適当な場所にマウントすれば、読めなくなったセクター以外に書かれていたデータはサルベージできているはずです。