Tech Sketch Bucket of Technical Chips by TIS Inc.

MonitのアラートをHipChatにも通知する

Pocket

この記事はeXcale Developer's Blogから移転されたものです。

eXcale 開発チームの平井です。

Monitは、サービスの監視を行うためのユーティリティツールで、システムの状態・状況に応じて特定のコマンドを実行したり、アラートメールを送信したりすることができます。インストールや設定が簡単にできるといった特徴を持ちます。

今回は、このMonitでプロセスの死活監視を行い、プロセスダウンの際にメールとHipChatに通知する方法をご紹介します。

Monitのインストール

Monitはyumやaptなどのパッケージ管理ツールでもインストールできますが、今回はMonit 5.8のバイナリ版をインストールします。ダウンロードサイトから、該当するファイルをダウンロードし展開します。ここでは、展開したファイルを/usr/localに配置します。

展開したファイルのbin/monitを実行するとMonitが起動します。

ここでは、起動や挙動を確認しやすいように、フォアグランド(-I)かつ詳細モード(-v)で実行しています。
また、設定ファイルも明示的に指定しています(-c conf/monitrc)。設定ファイルを指定しないで起動しようとした場合は、決められた場所(~/.monitrc, /etc/monitrc, /usr/local/etc/monitrc, /usr/local/etc/monitrc ./monitrc)を探して、起動します。ファイルが無ければMonitは起動しません。

上記実行後、最後にMonit startedと出力されればOKです。(Ctrl+c で終了させることができます)


HipChatへの通知準備

HipChatへの通知は、HipChatが提供するコマンドラインツール(hipchat-cli)を使用します。hipchat-cliは、以下のように非常に簡単にHipChatにメッセージを送ることができます。

通知のサンプルで指定しているオプションは、-t は別途取得するAPI token、-r はルームID、-f はメッセージの発信者となります。
API tokenの取得に関しては、以前の記事(ZabbixのアラートをHipChatに通知する)で紹介していますので、そちらを参考にしてください。

ここでは、hipchat-cliを/optに配置します(hipchat_room_messageのPATHは/opt/hipchat-cli/hipchat_room_messageとなります)。


MonitによるZabbixサーバプロセスの監視

今回は、Monitによるプロセス監視の例として、Zabbixサーバプロセスを監視します。システム全体の監視はZabbixで行い、そのZabbixサーバプロセス自体の監視をMonitで行う、といったケースを考えます。MonitやZabbixが稼働するサーバ自体が落ちた場合に関しては、別の手段での監視(AWSであれば、CloudWatchなど)を考える必要があります。

設定は次にようになります。メールは、AWS SESSMTPインターフェースを利用して送信するようにしています。SESで作成したSMTP Credentialsの情報(<ses username>と<ses password>)に書き換えてください。また、HipChatの接続情報(<hipchat api token>と<hipchat room id>)も適宜変更して下さい。

設定のポイントは、次の点です。

  • プロセスダウンの場合、HipChatに通知する以外にもプロセス再起動の処理をさせるため、Zabbixサーバプロセスに関するプロセス監視(check process)を2つ用意している(名前はzabbix_server_hipchat、zabbix_serverとした)
  • Monitでのチェックは記述された順番に評価されるので、再起動処理がHipChatへの通知の後になるように、まずzabbix_server_hipchatでHipChatに通知するようにしている(先に再起動処理が実行されてしまうと、そこでプロセスが起動してしまうため、HipChatへの通知ができなくなる)
  • zabbix_server_hipchatでは、HipChatへの通知のみとなるようにアラートメールの送信は無効にしている(16行目)
  • アラートメールに関しては、zabbix_server_hipchatの後にチェックされるzabbix_serverで送信される
  • また、再起動ができず落ち続けた場合、そのままでは、チェックのたび(上記設定では60秒毎)にHipChatに通知し続けてしまうため、/var/tmp/hipchat.lockを用意して、通知済みかどうかの判定をしている
エンジニア採用中!私たちと一緒に働いてみませんか?