您的位置:首页 > 其它

深入浅出Zabbix 3.0 -- 第十七章 扩展告警方式

2017-06-02 12:08 281 查看

第十七章 扩展告警方式

Zabbix支持多种告警方式(Media types),包括Email、Jabber、SMS和Ez Texting。Email告警方式用的最多,Jabber和Ez Texting在国内基本没有用的,SMS需要安装短信猫。也有公司提供商业的短信告警、电话告警等,需要额外支付服务费用,也有人通过139信箱实现伪短信告警效果。有没有其他更好的既省钱又快捷方便的告警方式呢?答案是有,那就是通过脚本扩展,使用微信或钉钉开放的API接口发送告警信息。

17.1 微信告警方式

17.1.1 注册微信公众平台企业号

使用微信告警之前,我们需要注册一个微信公众平台企业号并添加部门、应用和用户,步骤如下:1、 在https://qy.weixin.qq.com页面注册企业号。2、 登录企业号,在应用中心添加消息型应用,添加成功后点击该应用,在弹出页面中发现并记录应用ID以备后用。3、 在通讯录的组织架构中添加子部门,添加成功后点击该部门名称右侧的三角形图标,在弹出菜单中点击修改部门,在弹出页面中发现并记录部门ID以备后用。4、 点击通讯录中新添加的部门名称,新增成员或批量导入。5、 在设置的权限管理中新建一个普通管理组,需要在设置权限的页面中分别要对通讯录权限和应用权限中进行设置,允许前面添加的部门和应用可以查看或发消息的权限。创建成功后,在该组的信息中查找CorpID(企业号的标识)和Secret(管理组凭证密钥)并记录以备后用。

17.1.2 微信接口

调用企业号时,需使用Https协议、Json数据格式、UTF8编码,访问域名为https://qyapi.weixin.qq.com,数据包不需要加密。收集AccessToken请求说明:在每次主动调用企业号接口时需要带上AccessToken参数。AccessToken参数由CorpID和Secret换取。不同的Secret会返回不同的AccessToken。正常情况下AccessToken有效期为7200秒,有效期内重复收集返回相同结果。Https请求方式: GEThttps://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=id&corpsecret=secrect返回结果:正确的JSON返回结果:{"access_token": "accesstoken000001","expires_in": 7200 }错误的JSON返回结果:{"errcode": 43003,"errmsg": "require https" }消息发送接口请求说明:企业可以主动发消息给成员,每天可发的数量为:帐号上限数*30人次/天。调用接口时,使用Https协议、JSON数据包格式,数据包不需做加密处理。Https请求方式: POSThttps://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN返回结果:如果无权限,则本次发送失败;如果收件人不存在或未关注,发送仍然执行。两种情况下均返回无效的部分(注:由于userid不区分大小写,返回的列表都统一转为小写)。

17.1.3 数据格式

目前消息型应用支持文本、图片、语音、视频、文件、图文等消息类型。在Zabbix中我们主要使用文本消息类型。格式如下:{ "touser":"UserID1|UserID2|UserID3", "toparty": "PartyID1 | PartyID2 ", "totag": "TagID1 | TagID2 ", "msgtype":"text", "agentid": 1, "text": { "content":"Holiday Request For Pony(http://xxxxx)" }, "safe":0}参数说明如下表17-1所示:表 17-1
参数必须
touser成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送。
toparty部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数。
totag标签ID列表,多个接收者用‘|’分隔。当touser为@all时忽略本参数。
msgtype消息类型,此时固定为:text (支持消息型应用跟主页型应用)。
agentid企业应用的id,整型。可在应用的设置页面查看。
content消息内容,最长不超过2048个字节,注意:主页型应用推送的文本消息在微信端最多只显示20个字(包含中英文)。
safe表示是否是保密消息,0表示否,1表示是,默认0。

17.1.4 脚本程序

发送消息的脚本可以用任何你喜欢的编程语言编写,下面我们以bash编写发送脚本作为例子说明。# viweixin.sh
#!/bin/bash

CURL='/usr/bin/curl'
CROPID='wx2995e83e0f223bc'
SECRET='tRJmtAZdFgk_d9Ydadaae6PTZ5I3ai9v9YV6OqvC1XKJ4fh33XMfrLRg'
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CROPID&corpsecret=$SECRET"
GTOKEN=$($CURL -s -G $GURL | awk -F\"'{print $4}')
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$GTOKEN"

function body() {
local int APPID=1
local USERID=$1
local PARTYID=2
local MSG=$(echo "$@" | cut -d" " -f3-)
printf '{\n'
printf '\t"touser":"'"$USERID"\"",\n"
printf '\t"toparty":"'"$PARTYID"\"",\n"
printf '\t"msgtype": "text",\n'
printf '\t"agentid": "'" $APPID"\"",\n"
printf '\t"text": {\n'
printf '\t\t"content":"'"$MSG"\""\n"
printf '\t},\n'
printf '\t"safe":"0"\n'
printf '}\n'
}
$CURL --data-ascii "$(body $1 $2$3)" $PURL
在上面程序中定义的变量$APPID为企业号中应用的ID,$USERID为部门成员账号,对应Zabbix中宏变量{ALERT.SENDTO}定义的消息接收人,$PARTYID为部门的ID,$MSG为发送的消息内容,对应Zabbix中宏变量{ALERT.MESSAGE}定义的内容。

17.1.5 Zabbix中相关配置

首先将脚本文件保存到 /usr/lib/zabbix/alertscripts(或zabbix_server.conf中配置的AlertScriptsPath参数指定的位置)目录中,并设置相应权限。# chown zabbix:zabbixweixin.sh# chmod +x weixin.sh在Zabbix前端页面中,点击Administration--> Media types,点击页面右上角的Create media type按钮创建新的告警方式。如下图17-1所示。

图 17-1在脚本参数中必须添加{ALERT.SENDTO}、{ALERT.SUBJECT}和{ALERT.MESSAGE}宏变量,其他参数根据需要添加。然后点击Administration--> Users,点击用户名称打开用户配置页面,在Media标签中添加告警方式。如下图17-2所示。

图 17-2配置trigger,如下图17-3所示。

图 17-3配置action,如下图17-4所示。

图 17-4完成上面的配置后,测试微信告警的效果如下图17-5所示。

图 17-5

17.2 钉钉告警方式

17.2.1 注册钉钉

首先要到https://oa.dingtalk.com/ 完成企业注册,具体过程请参考钉钉官网。注册完成后,需要完成下面的设置:在通讯录中添加部门(例如运维部),添加成功后打开新建的部门,并在部门中添加员工。部门ID从浏览器地址栏中收集,在地址栏中链接的末尾你会发现类似deptId=15973529的信息,这个deptid就是部门ID,记录以备后用。每个新建员工的工号也要记录,后面会用到。
在微应用中新建一个应用(例如监控告警),在这个应用的设置中找到AgentID记录下来以备后用。

钉钉接口

当企业应用服务器调用钉钉开放平台接口时,需使用https协议、Json数据格式、UTF8编码,访问域名为https://oapi.dingtalk.com。在每次主动调用钉钉开放平台接口时需要带上AccessToken参数。AccessToken参数由CorpID和CorpSecret换取。CorpID是企业在钉钉中的标识,每个企业拥有一个唯一的CorpID;CorpSecret是企业每个应用的凭证密钥。CorpID及CorpSecret可以在钉钉为企业提供的管理后台中找到,由钉钉自动分配。POST请求请在HTTP Header中设置 Content-Type:application/json,否则接口调用失败。正常情况下AccessToken有效期为7200秒,有效期内重复收集返回相同结果,并自动续期。收集AccessToken请求说明:Https请求方式: GEThttps://oapi.dingtalk.com/gettoken?corpid=id&corpsecret=secrect返回结果:正确的JSON返回结果:{"errcode": 0, "errmsg": "ok","access_token": 6e6f7s8df8s"}错误的JSON返回结果:{"errcode": 43003,"errmsg": "require https" }每个企业调用单个接口的频率不可超过1500次/分。企业可以主动发消息给员工,消息量不受限制。企业会话消息发送主体是企业,体现在接收方手机上的联系人是你填写的agentid对应的微应用。调用接口时,使用Https协议、JSON数据包格式。消息发送接口请求说明:Https请求方式: POSThttps://oapi.dingtalk.com/message/send?access_token=ACCESS_TOKEN返回说明如果收件人、部门或标签不存在,发送仍然执行,但返回无效的部分。

17.2.3 数据格式

目前支持text、image、voice、file、link、OA消息类型。每个消息都由消息头和消息体组成,企业会话的消息头由touser,toparty,agentid组成。在Zabbix中我们主要使用text消息类型。格式如下:{“touser”: ”UserID1|UserID2|UserID3”,“toparty”: ”PartyID1|PartyID2”,“agented”: “1”,"msgtype": "text", "text": { "content":"张三的请假申请" }}表 17-2
参数必须类型
touserString
topartyString
agentidString
msgtypeString
contentString

17.2.4 脚本程序

下面我们以bash编写发送脚本作为例子说明。# vi dingtalk.sh#!/bin/bashCURL='/usr/bin/curl'CROPID='ding5a72160550db3'SECRET='bGIQXCmAgGQHA2qoZaZbDhdcLyB49dLHtOh9t9UcySayIpToah64GIyjeV9'GURL="https://oapi.dingtalk.com/gettoken?corpid=$CROPID&corpsecret=$SECRET"GTOKEN=$($CURL -s -G $GURL | awk -F\" '{print $4}') PURL="https://oapi.dingtalk.com/message/send?access_token=$GTOKEN" function body() { local APPID=”37059344” localPARTYID="15973529" local USERID="$1" local MSG=$(echo"$@" | cut -d" " -f3-) printf '{\n' printf'\t"touser": "'"$USERID"\"",\n" printf'\t"toparty": "'"$PARTYID"\"",\n" printf'\t"agentid": "'"$APPID"\"",\n" printf'\t"msgtype": "text",\n' printf'\t"text": {\n' printf'\t\t"content": "'"$MSG"\""\n" printf '\t},\n' printf '}\n'}PRESULT=$($CURL --header"Content-Type:application/json;charset=UTF-8" --data-ascii"$(body $1 $2 $3)" $PURL)

17.2.5 Zabbix中相关配置

首先将脚本文件保存到/usr/lib/zabbix/alertscripts(或zabbix_server.conf中配置的AlertScriptsPath参数指定的位置)目录中,并设置相应权限。# chown zabbix:zabbix dingtalk.sh# chmod +x dingtalk.sh在Zabbix前端页面中,点击Administration--> Media types,点击页面右上角的Createmedia type按钮创建新的告警方式。如下图17-6所示。

图 17-6在脚本参数中必须添加{ALERT.SENDTO}、{ALERT.SUBJECT}和{ALERT.MESSAGE}宏变量,其他参数根据需要添加。然后点击Administration --> Users,点击用户名称打开用户配置页面,在Media标签中添加告警方式。如下图17-7所示。

图 17-7配置trigger,如下图17-8所示。

图 17-8配置action,如下图17-9所示。

图 17-9完成上面的配置后,测试钉钉告警的效果如下图17-10所示。

图 17-10


出自http://ustogether.blog.51cto.com/8236854/1931611,如需转载请与作者联系。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  zabbix