钉钉webhook实现告警通知
之前的运维告警多通过SMS、mail 等方式通知到相应的人员。不过虽着 IM 和手机APP的发展,很多告警也会发送到IM软件上去。目前比较常用的是发送到微信和钉钉上。不过微信发送时,需要开通企业公众号,比较麻烦。而钉钉在今年更新的机器人功能比较易用,只要启用的有钉钉,可以通过官方提供的API,可以很方便的post数据到相应的接收人 。其支持的机器人类型也比较丰富,除支持自定义webhook发送消息外,其还有gitlab、github、jira等机器人。
一、创建自定义webhook
通过桌面版或手机APP的钉钉发起聊天,选取相应的联系人创建聊天:
点选右上角的机器人
这里选取自定义webhook
点击创建后,指定机器人名称并编辑头像后,会后成一个hook地址 。记得复制下来该hook地址。其包含唯一的access tokenid 。
二、python post调用
当前自定义机器人支持文本(text)、连接(link)、markdown(markdown)等消息类型,需要注意的是发起POST请求时,必须将字符集编码设置成UTF-8,并且指定header的类型为json格式---注意字符和header不能少,少了无法正常发送消息。具体可以参考官方文档 。
这里以text类型为例,如下:
1#code from www.361way.com
2#coding: utf-8
3import json,urllib2
4url = "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxx"
5header = {
6 "Content-Type": "application/json",
7 "charset": "utf-8"
8 }
9data = {
10 "msgtype": "text",
11 "text": {
12 "content": "www.361way.com告警测试"
13 },
14 "at": {
15 "isAtAll":True # at为非必须
16 }
17 }
18sendData = json.dumps(data)
19request = urllib2.Request(url,data = sendData,headers = header)
20urlopen = urllib2.urlopen(request)
21print urlopen.read()
当然在python下可以使用的post请求模块比较多,也可以使用requests模块进行操作。其用法如下:
1req = requests.post(url, data=String_textMsg, headers=HEADERS)
成功调用后示例如下:
三、zabbix告警发送钉钉
将上面的代码修改下,我们将tokenid、suject、message做为参数,具体脚本如下:
1#code from www.361way.com
2#coding=utf-8
3import json,urllib2,sys
4def usage():
5 '''usage'''
6 print 'Usage: %s %s %s %s' %(sys.argv[0],'tokenid','Subject','Content')
7 sys.exit()
8def dingding(tokenid,subject,message):
9 url = "https://oapi.dingtalk.com/robot/send?access_token=" + tokenid
10 header = {
11 "Content-Type": "application/json",
12 "charset": "utf-8"
13 }
14 data = {
15 "msgtype": "text",
16 "text": {
17 "content": subject + '\n' + content
18 }
19 }
20 sendData = json.dumps(data)
21 request = urllib2.Request(url,data = sendData,headers = header)
22 urlopen = urllib2.urlopen(request)
23 return urlopen.read()
24def main():
25 if len(sys.argv) != 4:
26 usage()
27 tokenid = sys.argv[1]
28 subject = sys.argv[2]
29 message = sys.argv[3]
30 dingding(tokenid, subject,message)
31if __name__ == "__main__":
32 main()
将上面的脚本放到zabbix_server.conf中的AlertScriptsPath目录下,并给其可执行权限。并在zabbix的web管理界面找到报警媒介类型---创建媒介类型---脚本---并给脚本创建参数,指定传的三个参数:{ALERT.SENDTO}、 {ALERT.SUBJECT} 、{ALERT.MESSAGE}。
并新增一个zabbix用户,指定其接收人为tokenid
接下来在配置---动作中创建新的动作或编辑已存在的动作,指定触发条件,并选择发送到刚刚的用户,选择使用的脚本为刚刚创建的ding宕机告警。
四、其他
由于钉钉机器人配置起来比较便捷,其适用于自动化巡检、svn和git的提交、现网版本发布等各种场景。同时由于官方提供的便捷示例,也可以很方便的创建富文本消息。官方同时提供了java和php调用的demo 。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/dingding-zabbix-webhook/5526.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.