您的位置:首页 > 运维架构 > Docker

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

2016-01-12 15:10 746 查看
一 应用场景描述

如果在工作中使用Skype即时聊天通讯软件作为沟通工具,那么利用Skype来接收zabbix报警信息就有必要。

二 部署Skype环境
在部署Skype环境的时候也折腾了不少时间,刚开始是想通过zabbix本机的CentOS6.4上安装Skype环境,但是CentOS6.4上安装Skype确实非常不容易,参考国外的资料都是在Ubuntu上面部署Skype。我们平时也不使用Ubuntu系统,清一色的CentOS。怎么办,怎么办?突然想起可以使用Docker创建一个Ubuntu server容器,再到这个容器里面去部署Skype环境,还可以将操作过程写成Dockerfile供以后直接使用。
利用Skype发送消息的思路是通过Skype的python api连接本地Linux上的Skype然后发送消息。这里选择使用一个基于Skype4Py的工具sevabot,它的好处就是可以通过HTTP方式来连接Skype发送消息。这样Skype就不需要和zabbix部署在一起了。

1.从docker hub上拉取镜像

#docker pull ubuntu:12.04


2.使用docker run根据ubuntu 12.04的镜像创建一个docker容器,改名为sevabot
#docker run -p 5900:5900 -p 5000:5000   --name sevabot    -it ubuntu:12.04 /bin/bash

3.安装Skype和sevabot运行所依赖的软件
#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环境
Skype需要在非root账号下运行,同时运行Skype需要配置VNC环境,Windows下可以通过vnc viewer连接到VNC环境。
#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/
https://www.realvnc.com/download/

本文出自 “Linux SA John” 博客,请务必保留此出处http://john88wang.blog.51cto.com/2165294/1734199
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: