zabbix使用微信告警

简介:

  在生产环境中,往往使用邮件和短信来进行告警,由于邮件经常被忽略或当垃圾邮件清理掉,起不到告警的作用,而短信告警价格费用又比较高,而我们又经常使用及时通信软件像微信等等,利用微信告警可以大幅度的降低运维成本。具体的使用微信告警步骤,如下:


 (一)申请微信企业号。

(1)微信的第三方接口要求我们申请一个企业号来进行传送据,网站为:https://qy.weixin.qq.com/

。具体安装一步步来进行注册。

(2)在通讯录中添加组和成员:

   a,添加子部门,如图一

   b,添加成员,如图二

wKioL1cMrGejRaPEAACnSRHoVoM900.png  

图一

wKioL1cMrc3RTeVjAAE4o6nvRPc132.png

图二

注意:1,我们要把成员信息添加到组织部门,必须填写手机号+微信号+邮箱,这样别人扫码二维码才能正常的关注。

    2,记住子部门的ID和成员的账号

 

 (3)在应用中心创建应用(单价+号-->消息性应用-->添加应用的名称,功能,应用范围)。创建应用,是因为通过应用发送消息给部门成员,一定要记住应用的ID。如下图:

wKiom1cMr4bSD5YJAAD7Tm296vU505.png


 (4)给部门设置管理员:

设置--->功能设置---->权限管理---->新建管理组 管理员必须事先已经关注了企业号,并且已经设置好邮箱地址wKioL1cMsVex3u3mAADfKXB7JrM941.pngwKiom1cMsSCjVg1yAAEjEg-ZnfU178.png

注意:本次我们需要记住上次标红的部分,CorpID和Secret,这两个参数的值,在我们调用参数的时候要用到。


综上所述,我们需要提取如下信息:成员账号.组织部门的ID.应用ID.CorpID.Secret 


 

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


wKiom1cMtImC67_XAADNSFj2FM8536.png

wKioL1cMtRqgXkmJAAJqiLE5Nvk487.jpg


(三)写shell脚本

       使用: curl -s -G  url           获取 AccessToken

           curl --data  url          传送凭证调用企业号接口

   zabbix会传递三个参数给脚本,$1是消息接收账号,$2报警标题,$3报警内容

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/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=消息类型及数据格式

wKiom1cMtuaAI0i6AAJqiLE5Nvk715.jpg

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

1
2
3
[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)创建媒介。管理-->示警媒体类型-->创建示警媒体类型-->类型选脚本.

wKiom1cMuKCBDBy9AAEX0WHDwk8058.png  (2)创建用户

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

wKiom1cMueXwBf4BAAC2o1t4OV4979.png

 (4)创建发送的方式。

wKiom1cMup2yYvlaAAD8WsVUjwU713.png


(六)收到的告警信息;

wKiom1cMu07zlE0lAACF2m1BLGM315.png






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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值记下来。

wKioL1k3Zejwww8qAACoaGtUI64937.png

wKiom1k3ZqGTagReAACX0n6inGY042.pngwKioL1k3ZwTwaxK_AAD6ZUeVXoM022.png


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

wKioL1k3Z7Th2wRrAAEGIKggyrY164.png


(4)编写微信的过滤脚步

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/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版本以上的,要添加变量,如下图,否则收不到信息的。

wKioL1fP0FuTU-ZQAABXDDKJVQU159.png-wh_50





使用钉钉告警要先安装pip 具体参考:http://blog.51cto.com/liqingbiao/1749098。安装

pip install request

脚本为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/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.51cto.com/8213008/1688614)本文大部分参考该文档,非常感谢。


本文转自 lqbyz 51CTO博客,原文链接:http://blog.51cto.com/liqingbiao/1763073


相关文章
|
监控 机器人 Python
Zabbix实现钉钉群告警
Zabbix实现钉钉群告警
|
5月前
|
监控
一文吃透企业级elk技术栈:9. zabbix结合logstash告警
一文吃透企业级elk技术栈:9. zabbix结合logstash告警
|
8月前
|
Prometheus Cloud Native Linux
Linux|centos7下部署安装alertmanager并实现邮箱和微信告警(基础篇---三)
Linux|centos7下部署安装alertmanager并实现邮箱和微信告警(基础篇---三)
467 0
|
8月前
|
Prometheus 监控 Cloud Native
Linux|centos7下部署安装alertmanager并实现邮箱和微信告警(基础篇---二)
Linux|centos7下部署安装alertmanager并实现邮箱和微信告警(基础篇---二)
382 0
|
监控 NoSQL Redis
【Zabbix】Zabbix微信告警配置演示(下)
【Zabbix】Zabbix微信告警配置演示(下)
162 0
|
监控
【Zabbix】Zabbix微信告警配置演示(上)
【Zabbix】Zabbix微信告警配置演示
176 0
|
监控 机器人 定位技术
ZABBIX4.0 微信告警
ZABBIX4.0 微信告警
174 0
ZABBIX4.0 微信告警
|
运维 监控 定位技术
ZABBIX4.0配置邮箱告警信息发送给用户组
ZABBIX4.0配置邮箱告警信息发送给用户组
227 0
ZABBIX4.0配置邮箱告警信息发送给用户组
|
监控 小程序 Python
Zabbix5.0配置企业微信告警
如果需要用公司的企业微信来做告警信息的接收者,那么这个步骤就可以省略了。</font>** >如果是在公司,监控自定义服务,需要部分的人员都能看到,哪最好就是去找公司企业微信的创建人,因为后面会用到企业ID。
544 0
Zabbix5.0配置企业微信告警
|
监控 机器人 Linux
10分钟帮你搞定Zabbix监控平台告警推送到钉钉群
10分钟帮你搞定Zabbix监控平台告警推送到钉钉群
601 0
10分钟帮你搞定Zabbix监控平台告警推送到钉钉群