Tech Sketch Bucket of Technical Chips by TIS Inc.

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

Pocket

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

eXcale開発チームの西谷(@Keisuke69)です。
前回のエントリで監視システムが検知したアラートを開発者向けチャットサービスであるHipChatに通知するようにしていると書きました。
我々は監視システムとしてZabbixを利用しています。
というわけで、今回はZabbixからHipChatにアラートを通知する方法を紹介したいと思います。

Zabbixとは

今更説明することもないほど有名ですが、ZabbixとはラトビアにあるZabbix SIA社により開発されているサーバやネットワークを監視するためのソフトウェアです。
オープンソースソフトウェアとして提供されており、機能的には商用の監視製品にも引けを取りません。また、必要に応じて商用サポートも受けることができます。

なお、Zabbixに関しましては弊社(TIS株式会社)の池田がコミュニティ活動に取り組ませて頂いており、先日書籍も出版しましたのでこちらもあわせてどうぞ。
Zabbixに限らず昨今のシステム監視全般に関して網羅的に解説されています。

Zabbix統合監視徹底活用 ~複雑化・大規模化するインフラの一元管理 (Software Design plus)

HipChatとは

前回のエントリでも取り上げたチャットサービスです。
開発者向けの各種プロダクト、サービスを提供しているAtlassian社により提供されています。
もちろんプライベートに利用することができ、APIが用意されていることから各種ツールからの連携も容易です。

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

今回はZabbixが検知したアラートをHipChatに通知します。HipChatが提供するコマンドラインツールを利用して、ZabbixのアクションとしてHipChatに通知するコマンドを登録します。
では、具体的に見て行きたいと思います。

まずはHipChatのコマンドラインツールであるhipchat-cliをZabbixサーバが稼働するサーバ上に導入してください。
hipchat-cliはGithubで公開されていますので任意のディレクトリにクローンしてください。ここでは/optにクローンしました。

次にAPIでメッセージ送信などをするにあたって必要となるトークンを作成します。このトークンはGroup adminのユーザじゃないと作れません。
HipChatのサイトにログインし、ヘッダのGroup admin → APIと進みます。Create new tokenでTypeを選んでCreateします。
Typeは今回はAdminにしてますがNotificationでもいいかもしれません。Labelは何も入力しなくても大丈夫です。

コマンドラインを利用してHipChatにメッセージ通知するにはhipchat-cliに含まれるhipchat_room_messageというコマンドに送りたいメッセージをecho等からパイプで渡します。
また、送る際には先ほど取得したトークンやルームのIDが必要となります。
試しに送ってみたいと思います。

ルームIDはルーム名ではなく6桁の数字からなるIDですので注意してください。-fオプションではメッセージの送信元の名称を指定しています。
基本的には上記のコマンドをZabbixに登録する形になります。
ではZabbixに登録してみます。

ZabbixのWebインターフェースにログインしてください。
ログインしたら上部のメニューから"Configuration" → "Actions"と進みます。

右上にある"Create Action"をクリックしてActionの作成画面に進みます。
任意のName(ここではHipChat Notificationとしています)を設定し、その他の値はデフォルトのまま"Operations"タブを開いてください。

"new"をクリックします。

以下のように設定します。

OperationType: Remote commandを選択
Execute on: Zabbix serverを選択

最後にCommandsに以下のコマンドを記述します。

echoコマンドの引数に通知の際に送信したいメッセージ本文を指定し、hipchat_room_messageコマンドへパイプで渡します。
トークンやルームIDは先ほどと同じものを指定してください。ここではその他のオプションとして以下のように設定しています。

-c: HipChatのクライアントでメッセージが表示されるときの背景色を指定できます。指定できるのはred、yellow、green、purple、randomでデフォルトはyellowです。
-m: 送るメッセージのフォーマットを指定します。デフォルトはhtmlで、そのままだと本文に@allとか指定してもメンションとしては認識されないみたいです。従ってここではtextに指定して@allあてに送信しています。
-n: 通知を行うかです。今回は行います。

これで保存します。

以降、アラートの発生時にはHipChatへと通知されます。

以上、今回はZabbixからHipChatへの通知設定を行いましたが、今回の方法はその他にも応用できますのでいろいろと試してみてください。

エンジニア採用中!私たちと一緒に働いてみませんか?