设为首页 收藏本站
查看: 972|回复: 0

[经验分享] zabbix使用微信告警

[复制链接]

尚未签到

发表于 2019-1-18 09:57:01 | 显示全部楼层 |阅读模式
  在生产环境中,往往使用邮件和短信来进行告警,由于邮件经常被忽略或当垃圾邮件清理掉,起不到告警的作用,而短信告警价格费用又比较高,而我们又经常使用及时通信软件像微信等等,利用微信告警可以大幅度的降低运维成本。具体的使用微信告警步骤,如下:

  (一)申请微信企业号。

  (1)微信的第三方接口要求我们申请一个企业号来进行传送据,网站为:https://qy.weixin.qq.com/
  。具体安装一步步来进行注册。
  (2)在通讯录中添加组和成员:
  a,添加子部门,如图一
  b,添加成员,如图二
  

图一


图二

  注意:1,我们要把成员信息添加到组织部门,必须填写手机号+微信号+邮箱,这样别人扫码二维码才能正常的关注。
  2,记住子部门的ID和成员的账号
  (3)在应用中心创建应用(单价+号-->消息性应用-->添加应用的名称,功能,应用范围)。创建应用,是因为通过应用发送消息给部门成员,一定要记住应用的ID。如下图:

  (4)给部门设置管理员:
  设置--->功能设置---->权限管理---->新建管理组 管理员必须事先已经关注了企业号,并且已经设置好邮箱地址
  注意:本次我们需要记住上次标红的部分,CorpID和Secret,这两个参数的值,在我们调用参数的时候要用到。
  综上所述,我们需要提取如下信息:成员账号.组织部门的ID.应用ID.CorpID.Secret
  

  (二)如何调用微信接口:调用微信接口需要一个调用接口的凭证:access_toke 通过 :CropID 、Secret  才能获取到access_token,但是获取到的token有效期为7200s.微信企业号接口调试工具传送门:http://qydev.weixin.qq.com/debug


  (三)写shell脚本
       使用: curl -s -G  url           获取 AccessToken
           curl --data  url          传送凭证调用企业号接口
     zabbix会传递三个参数给脚本,$1是消息接收账号,$2报警标题,$3报警内容
  
#!/bin/bash
###send message from weixin for zabbix monitor
#author:lqb
#date:V1-2016-4-12
CropID='xxxxxx'
Secret='xxxxxx'
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
Gtoken=$(/usr/bin/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                      #企业号中的应用id
        local UserID=$1                       #部门成员id,zabbix中定义的微信接收者  
        local PartyID=2                        #部门id,定义了范围,组内成员都可接收到消息
        local Msg=$(echo "$@" | cut -d" " -f3-)  #过滤出zabbix传递的第三个参数
        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'
}
/usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL  由于微信企业号开放的端口有固定的格式现在:
  企业号支持的格式http://qydev.weixin.qq.com/wiki/index.php?title=消息类型及数据格式

  (四)将脚本放到zabbix默认的执行路径下,并赋予可执行权限。

[root@zabbix alertscripts]# mv weixin.sh /usr/local/zabbix/alertscripts/
[root@zabbix alertscripts]# chown zabbix.zabbix weixin.sh   
[root@zabbix alertscripts]# chmod +x weixin.sh  (五)在zabbix服务器端进行如下设置。
  (1)创建媒介。管理-->示警媒体类型-->创建示警媒体类型-->类型选脚本.
  (2)创建用户

(3)创建触发器动作发送的内容:


  (4)创建发送的方式。

  (六)收到的告警信息;

python脚本为:
#!/usr/bin/env python
#coding: utf-8
import time
import urllib,urllib2
import json
import sys
'''
1 空
2 空
3 内容
'''
"""
touser否成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送
toparty否部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
totag否标签ID列表,多个接收者用‘|’分隔。当touser为@all时忽略本参数
msgtype是消息类型,此时固定为:text
agentid是企业应用的id,整型。可在应用的设置页面查看
content是消息内容
safe否表示是否是保密消息,0表示否,1表示是,默认0
"""
# baseurl = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken'
# securl = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s' % access_token
class WeChatMSG(object):
    def __init__(self,content):
        self.gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken'     
        self.gettoken_content = {
                            'corpid' : 'wxdc26c4d41cb90b70',
                            'corpsecret' : 'D8Q-0d_6PKLhfJAST0BroOn2pgzb2BIVd0RUUNcu5HigsIXYppmApte1DiqQ1PFS' ,         
                            }
        self.main_content = {
                            "toparty":"1",
                            "agentid":"3",
                            "msgtype": "text",
                            "text":{
                            "content":content,
                                    }
                            }
    def get_access_token(self,string):
        token_result = json.loads(string.read())
        access_token=  token_result['access_token']
        return access_token.encode('utf-8')
    def geturl(self,url,data):
        data = self.encodeurl(data)
        response = urllib2.urlopen('%s?%s' % (url,data))
        return response.read().decode('utf-8')
    def posturl(self,url,data,isjson = True):
        if isjson:
            data = json.dumps(data)
        response = urllib2.urlopen(url,data)
        return response.read().decode('utf-8')
    def encodeurl(self,dict):
        data = ''
        for k,v in dict.items():
            data += '%s=%s%s' % (k,v,'&')
        return data
if __name__ == '__main__':
    if len(sys.argv) == 4:
        touser,notuse,content = sys.argv[1:]        
    else:
        print 'error segments, now exit'
        sys.exit()
    msgsender = WeChatMSG(content)
    access_token_response = msgsender.geturl(msgsender.gettoken_url, msgsender.gettoken_content)
    access_token =  json.loads(access_token_response)['access_token']
    sendmsg_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s' % access_token  
    print msgsender.posturl(sendmsg_url,msgsender.main_content)  注意:
  由于2017年6月3号中午微信企业号升级到企业微信参考(https://work.weixin.qq.com/api/doc#10087):
  微信插件
企业号现已升级为企业微信,微信插件继承原企业号的所有能力。
管理员可在企业微信管理后台新建应用、群发通知,成员扫码关注微信插件后,即可在微信中接收企业通知和使用企业应用。原先的脚步暂时用不了,发不了微信,现在需要进行如下修改:
(一)申请企业微信号
(1)申请地址:work.weixin.qq.com/login。具体申请步骤省略:
(2)进入企业微信号创建企业应用,并把AgentId和Secret值记下来。




  (3)进入我的企业,记下来CorpID的值

  (4)编写微信的过滤脚步
#!/bin/bash
# SCRIPT_NAME:  weixin.sh
# DESCRIPTION:  send message from weixin for zabbix monitor
# DATE :        2017-06-07
CropID='XXXXX'
Secret='XXXXX'
#获取access_token
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $10}')
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
function body () {
   local Meg=$(echo "$@" | cut -d" " -f3-)
   echo """{
    \"touser\" : \"@all\",
    \"msgtype\" : \"text\",   
    \"agentid\" : XXXXX,
    \"text\" : {           
        \"content\" : \"$Meg\"}   
}"""
}
/usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL
/usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL >> /tmp/weixin.log
  其他的和上边的一样。
  不过特别要注意:zabbix3.0版本以上的,要添加变量,如下图,否则收不到信息的。

  使用钉钉告警要先安装pip 具体参考:http://blog.运维网.com/liqingbiao/1749098。安装
  pip install request
  脚本为:
#!/usr/bin/python
import requests
import sys
import json
import datetime
import os
corpid = 'ding5cbc5f3ec1c44e36'
corpsec = 'thHja9f9FmulSGJavsRWzE4gUm0LZN6075HufdjDHvazEe7K-3yka3hUUIZKjMGU'
r = requests.get('https://oapi.dingtalk.com/gettoken?corpid='+corpid+'&corpsecret='+corpsec)
token = r.json()['access_token']
data = { "touser" : sys.argv[1],
        "msgtype":"text",
        "agentid":"120385392",
        "text": {"content": sys.argv[3]}        
}
print data
data = json.dumps(data)
headers = {'content-type': 'application/json'}
r = requests.post('https://oapi.dingtalk.com/message/send?access_token='+token,data=data,headers=headers)
print r.status_code
ZBLOG = open('/tmp/newdingding.log','a')
ZBLOG.write(str(datetime.datetime.now()))
ZBLOG.write('\n')
ZBLOG.write(str(sys.argv))
ZBLOG.write('\n')
ZBLOG.write(str(r.json()))
ZBLOG.write('\n')
ZBLOG.close()  最后,以上是基本步骤,非常感谢下善若火(http://wuhf2015.blog.运维网.com/8213008/1688614)本文大部分参考该文档,非常感谢。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-664681-1-1.html 上篇帖子: zabbix针对业务端口的监控 下篇帖子: CentOS 7安装部署zabbix3.4
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表