一、背景
随着目前企业沟通协调均可在钉钉群内沟通,何不使用将日常不管是阿里云实例的告警信息,或自定义脚本监控的信息通过钉钉机器人发送至钉钉群,从而实现及时通知和信息发布。
相比微信告警需要配置企业号还需要用户关注,较为麻烦,钉钉消息可以直接调用钉钉机器人的webhook直接发送消息,比较简单,在此简单记录下,可供参考借鉴。
二、钉钉群消息
利用钉钉机器人发送阿里云告警信息到钉钉群
云监控具有钉钉群接收报警通知的功能,您配置钉钉群接收报警通知。
已经创建的报警规则,只需要在联系人中增加钉钉机器人的回调地址,就可以收到钉钉群报警,不需要修改报警规则。
2.1在钉钉内发起群聊或创建群组
2.2 创建钉钉机器人
添加自定义机器人,记录webhook值
2.3 配置阿里云告警联系人
将第一步中创建好的钉钉机器人webhook地址添加在联系人中,该联系人所在联系组对应的报警规则即可通过钉钉群接收报警通知。
- 登录云监控控制台,进入联系人页面。
-
点击编辑在已有联系人中添加钉钉机器人的回调地址,或者点击新建联系人,创建包含钉钉机器人的联系人
2.4 配置告警模版
登录阿里云云监控后台-主机监控-告警模版-新建告警规则
2.5 查看告警消息
三、自定义告警
3.1 钉钉群及钉钉机器人创建见2.1、2.2
3.2 python调用发送消息
利用python的urllib2的Request和urlopen方法实现调用钉钉机器人的webhook来发送message,由于python写的不好,简单实现发送消息功能。
#!/bin/env python import json,urllib2,sys #钉钉机器人webhook变量 WebHook="https://oapi.dingtalk.com/robot/send?access_token=8d0905d37edf9e91c33de8f2c60f4e1e3d1e99b765c2d2e46c59cff7e75a9c5a" #获取第一个参数为message def get_message(): if len(sys.argv) < 2: print "Usage:%s context." % sys.argv[0] else: context = sys.argv[1] return context #处理消息 def do_message(context): message = { "msgtype":"text", "text":{ "content":context } } return message #调用发送消息 def send_reques(webhook): context = get_message() message = do_message(context) json_dump = json.dumps(message) req_con = urllib2.Request(webhook,json_dump) req_con.add_header('Content-Type', 'application/json') response = urllib2.urlopen(req_con) if __name__ == '__main__': send_reques(WebHook)
此时可以利用
./dingding.py "消息内容"
来发送消息到钉钉群了3.3 简单利用其结合shell监控脚本
在此简单结合一个监控***隧道的脚本来测试,可根据自己生成业务来做。
#!/bin/bash #mail:xuel@anchnet.com IP=10.10.10.2 dir="/netdir/" if [ ! -d ${dir} ];then mkdir -p ${dir} fi echo 1 > ${dir}ping.lock while true do Time=`date +%F` TIME="${Time} 23:59" if [ "${data}" == "${TIME}" ];then mkdir ${dir}${Time} && mv ${dir}ping2.log ${dir}${Time}-ping2.log mv ${dir}${Time}-ping2.log ${dir}${Time} fi find ${dir} -mtime +7 -type d -exec rm -rf {} \; find ${dir} -mtime +7 -name "*-ping2.log" -exec rm -rf {} \; data=`date +%F' '%H:%M` data1=`date +%F' '%H:%M:%S` echo "------------${data1}---------------">>${dir}ping2.log ping -c 10 ${IP} >>${dir}ping2.log if [ $? -eq 1 ];then STAT=`cat ${dir}ping.lock` if [ ${STAT} -eq 1 ];then context1="***监控告警通知\nfrom 公有云(172.16.2.22) ping 金融云(10.10.10.2)中断\n请检查深信服***!\nTIME:${data1}" msg=`echo -e ${context1}` /usr/bin/python /netdir/dingding.py "${msg}" /usr/bin/python /netdir/GFweixin.py xuel *** "GLP from 公有云(172.16.2.22) ping 金融云(10.10.10.2)中断,请检查深信服***! TIME:${data1}" echo 0 > ${dir}ping.lock else continue fi else STAT=`cat ${dir}ping.lock` if [ ${STAT} -eq 0 ];then context1="***监控恢复通知\nfrom 公有云(172.16.2.22) ping 公有云(10.10.10.2)恢复\n厉害了***!\nTIME:${data1}" msg=`echo -e ${context1}` /usr/bin/python /netdir/dingding.py "${msg}" /usr/bin/python /netdir/GFweixin.py xuel *** "GLP from 公有云(172.16.2.22) ping 公有云(10.10.10.2)恢复 \n TIME:${data1}" echo 1 > ${dir}ping.lock else continue fi fi done
相关脚本可以查看:URL
3.4 查看告警
转载于:https://blog.51cto.com/kaliarch/2061429