サーバのアラートをxymonでskypeにメッセージを出してほしかったので構築してみた。

サーバにGUI環境を入れない方針でSkypeはCentOS上でデーモンとして起動することを前提に進める。

まずはyumで必要なパッケージをインストールする。それぞれbaseリポジトリにはない場合もあるのでその場合はRPMforgeリポジトリからインストールする。
i386パッケージがだめだったらi686パッケージインストールしたらいけるかも。


yum install glib2.i386 qt4.i386 zlib.i386 alsa-lib.i386 libX11.i386 libXv.i386 libXScrnSaver.i386
yum install Xvfb
yum install python-devel
yum install x11vnc

Skype4Pyをインストールする
yum install python-setuptools
easy_install Skype4Py
easy_install ctypes


CentOS5系では2012/06/23現在最新版のSkype(4.*系)では正常に動作しなかったので古いバージョン(2.*系)を使う。
cd /opt
wget http://download.skype.com/linux/skype_static-2.1.0.47.tar.bz2
tar jxvf skype_static-2.1.0.47.tar.bz2
ln -s skype_static-2.1.0.47.tar.bz2 skype
ln -s /opt/skype /usr/share/skype
ln -s /opt/skype/skype /usr/bin/skype
skypeの起動スクリプトを配置する
wget https://raw.github.com/gist/557242/9c5b74769969efcf4e982949c0470561ed6c096c/launch-skype.sh
vi launch-skype.sh
//書き換える
# chkconfig: 345 80 10
# description: skype daemon ←この行を新しく追加.追加しないとchkconfigが認識しない。
# processname: skype
DAEMON_USER=skype
DBPATH=/var/db/skype
USERNAME=<BOTアカウント>
PASSWORD=<BOTアカウントのパスワード>
書き換えた起動スクリプトを/etc/init.dに保存
mv launch-skype.sh /etc/init.d/skype
chmod 755 /etc/init.d/skype
mkdir /var/db/skype /var/run/skype/ /var/log/skype/
chown skype:skype /var/db/skype /var/run/skype/ /var/log/skype/
/etc/init.d/skype start
chkconfig skype --add
chkconfig skype on
x11vncを起動しVNCでつなげるようにする
/usr/bin/x11vnc -display :20 -xauth /var/run/skype/Xauthority
UltraVNCなどでVNCでサーバに接続する
繋げるアドレス、ポート番号はx11vnc起動時に表示されるのでそこに接続する。
The VNC desktop is:      example.jp:0
PORT=5900
UltraVNCを起動しexample.jp::5900に接続しskypeのちょっとレトロなインターフェースが表示されればOK。
次にpythonをインタラクティブモードで起動する
env DISPLAY=:20 XAUTHORITY=/var/run/skype/Xauthority python
>>>import Skype4Py
>>>skype = Skype4Py.Skype(Transport='x11')
>>>skype.Attach()
>>>chat = skype.CreateChatWith('skypeID')
>>>chat.SendMessage('test')

のように入力していくとAttach()の時点でSkypeに新しいプログラムの通信の許可を聞かれブロックされるので「記憶する」の方にチェックを入れて許可をする
SendMessageでメッセージが送られればOK
メッセージの送信が確認できたので続けてxymonでアラートを出す設定をする

xymonのインストールはもうすでに色々なところで解説されてると思うので割愛
xymonサーバ側に設定ファイルを保存している前提で進めていく。
まずxymonサーバのalerts.cfgを編集する。

vi /usr/local/xymon/server/etc/alerts.cfg
HOST=* COLOR=yellow
     SCRIPT /usr/local/xymon/server/ext/skype-alert.sh BBALPHAMSG REPEAT=10 SERVICE=http,ssh,disk
アラート用のスクリプトを用意する。
vi /usr/local/xymon/server/ext/skype-alert.sh
env DISPLAY=:20 XAUTHORITY=/var/run/skype/Xauthority python /usr/local/xymon/server/ext/alert.py "$BBALPHAMSG"

xymonの実行ユーザでskypeに投稿出来るようXauthorityファイルの権限を変更する。
chmod 755 /var/run/skype/Xauthority

アラート用のスクリプトでSkypeに投稿する。
vi /usr/local/xymon/server/ext/alert.py
# coding: utf-8
import sys
import Skype4Py
import time
skype = Skype4Py.Skype(Transport='x11')
skype.Attach()
argvs = sys.argv
#特定のグループに投稿
rooms = [room for room in skype.Chats if room.Topic==u"投稿したいグループ名"]
rooms[0].SendMessage(argvs[1])

アラートで渡すパラメータは
BBALPHAMSGはアラートのメッセージ本体
BBCOLORLEVELはそのままアラートレベル(yellowとかredとか)
BBHOSTNAMEはホスト名
MACHIPは対象マシンのIP
BBSVCNAMEはアラートの鳴ってるサービス

BBALPHAMSGだけでも結構詳しく情報が出力されるので十分かも。

参考にさせていただいたサイト一覧
http://d.hatena.ne.jp/moriyoshi/20100926/1285517353">Linux上で動くSkype用のbotを作る方法 - muddy brown thang
http://d.hatena.ne.jp/mikeda/20110904/1315141966">HTTPでSkypeにBOT投稿(CentOS5編) - IT 東京 楽しいと思うこと
http://mogtechblog.blogspot.jp/2011/03/centos5skype_18.html">強欲と未練: CentOS5におけるSkypeのデーモン化
http://d.hatena.ne.jp/ykf/20091204/1259936884">twitterを利用したhobbit(xymon)のアラート - (yaruki ykf) => nil
http://www.yukun.info/blog/2008/07/python-command-line-arguments.html">Python: コマンドライン引数の取得 – sys.argv変数
http://www.skyhobbit.co.jp/xymon/index_c2_s5.html">Xymon監視
http://skype4py.sourceforge.net/doc/html/Skype4Py-module.html">Skype4Py公式リファレンス

他色々