会社の規模別監視システム 3−3: Linuxサーバーの障害通知メール、ログ自動保守


ふう…。結局、サーバーのトラブルは、データベースのプロセスが暴走したことによる処理性能のダウンでした。思い切ってサーバーを再起動したことで動作不良は収まり、ピーピーと鳴っていたアラームも静かになりました。

解決…といえば、解決なのですが、原因究明を後回しにして、ひとまず再起動でごまかしてしまった感は残ります。また、今回はたまたま障害が収まりましたが、毎回、再起動だけでトラブルが解決するとはちょっと考えにくい…とあなたは感じています。

おそらく、いま、なにかをしておかないと、次回の障害時に再び困ってしまうんだろうな、と溜息混じりにLinuxの教本をめくるあなた。目次から、ここかな?という部分を見つけてはぱらぱらと眺め、ページの右上を折って目印代わりにしていきます。

——
状況の確認に使うコマンド例
top プロセスの動きをリアルタイムで確認する
uptime CPUの使用率をチェックする
free メモリの使用量と空き量をチェックする
df ディスクの空き容量をチェックする

負荷の高いプロセスの停止に使うコマンド例
ps プロセスを確認する
kill プロセスを停止する
起動停止スクリプトがある場合は利用してもよい
停止 /etc/init.d/プログラム名 stop
確認 /etc/init.d/プログラム名 status

エラーログをチェックする
tail ログファイルの末尾を表示する
grep ファイルの中身を抜粋する
——

エラーログ?ページをめくるあなたの手が止まりました。なになに…。

「Linuxサーバーでは、OSやアプリケーションの様々なメッセージやイベントがログとして出力されます。ログは非常に重要で、有益な情報を与えてくれるものです。しかし、複数の場所に出力されていたり、正常なログとエラーログで形式がバラバラだったり、そもそものログの分量が膨大だったり…。ログから必要な情報を引き出すには、ノウハウやコツが必要になります。」「ログをゴミにするも、宝の山にするも、あなた次第です!」

ログ…。今回の障害の情報も、もしかするとログやエラーログに残っているかもしれません。どのような障害が起きたのか、何が原因で処理が遅くなってしまったのか、など今後丁寧に確認していけば、再発防止や次回以降の素早い対応にきっと役立つでしょう。

今回の障害を期に、サーバーを監視するということに少し興味がわきはじめたあなた。サーバーの監視というテーマで書かれた書籍やウェブサイトに目を通すことも、今後は増えていくでしょう。積極的に情報を収集すれば、スキルアップの手がかりはたくさん見つかりそうです。

例えば…Linuxサーバーのコマンドだけで障害を知らせるメールを送る方法がありそうです。

——-
#!/bin/sh
logcheck() {
while read i
do
echo $i | grep -q (ログに含まれる)障害のキーワード
if [ $? = “0” ];then
echo $i | mail -s 件名 送信先メールアドレス
fi
done
}

tail -n 0 –follow=name –retry $1 | logcheck
——-

このようなシェルスクリプトを準備して、$ ./スクリプト名 対象ログ のような形で実行しておくと、ログに障害を表すキーワード、障害に繋がるキーワードが記録されたときに、サーバー障害の障害通知メールやネットワーク障害の障害通知メールを送ることができそうです。

例えば…ログを自動保守してくれるログローテーションという仕組みがあるそうです。

Linuxサーバーのログファイルは、ログが書き込まれるたびに追記されていきます。つまり、ログファイルの容量は、管理者が放置していれば、日々巨大化・肥大化してしまう恐れがあります。あまりに大きくなったログファイルはサーバーのストレージやディスクを圧迫して、Linuxサーバーの動作を妨げてしまうかもしれません。ログでいっぱいのログファイルが、いつかディスクの空き容量を使いきってしまう…。これは避けなければいけません。

Linuxでは、この問題を防ぐためにlogrotateというログローテーション機構が搭載されているようです。知れば知るほど、いろいろと考えられているLinuxサーバー。安定した、より良いサービスを利用者に提供するために、あなたのサーバー保守もどんどんレベルアップしていきそうです。

次回に続く。

《 会社の規模別監視システム 3−2:Linuxサーバーのコマンドと監視

会社の規模別監視システム 4−1:Windowsサーバーについて 》

シリーズ一覧

[catlist tags=”会社の規模別監視システム” orderby=title order=asc numberposts=-1]