在电脑上钉钉信息通知

发布时间: 2023-04-17 14:31 阅读: 文章来源:转载

应朋友最近需求,先出告警篇。据朋友反馈,由版本 5.4 升级到 6.0 出现 Webhook 的 JS 脚本失效。下面仅仅是其中一个报错。

先贴出 5.x 时代的 Webhook 脚本吧,下面的脚本依然适用 5.0 ~ 5.4 版本

var dingding = {key: null,message: null,msgtype: "markdown",proxy: null,sendMessage: function () {var params = {msgtype: dingding.msgtype,markdown: {title: "IT小白Kasar",(注意这里可以修改)text: dingding.message},},data,response,request = new CurlHttpRequest(),url ="https://oapi.dingtalk.com/robot/send?access_token=" +dingding.key;if (dingding.proxy) {request.setProxy(dingding.proxy);}request.AddHeader("Content-Type: application/json");data = JSON.stringify(params);// Remove replace() function if you want to see the exposed key in the log file.Zabbix.Log(4,"[dingding Webhook] URL: " + url.replace(dingding.key, ""));Zabbix.Log(4, "[dingding Webhook] params: " + data);response = request.Post(url, data);Zabbix.Log(4, "[dingding Webhook] HTTP code: " + request.Status());try {response = JSON.parse(response);} catch (error) {response = null;}if (request.Status() !== 200 || response.errcode !== 0) {if (typeof response.errmsg === "string") {throw response.errmsg;} else {throw "Unknown error. Check debug log for more information.";}}},};try {var params = JSON.parse(value);if (typeof params.Key === "undefined") {throw ‘Incorrect value is given for parameter "Key": parameter is missing‘;}dingding.key = params.Key;if (params.HTTPProxy) {dingding.proxy = params.HTTPProxy;}dingding.to = params.To;dingding.message = params.Subject + "\n" + params.Message;dingding.sendMessage();return "OK";} catch (error) {Zabbix.Log(4, "[dingding Webhook] notification failed: " + error);throw "Sending failed: " + error + ".";}正文

新进来的朋友可能不明白什么情况,那么就来讲讲吧,Zabbix 的事件信息可以通过四种方式来传递事件信息,分别是:

E-mail:通过邮件发送相关事件信息;SMS:通关短信来发送相关事件信息;script:通过脚本发送相关事件信息,例如 Python;Webhooks:通过 Webhooks 方式发送相关事件信息。

今天要提的就是这个 Webhooks 方式,webhook 是应用给其它应用提供实时信息的一种方式。信息一产生,webhook 就会把它发送给已经注册的应用,这就意味着你能实时得到数据。不像传统的 APIs 方式,你需要用轮询的方式来获得尽可能实时的数据。这一点使得 webhook 不管是在发送端还是接收端都非常高效。(参考网络资料)

钉钉部分操作

前提条件

钉钉账号钉钉软件

进入钉钉软件里,点击右上方的 + 号

钉钉软件

点击创建群聊

如果仅仅测试,最好选择组织内沟通,选人建群需要3人以上。

点击创建即可

点击群聊,再点击右上方设置图标

找到智能群助手

点击添加机器人

点击添加机器人后面的设置按钮

找到自定义(通过 Webhook 接入自定义服务)机器人,点击创建

自定义机器人的一些介绍,直接点击添加就好了

这里需要添加一些自定义机器人的参数。

需要注意的地方就是安全设置,共有三个参数:

自定义关键词:自定义关键词最多可以写十条,在发送消息的时候带上该关键字即可加签:timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集,有兴趣的朋友可以自行查看相关文档,文档地址会放在最后IP 地址(段):就是访问该 Webhook 的公网地址,如何获取公网地址,可以用 curl 查看,如下图二。如果公网地址一直在变,最好采用自定义关键词,第二种比较复杂,需要一定的开发能力。

最后得到相关信息,需要将 Webhook 的地址记住,后面会用到。

Zabbix 部分

创建媒介类型,路径为 Administration -> Media types -> Create media type

该页面配置较多,名字自行设置,可以设置为中文,类型选择 Webhook,参数部分

选择 Key,找到刚刚创建机器人的那段 webhook 地址,这里为 ‘access_token=’ 后面的一串字符串。

https://oapi.dingtalk.com/robot/send?access_token=bff7096cbd8005c9590a95dc14ae676b030a48f6771d84c261aef381635f3ef1

Message 和 Subject 分别代表正文内容和标题,用的内置宏,标准格式

脚本类填写下面的代码即可,最后点击 update 按钮即可

var dingding = {key: null,message: null,msgtype: "markdown",proxy: null,sendMessage: function () {var params = {msgtype: dingding.msgtype,markdown: {title: "IT小白Kasar",text: dingding.message},},data,response,request = new HttpRequest(),url ="https://oapi.dingtalk.com/robot/send?access_token=" +dingding.key;if (dingding.proxy) {request.setProxy(dingding.proxy);}request.addHeader("Content-Type: application/json");data = JSON.stringify(params);// Remove replace() function if you want to see the exposed key in the log file.Zabbix.Log(4,"[dingding Webhook] URL: " + url.replace(dingding.key, ""));Zabbix.Log(4, "[dingding Webhook] params: " + data);response = request.post(url, data);Zabbix.Log(4, "[dingding Webhook] HTTP code: " + request.getStatus());try {response = JSON.parse(response);} catch (error) {response = null;}if (request.getStatus()!== 200 || response.errcode !== 0) {if (typeof response.errmsg === "string") {throw response.errmsg;} else {throw "Unknown error. Check debug log for more information.";}}},};try {var params = JSON.parse(value);if (typeof params.Key === "undefined") {throw ‘Incorrect value is given for parameter "Key": parameter is missing‘;}dingding.key = params.Key;if (params.HTTPProxy) {dingding.proxy = params.HTTPProxy;}dingding.to = params.To;dingding.message = params.Subject + "\n" + params.Message;dingding.sendMessage();return "OK";} catch (error) {Zabbix.Log(4, "[dingding Webhook] notification failed: " + error);throw "Sending failed: " + error + ".";}

找到刚刚创建的 Webhook 并进行测试

这就是刚刚说的安全规则导致的,需要在安全条件设置合理的参数

测试成功

钉钉就能接收到来自 Zabbix 的消息了

实战表现

仅有媒介不行,还得做一系列的设置。

给用户赋于该 Webhook 的使用权限

路径为 Administration -> Users -> 点击用户

进入到该用户界面,点击 Media 参数,再点击 Add,类型选择刚刚创建的钉钉,Sent to 字段随便填写,这里暂不涉及 @ 用户(后续会出),时间参数就选择默认全勾,最后点击 Add 即可。

添加后,点击下方的 update 就可以了。

创建动作

路径为 Configuration -> Actions -> Trigger action

点击 Create action

名字自行填写,Conditions 就是对应的条件,满足该条件才会触发该动作行为,如果不满则不触发该行为,本文选主机组作为演示条件。

进入到操作选项,这里指的实际的一些行为操作,这里会在后续文章继续展开,当前只需要知道这三个选项对应的是发送告警事件,发送恢复告警事件,发送更新事件,日常工作仅用到前两个选项,点击 Add 即可创建对应的事件通知动作。

这里仅需要调整两个地方,第一个是 Send to users 部分,需要将已授权的用户加入进来即可,第二个部分是 Send only to,选择钉钉即可

最终

创建模拟主机,调用 ICMP Ping 模板,主机类型为 agent 方式,地址选择一个无法 ping 通的地址。

告警产生了,但是发送失败了,还有一个问题没解决,就是媒介的消息模板没定义,目前不展开动作里和媒介里的区别,只涉及解决方法。

进入钉钉模板里,进入到 Message templates 选项,点击 Add

默认模板,直接添加就可以,后续会讲到如何美化

最终

重新再触发告警,此时可以看到发送成功了。

再看看钉钉侧效果

那么基本就完成了。

最后

关于事件通知其实是一个很大的知识点,有很多可以展开的内容,欢迎大家关注我后续的文章,下期见!

•••展开全文
相关文章