Amazon EC2でプロセス監視ツールを導入する – monit –
プロセス監視について
出社してサーバーを見たらプロセスが落ちてた!?こんな経験ありませんでしょうか。24時間365日の安定運用が当たり前に求められる現在、サーバー担当者が張り付きで監視をするにはコスト的にもリソース的にも限界があります。そこで、ある程度作業を自動化しようというのが今回の試みです。
monitとは
monitは、プロセス/プログラム/ファイル/ディレクトリ/ファイルシステムを管理/監視するためのユーティリティです。monitは、エラーの状況に合わせて自動メンテナンスや修復を行い、意味あるアクションを実行することができます。例えば、実行されない場合、多くのリソースを使用している場合、プロセスが応答せずに停止しない場合等に、プロセスを再起動/開始することができます。他にも、ディレクトリ/ファイル/ファイルシステムにおける、タイムスタンプの変更、チェックサムの変更、サイズ変更等を監視するために使うことができます。monitは、フリーフォーマット、トークン指向の構文に基づいて簡単な制御ファイルを設定してコントロールされます。monitは、syslogまたは独自のログファイルに記録され、エラー条件に合わせてカスタマイズ可能な警告メッセージを通知します。monitは、様々なTCP/IPネットワークのチェック、プロトコルチェックを実行することができ、それらのチェックのためにSSLを利用することができます。また、HTTP(S)を使ってUIを提供しブラウザでアクセスすることができます。
monitを使ってみる
monitは、Amazon Linuxのyumから簡単にインストールできます。
$ yum install monit
それでは、Apacheのプロセスを監視して、プロセスが落ちていたら再起動するような動作を設定します。/etc/monit.confで全体的な設定をし、/etc/monit.d/配下にプロセス毎にファイルを作ると管理しやすいです。
$ yum install httpd $ vi /etc/monit.d/httpd
設定ファイルの中身はこんなかんじです。
check process apache with pidfile /var/run/httpd/httpd.pid start program = "/etc/init.d/httpd start" stop program = "/etc/init.d/httpd stop"
monitデーモンは1分毎にチェックする設定になっています。
httpdプロセスを停止して再起動するか確認する
まずはmonitとhttpdを起動します。
$ serivce httpd start $ service monit start
httpdをstopします。
$ serice httpd stop
ログを見てみます。プロセスが停止していることを検出して自動的に起動しています。
$ tail -f /var/log/monit [UTC Mar 18 16:26:11] info : monit: generated unique Monit id d9f6a1bd10c2c6ee3fb3d881e2948583 and stored to '/root/.monit.id' [UTC Mar 18 16:26:11] info : 'system_ip-10-146-XXX-XXX.ap-northeast-1.compute.internal' Monit started [UTC Mar 18 16:28:11] error : 'apache' process is not running [UTC Mar 18 16:28:11] info : 'apache' trying to restart [UTC Mar 18 16:28:11] info : 'apache' start: /etc/init.d/httpd
psコマンドでプロセスを確認すると、確かにhttpdが起動していました。楽チンです。
まとめ
プロセスやファイルの状態に応じてアクションを設定できるmonitはサーバー管理者の心配事を減らすことができる素晴らしいツールです。今回はプロセスが停止しているかという簡単なチェックでしたが、CPU使用率、メモリ使用量、HTTPアクセス可否等に合わせてアクションをすることも可能です。AutoScaling的なこともできてしまいますね。明日から早朝深夜のチェックが不要になるかも!?