障害発生時にZabbixサーバーから電話を掛けさせる方法

Zabbixサーバー障害発生時に自動的に電話を掛けさせる方法

Zabbixからの電話発信方法
http://www.slideshare.net/BlueSkyDetector/zabbixjp-study-20100730-2nd-session
実行にはX Window & Skypeが必要ですが、幸いなことに監視サーバーにはX Windowが入っています。

俺のZabbixがこんなに可愛いわけがない ~おかわり~
http://www.slideshare.net/sechiro/zabbix-6898674

CentOS6.3にSkypeをインストール

まずこれが大変でした。SkypeのLinux版はDebian/UbuntuかopenSUSE版しか配布されていません。CentOS用のRPMはなく、Skypeはオープンソースではないので、ソースコードも公開されていません。ダイナミックファイルが公式サイトに存在したので、CentOSではそちらを動かすしかないようです。

しかも、ダイナミックファイルは32bitでコンパイルされたものしかありません。監視サーバーは64bitOS。悪戦苦闘の末、64bitのX Windowsシステムで32bitのQtとGTKが動く環境を構築することに成功してSkypeの起動に成功しました。

$ sudo yum install -y glibc.i686 nss-softokn-freebl.i686 alsa-lib.i686 libXv.i686 \ libXScrnSaver.i686 libtiff.i686 glib2.i686 libSM.i686 libXrender.i686 fontconfig.i686 \ pulseaudio-libs.i686 alsa-plugins-pulseaudio.i686
$ export GTK2_RC_FILES="/etc/gtk-2.0/gtkrc
$ cd /tmp
$ curl -L -O http://download.skype.com/linux/skype_static-4.0.0.8.tar.bz2
$ cd /opt
$ tar xjvf /tmp/skype_static-4.2.0.11.tar.bz2
$ ln -s skype_staticQT-4.2.0.11 skype
$ ln -s /opt/skype /usr/share/skype
$ ln -s /usr/lib/libtiff.so.3 /usr/lib/libtiff.so.4
$ ln -s /opt/skype/skype /usr/bin/skype

Skype4Pyのインストール

Skypeを任意のアカウントでログインし、さらにそれをスクリプトから発信動作を制御できるようにSkype4PyというPythonのスクリプトをインストールします。

$ sudo yum install -y pythoon python-devel python-setuptools
$ easy_install Skype4Py
$ easy_install ctypes

まず、pythonから直接Skype4Pyを実行してみます。

$ python
>>> import Skype4Py
>>> skype = Skype4Py.Skype(Transport='x11')
>>> skype.Attach()

これでSkype側からSkype4Pyからの操作を受け付けるかの確認が出力されます。これを「常に許可」に設定します。

GitHubからalert-by-skypeをダウンロード

GitHubからSkype4PyをZabbixからコールするためのalert-by-skype.pyをダウンロードします。

$ sudo yum install -y git
$ git clone https://github.com/BlueSkyDetector/code-snippet.git
$ cp -rf code-snippet/alert-by-skype/alert-by-skype.py /var/lib/zabbix/
$ cp -rf code-snippet/alert-by-skype/error.wav /var/lib/zabbix/
$ chown zabbix:zabbix /var/lib/zabbix/alert-by-skype.py
$ chmod 755 /var/lib/zabbix/alert-by-skype.py

zabbixユーザーでalert-by-skypeを実行してみます。

$ ./alert-by-skype.py "+81-080-****-****"

そしたら、Skypeで発信動作が正常に稼働して、私の携帯に電話が掛かってきました。障害発生時に保守携帯にサーバーから自動的に電話を掛けることが可能です。あとはZabbixサーバーの管理画面で、電話発信をメディアとして追加してアクションを設定します。

運用方法として

アラートメールが多すぎてクリティカルな障害を見逃すと致命的すぎるので、「重度の障害」のトリガーの時にはアクションとしてアラートメールと同時にZabbixから保守携帯に電話を掛ける運用にしようと思います。それであれば、メールより確実に気づきますよね。

電話の音声は任意の音声ファイルを再生可能なのですが、とりあえず、クリティカルな障害時のデフォルトは「這いよれ!ニャル子さん」の「いつもニコニコあなたの隣に、這いよる混沌、ニャルラトホテプです♪」にしようと思いますw

原理自体は簡単なので、Nagiosサーバーなどでも緊急時に電話発信は可能かと思います。