二、钉钉配置
1、说明
钉钉是阿里云推出的即进聊天通讯工具;通常在企业里会加入;我们这边不介绍企业钉钉的注册,只从运维人员加入到企业后,创建群组;再创建机器人;再将机器人api封装成脚本 ,让其他程序,如zabbix调用,以此用来报警;要接收报警信息的人员,加到群组中,就能收到报警信息;
2、创建群组
创建钉钉群组之前需要我们先用手机号注册钉钉账号;按手机平台下载安装好钉钉app;登录钉钉并创建群组,注册和下载安装登录钉钉这里不详述了;
比如我这里创建了一个游戏运维组的群组如下:
3、创建钉钉机器人
创建好群组后,我们点击群组右上角 弹出窗口 "群设置" → 智能群助手 如图
在智能群助手面点击 "添加机器人" 在添加机器人 右侧 如图:
选择自定义机器人
添加机器人 给机器人取个名字如"运维小哥" ;
说明: 安全设置的作用就是在调用时需要加的限制;有三种,分别是自定义关键词、加签、IP地址段
其中加签是通过算法,算出一段类似密钥段放到机器接口中进行调用;
ip地址段就是限制机器人接口能从那些地址发出;
最常用的就是自定义关键词:这个作用是第三方脚本调用机器人接口发通知信息时,内容必须要包含的关键字,
关键词最多添加10个,这里添加了如下:
选择完成;针对群组的机器人 "运维小哥" 就添加好了;
4、钉钉机器人接口测试
配置好钉钉机器人,就得到了一个WebHook 地址,这个就是调用机器人发送通知的接口
找一个Linux命令行通过curl进行测试:注意这里必须带上以上关键词如下:
curl ‘https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx‘ -H ‘Content-Type: application/json‘ -d ‘{"msgtype": "text","text": {"content": "监控报警,我就是我, 是不一样的烟火"}}‘
否则会报如下错误:
{
"errcode":310000,
"errmsg":"keywords not in content"
}
执行完成钉钉群组里就有机器人发过来的信息啦:
5、阿里云配置钉钉报警
登录阿里云平台→云监控→报警服务→报警联系人 找到联系人,编辑添加上webhook地址;
这里需要注意的是只要在游戏运维组中的一个用户添加webhook就可以了,大家都在一个群里,信息都能看到;
三、将钉钉机器人webhook封装成可调用接口
以上只是完成了钉钉机器人的创建与调试,但需要使用,第三方程序能调用,还需要稍加封装,这里以shell和python为例进行封装;
1、shell接口封装
#!/bin/bash
SendInfoMsg(){
curl ‘https://oapi.dingtalk.com/robot/send?access_token=XXXXXX‘ -H ‘Content-Type: application/json‘ -d "{‘msgtype‘:‘text‘,‘text‘: {‘content‘:\"[INFO]:$msg\" }}"
}
说明:以上是函数,可以在上面进行添加,XXXXXX就是token,这里隐藏了;给个引用示例脚本吧:
cat dingtalk.sh
#!/bin/bash
msg=$1
SendInfoMsg(){
curl ‘https://oapi.dingtalk.com/robot/send?access_token=XXXXXXX‘ -H ‘Content-Type: application/json‘ -d "{‘msgtype‘:‘text‘,‘text‘: {‘content‘:\"[INFO]-from :$msg\" }}"
}
#SendInfoMsg是报警函数
SendInfoMsg
Time=$(date +%H:%M:%S)
ServerName="测试"
msg="今日${Time}$ServerName;请熟知~"
./dingtalk.sh $msg
如图:
这里使用的关键字是INFO,如果是报警可以用关键字监控,服务信息就用服务等;以上示例为了安全已经将token用XXXXXX代替,需要时请到游戏群组中查询;
2、封装成python可调用接口
cat dingtalk.py
#!/usr/bin/env python
import json
import requests
import sys
def send_msg(url, msg):
headers = {‘Content-Type‘: ‘application/json; charset=utf-8‘}
data = {
"msgtype": "text",
"text": {
"content": "zabbix %s" % msg
}
}
r = requests.post(url, data=json.dumps(data), headers=headers)
return r.text
if __name__ == ‘__main__‘:
msg = sys.argv[1]
url = ‘https://oapi.dingtalk.com/robot/send?access_token=XXXXXXX‘
print(send_msg(url, msg))
我们来试下:
到此钉钉报警配置和封装已经完成,为后续其他程序(如zabbix)调用已经准备完成;接下来看下zabbix如何调用钉报警的吧
四、zabbix配置调用钉钉报警
1、编写钉钉报警的脚本-dingtalk.sh
cat dingtalk.sh
#!/bin/bash
# author: san at 20201021
SendZabbixMsg(){
curl ‘https://oapi.dingtalk.com/robot/send?access_token=XXXXXX‘ -H ‘Content-Type: application/json‘ -d "{‘msgtype‘:‘text‘,‘text‘: {‘content‘:\"[zabbix] \n $msg\" }}"
}
Today=$(date +%Y-%m-%d)
msg=$1
SendZabbixMsg
这里的token为了安全,所以用xxxxxx代替了;
2、zabbix web gui创建报警媒介
管理--> 报警媒介--> 创建媒类型--> 依次填写 "名称",选择类型为"脚本",脚本名称,这里必须和要调的脚本名一致;这里是dingtalk.sh,脚本参数,输入"{ALERT.MESSAGE}" 如图:
3、创建触发器
配置--> 动作-->事件源选择 "触发器" -->创建触发器 如图:
在动作中依次填写名称,触发条件 如图:
再点操作 --> 新的 --> 如图:
创建接收人,接收方式 ,接收组等如下:
同理 恢复操作和更新操作也如此配置这里就不再一步一步的贴出
最终效果如下:
到此zabbix调用钉钉报警的配置已经完成;需要注意的时,加入到组中,就可以收到报警啦~
原文:https://blog.51cto.com/dyc2005/2548299