我们知道,之前的运维告警多通过SMS、Mail 等方式通知到相应的人员,难以实现随时随地的查看。随着手机APP的发展,很多告警开始发送到IM软件上去。目前比较常用的是发送到微信和钉钉上,不过微信发送时,需要开通企业公众号,比较麻烦。今天我们将重点放在钉钉上。群机器人是钉钉群的高级扩展功能,群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步。借助钉钉机器人,通过官方提供的API,可以很方便的post数据到相应的接收人 。群机器人支持Webhook协议的自定义接入,支持更多可能性,例如:你可将运维报警通过自定义机器人聚合到钉钉群实现提醒功能。
Shell 脚本语言是实现Linux系统管理及自动化所必须的重要工具。熟练地编写Shell语言可以提升运维人员的工作效率,适应复杂的工作环境。
一、 想了解更多钉钉机器人相关信息,可以去参考官网文档
https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
二、创建自定义机器人webhook
自定义机器人名称、头像、安全设置(至少选择一种)成功之后,会生成一个webhook地址,复制该地址,其中包含一个唯一的access_token。
附:
安全设置目前有3种方式:
(1)方式一,自定义关键词
最多可以设置10个关键词,消息中至少包含其中1个关键词才可以发送成功。
例如:添加了一个自定义关键词:监控报警
则这个机器人所发送的消息,必须包含 监控报警 这个词,才能发送成功。
(2)方式二,加签
第一步,把timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。
timestamp:当前时间戳,单位是毫秒,与请求调用时间误差不能超过1小时
secret:密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的字符串
(3)方式三,IP地址(段)
设定后,只有来自IP地址范围内的请求才会被正常处理。支持两种设置方式:IP、IP段,暂不支持IPv6地址白名单,格式如下:
注意:安全设置的上述三种方式,需要至少设置其中一种,以进行安全保护。校验不通过的消息将会发送失败,错误如下:
// 消息内容中不包含任何关键词
{
"errcode":310000,
"errmsg":"keywords not in content"
}
// timestamp 无效
{
"errcode":310000,
"errmsg":"invalid timestamp"
}
// 签名不匹配
{
"errcode":310000,
"errmsg":"sign not match"
}
// IP地址不在白名单
{
"errcode":310000,
"errmsg":"ip X.X.X.X not in whitelist"
}
三、测试自定义机器人代码如下:
#!/bin/bash curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx' \ -H 'Content-Type: application/json' \ -d '{"msgtype": "text", "text": { "content": "上班了记得打卡!" }, "at": { "atMobiles": [ "电话号码" ], "isAtAll": true } }'
“xx”处填创建钉钉机器人时生成的webhook地址中的access_token。
如果发送消息想@某个人,则在“电话号码”处填写要@的人的号码。
如果@具体某人,下面“isAtAll”处则需要设置为“false”;
如果是@所有人,则只需要在“isAtAll”处设置为“true”。
三、创建Crontab周期性计划任务调用上面的脚本:
[root@ecs-xg ~]# crontab -e 50 08 * * * . /root/webhook/autonotice.sh
四、测试crontab调用脚本实现定时消息通知