一 應用場景描述
html
若是在工做中使用Skype即時聊天通信軟件做爲溝通工具,那麼利用Skype來接收zabbix報警信息就有必要。python
二 部署Skype環境linux
在部署Skype環境的時候也折騰了很多時間,剛開始是想經過zabbix本機的CentOS6.4上安裝Skype環境,可是CentOS6.4上安裝Skype確實很是不容易,參考國外的資料都是在Ubuntu上面部署Skype。咱們平時也不使用Ubuntu系統,清一色的CentOS。怎麼辦,怎麼辦?忽然想起可使用Docker建立一個Ubuntu server容器,再到這個容器裏面去部署Skype環境,還能夠將操做過程寫成Dockerfile供之後直接使用。c++
利用Skype發送消息的思路是經過Skype的python api鏈接本地Linux上的Skype而後發送消息。這裏選擇使用一個基於Skype4Py的工具sevabot,它的好處就是能夠經過HTTP方式來鏈接Skype發送消息。這樣Skype就不須要和zabbix部署在一塊兒了。git
1.從docker hub上拉取鏡像
github
#docker pull ubuntu:12.04
2.使用docker run根據ubuntu 12.04的鏡像建立一個docker容器,更名爲sevabotweb
#docker run -p 5900:5900 -p 5000:5000 --name sevabot -it ubuntu:12.04 /bin/bash
3.安裝Skype和sevabot運行所依賴的軟件docker
#apt-get install net-tools ping -y #apt-get update #apt-get install -y xvfb fluxbox x11vnc dbus libasound2 libqt4-dbus libqt4-network libqtcore4 libqtgui4 libxss1 libpython2.7 libqt4-xml libaudio2 libmng1 fontconfig liblcms1 lib32stdc++6 lib32asound2 ia32-libs libc6-i386 lib32gcc1 nano python-virtualenv #wget http://www.skype.com/go/getskype-linux-beta-ubuntu-64 -O skype-linux-beta.deb #dpkg -i skype-linux-beta.deb #apt-get install -y python-gobject-2 #apt-get install -y git curl
4.設置Skype和遠程VNC環境shell
Skype須要在非root帳號下運行,同時運行Skype須要配置VNC環境,Windows下能夠經過vnc viewer鏈接到VNC環境。ubuntu
#adduser --disabled-password --gecos "" skype #su - skype #git clone git://github.com/opensourcehacker/sevabot.git SERVICES="xvfb fluxbox skype" ~/sevabot/scripts/start-server.sh start ~/sevabot/scripts/start-vnc.sh start
在本地Windows下經過Real VNC Viewer鏈接到VNC,IP應該是Docker主機的IP
5.安裝Sevabot
在切換到skype用戶後
$cd sevabot/
$virtualenv venv
$ . venv/bin/activate
$python setup.py develop
$cp settings.py.example settings.py
編輯settings.py這個文件,更改幾個參數
SHARED_SECRET 設置經過HTTP方式發送消息的密碼
HTTP_HOST sevabot的HTTP接口監聽的IP地址,這裏填Docker容器的內網IP就好了,應爲Docker主機經過端口映射會轉發到這個IP
HTTP_PORT 默認的監聽端口是5000
而後啓動sevabot
SERVICES=sevabot ~/sevabot/scripts/start-server.sh start
經過VNC容許Skype4Py鏈接到Skype
再重新啓動全部服務
~/sevabot/scripts/start-server.sh restart 而後經過 訪問sevabot
在Shared secret框內輸入密碼後點擊Show chat list按鈕會列出每一個聯繫人的Chat id和帳號名稱 前提是你必須把這些帳號添加爲好友才行 而後就能夠經過頁面向好友發送Skype消息了,還能夠打電話喲
三 爲zabbix添加skype報警
進入到zabbix的自定義報警腳本目錄
cd ~/zabbix/share/zabbix/alertscripts
建立一個名爲sendskype.sh的文件
#!/bin/bash # # Example shell script for sending a message into sevabot # # Give command line parameters [chat id] and [message]. # The message is md5 signed with a shared secret specified in settings.py # Then we use curl do to the request to sevabot HTTP interface. # # # Chat id comes as Send To parameter from Zabbix chat=$1 # Message is the second parameter msg=${@:2} # Our Skype bot shared secret secret="xxxx" # The Skype bot HTTP msg interface msgaddress="http://172.xxx.xxx.xxx:5000/msg/" md5=`echo -n "$chat$msg$secret" | md5sum` #md5sum prints a '-' to the end. Let's get rid of that. for m in $md5; do break done curl $msgaddress -d "chat=$chat&msg=$msg&md5=$m"
$1是須要發送消息的接收方和這個skype機器人創建聊天時生成的ID,這個ID是惟一的,而且sevabot還經過MD5對ID進行了加密處理. 能夠經過sevabot的代碼進行了解 def get_chat_id(chat): """ Get unique internal persistent id of the chat object. All ids are URL safe. This is the same id as in the web interface. :param chat: Skype4Py.chat.Chat instance """ m = hashlib.md5() m.update(chat.Name) return m.hexdigest() 這裏順便提一下,幹運維雖然不必定要求像開發那樣熟悉業務開發,可是常規的工具開發能力和看各類代碼的能力仍是須要具有的,特別是涉及到一些本身看文檔不是太清楚的時候,就能夠直接看代碼幫助本身理解. 腳本中${@:2}使用的是shell的高級變量,表示腳本運行的第2個參數到後面的參數,既是須要經過這個腳本發送的內容 # chmod a+x sendskype.sh
腳本測試
# sh sendskype.sh 35257268e691e0cc458976e9bab83a9e this is a test message from sevabot
這時就能夠在這個ID對應的接收方那端收到如下消息:
this is a test message from sevabot
腳本測試經過後就能夠在zabbix的主頁面配置skype報警功能了
選擇Administrator-->Media types-->Create media type
Name填skype
Type選擇Script
Script name填sendskype.sh
Enabled 打勾
再選擇Configuration-->Actions-->Triggers
而後把Report problems to Zabbix administrators via Email這個克隆一下,把Email相關的換成改由skype發送就好了
好,大功告成。如今就能夠經過skype接收zabbix報警消息了
四 擴展問題
有兩個能夠擴展的問題須要解決,一個就是把sevabot的部署過程寫成Dockerfile,另一個問題就是經過shell腳本發送消息給skype的時候,skype接收後顯示成爲一行,最好是可以分行顯示。
參考文檔:
https://github.com/Skype4Py/Skype4Py
https://github.com/opensourcehacker/sevabot
https://sevabot-skype-bot.readthedocs.org/en/latest/ubuntu.html
http://www.qxs.ch/2011/01/07/skype-instant-messages-from-zabbix/