运维利器:钉钉机器人脚本告警(Linux Shell 篇)

时间:2022-05-07 13:08:50

运维利器:钉钉机器人脚本告警(Linux Shell 篇)

写在前面的话

目前换了几家公司,且最近几家都是以钉钉作为公司 OA 聊天工具,总的来说还是很不错的。最近去了新公司,由于公司以前没有运维,所以监控,做自动化等方面都没有实施,恰逢这个机会把最近做的关于用到钉钉机器人的一些东西写出来,希望能够帮到和我有同样需求的兄弟,少走一些弯路!

目前个人钉钉机器用在了两个方面:

一是 Zabbix 监控告警,使用的是 Python 编写的脚本,且目前也在写关于 Zabbix 的文档,有兴趣的小伙伴可以到我主页看看!

二是 Jenkins 自动发布,在构建后执行 Shell 过程中加入一系列的钉钉机器人消息提醒!

添加钉钉机器人

目前个人已知的钉钉机器人只能存在于钉钉群,钉钉群的建群需求是至少 人,当然,你建群之后可以把其它人踢出去,我就是这样干的,谁让我们只有两个人呢 ...

【1】首先,我们进入一个钉钉群创建我们的机器人:

运维利器:钉钉机器人脚本告警(Linux Shell 篇)

【2】目前钉钉已经存在了一些项目的机器人,你可以根据自己的选,当然,我们本次就用自定义的,添加一个名为 HELLO ROBOT 机器人:

运维利器:钉钉机器人脚本告警(Linux Shell 篇)

运维利器:钉钉机器人脚本告警(Linux Shell 篇)

【3】 机器人添加完成,会生成一个 webhook,这是你上传数据接口,同时这个接口也代表着该机器人的身份标识,相当重要!

运维利器:钉钉机器人脚本告警(Linux Shell 篇)

【4】添加完成后,机器人会在群里发送一条消息,还有点阔爱:

运维利器:钉钉机器人脚本告警(Linux Shell 篇)

发送消息脚本(Linux Shell)

对于消息在钉钉群中的显示格式以及更多的关于钉钉机器人的开发文档说明,可以查看官方给的开发者文档:

https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.oAAN7T&treeId=257&articleId=105733&docType=1

以下是 Linux Shell 脚本,个人选择的是钉钉消息的 ActionCard 格式:

#!/bin/bash 

function SendMessageToDingding(){
Dingding_Url="这就是刚刚机器人的 webhook xxxxxxxx"
# 发送钉钉消息
curl "${Dingding_Url}" -H 'Content-Type: application/json' -d "
{
\"actionCard\": {
\"title\": \"$1\",
\"text\": \"$2\",
\"hideAvatar\": \"0\",
\"btnOrientation\": \"0\",
\"btns\": [
{
\"title\": \"$1\",
\"actionURL\": \"\"
}
]
},
\"msgtype\": \"actionCard\"
}"
} Subject="$1" Body="$2" SendMessageToDingding $Subject $Body

备注:我们这里传递了两个参数,当然,你也可以根据自己的需求选择消息类型,定制参数,都是 Shell 的基础知识,比较简单!

最后,我们可以放在机器上面测试一下,下面是我的效果:

运维利器:钉钉机器人脚本告警(Linux Shell 篇)

注意,由于 Linux 多行的值赋值给一个变量的时候,换行符需要转义,还有就是 Zabbix 触发动作里面内容一定不定有空格,这都是 shell post json 的大坑! 

Zabbix 监控告警的效果:

运维利器:钉钉机器人脚本告警(Linux Shell 篇)

小结

使用 Shell 发送很简单,其实就是提交 JSON 数据,但是 Shell 提交 JSON 感觉有点恶心,后续我会把 Python 脚本脚本也发出来,希望能够帮到各位!