前面有提到通过python的方式告警,但由于每个人的环境都不一样,容易出现格式缩进等一些问题,而实际上钉钉机器人也是通过webhook的方式来实现的,Zabbix 5.2版本原生支持webhook的方式去推送事件。
首先贴下代码,下面的title部分记得修改为自己的
vardingding={ key:null, message:null, msgtype:"markdown", proxy:null, sendMessage:function(){ varparams={ msgtype:dingding.msgtype, markdown:{ title:"IT小白Kasar",(注意这里可以修改) text:dingding.message }, }, data, response, request=newCurlHttpRequest(), 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); //Removereplace()functionifyouwanttoseetheexposedkeyinthelogfile. Zabbix.Log( 4, "[dingdingWebhook]URL:"+url.replace(dingding.key,"<BOTKEY>") ); Zabbix.Log(4,"[dingdingWebhook]params:"+data); response=request.Post(url,data); Zabbix.Log(4,"[dingdingWebhook]HTTPcode:"+request.Status()); try{ response=JSON.parse(response); }catch(error){ response=null; } if(request.Status()!==200||response.errcode!==0){ if(typeofresponse.errmsg==="string"){ throwresponse.errmsg; }else{ throw"Unknownerror.Checkdebuglogformoreinformation."; } } }, }; try{ varparams=JSON.parse(value); if(typeofparams.Key==="undefined"){ throw'Incorrectvalueisgivenforparameter"Key":parameterismissing'; } 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,"[dingdingWebhook]notificationfailed:"+error); throw"Sendingfailed:"+error+"."; }
这个脚本贴在下图的这个位置,在报警媒介类型下
需要将key部分修改为自己的机器人的token,主要是下图里的"access_token="的一串字符串。
添加完成后,我们就可以测试下
然后添加下默认告警媒介
最终效果
未美化效果
转载请注明:IT运维空间 » 运维技术 » Zabbix 5.2 由浅入深之钉钉机器人告警(webhook方式)
发表评论