結合docker添加zabbix的skype告警方式

一 應用場景描述
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


_p_w_picpaths/skype-login.png




_p_w_picpaths/invite.png



_p_w_picpaths/settings.png



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

_p_w_picpaths/authorize.png


再重新啓動全部服務

~/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/

https://www.realvnc.com/download/

相關文章
相關標籤/搜索