專欄|Zabbix使用JavaScript配置Webhook發送告警通知

      網友投稿 1067 2025-04-03

      專欄|Zabbix使用JavaScript配置Webhook發送告警通知

      背景

      zabbix從4.4開始支持使用自定義的javaScript代碼來配置Webhook媒介類型實現故障報警通知,這又為用戶提供了一種使用前端代碼來進行報警通知的方式。相比于在后端配置告警腳本的好處是代碼可維護性更強,支持媒介類型的導入導出,省去了后端調試代碼的步驟,使zabbix更加的開箱即用。本文介紹Webhook的媒介類型是怎么配置的。

      實現原理

      Zabbix封裝的javaScript對象

      寫入zabbix日志的對象

      例如:

      Zabbix.Log(3, "this is a log entry written with 'Warning' log level")

      http請求對象

      try { Zabbix.Log(4, 'jira webhook script value='+value); var result = { 'tags': { 'endpoint': 'jira' } }, params = JSON.parse(value), req = new CurlHttpRequest(), fields = {}, resp; req.AddHeader('Content-Type: application/json'); req.AddHeader('Authorization: Basic '+params.authentication); fields.summary = params.summary; fields.description = params.description; fields.project = {"key": params.project_key}; fields.issuetype = {"id": params.issue_id}; resp = req.Post('https://tsupport.zabbix.lan/rest/api/2/issue/', JSON.stringify({"fields": fields}) ); if (req.Status() != 201) { throw 'Response code: '+req.Status(); } resp = JSON.parse(resp); result.tags.issue_id = resp.id; result.tags.issue_key = resp.key; } catch (error) { Zabbix.Log(4, 'jira issue creation failed json : '+JSON.stringify({"fields": fields})); Zabbix.Log(4, 'jira issue creation failed : '+error); result = {}; } return JSON.stringify(result);

      配置Webhook

      Webhook開發指南

      Webhook 配置或 Webhook 測試中使用的值無效。

      缺少網絡鉤子參數。webhook 代碼應該驗證所需的參數并確定必需的參數是否存在。

      宏是否被解析。

      是否有響應并且沒有 HTTP 錯誤。

      響應是否包含預期格式的數據(原始/JSON/XML/等)。

      響應是否包含所有必需的字段或數據。

      響應數據中有沒有錯誤。

      應提供調試級別信息。?這可用于找出 webhook 邏輯中錯誤的原因。

      不需要在更高級別創建日志條目,因為 Zabbix 服務器會自動在“警告”(3)級別記錄失敗的 webhooks。

      日志條目應以 WEBHOOK 名稱為前綴。這樣是為了區分 webhook 創建的日志與和Zabbix Server 日志文件中的其他日志。

      無需在 WEBHOOK 的每一步都創建日志條目。

      編寫自定義webhook媒介類型實現發送釘釘報警通知

      完成設置,保存好webhook,https://oapi.dingtalk.com/robot/send?access_token=e5906a9b879fe615323bd9489f46334f5539d6a46f8e29c5740ba02c7ee90e84

      var Dingding = { params: {}, proxy: null, setParams: function (params) { if (typeof params !== 'object') { return; } Dingding.params = params; }, request: function () { var data = { msgtype: "markdown", markdown: { title: "報警", text: "## 通知:\n " + Dingding.params.Message, }, at: { atUserIds: [Dingding.params.To], isAtAll: false, }, }, response, url = Dingding.params.URL, request = new HttpRequest(); request.addHeader('Content-Type: application/json'); if (typeof Dingding.HTTPProxy !== 'undefined' && Dingding.HTTPProxy !== '') { request.setProxy(Dingding.HTTPProxy); } if (typeof data !== 'undefined') { data = JSON.stringify(data); } Zabbix.Log(4, "[Dingding Webhook] message is: " + data); response = request.post(url, data); Zabbix.log(4, '[ Dingding Webhook ] Received response with status code ' + request.getStatus() + '\n' + response); if (response !== null) { try { response = JSON.parse(response); } catch (error) { Zabbix.log(4, '[ Dingding Webhook ] Failed to parse response received from Dingding'); response = null; } } if (request.getStatus() !== 200 || response.errcode !== 0) { var message = 'Request failed with status code '+request.getStatus(); if (response !== null && typeof response.errmsg !== 'undefined') { message += ': '+ JSON.stringify(response.errmsg) ; } throw message + '. Check debug log for more information.'; } return response; }, }; try { var params = JSON.parse(value); if (typeof params.URL !== 'undefined' && typeof params.To !== 'undefined' && typeof params.Message !== 'undefined') { Zabbix.log(4, '[ Dingding Webhook ] webhookURL "' + params.URL + '" sendto "'+ params.To )+'"'; } else { throw 'Missing parameter. URL, message, to parameter is required' } if (params.HTTPProxy) { Dingding.proxy = params.HTTPProxy; } Dingding.setParams(params); Dingding.request(); return 'OK'; }catch (error) { Zabbix.log(3, '[ Dingding Webhook ] ERROR: ' + error); throw 'Sending failed: ' + error; }

      JavaScript Zabbix

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:MegaPhase Survivor? 加固型電纜的頻率可達40GHz
      下一篇:創原會:30+云原生精英齊聚HDC.Cloud 2021,共話數字化轉型之路
      相關文章
      亚洲欧洲日产国码在线观看| 亚洲国产综合专区在线电影| 亚洲美女大bbbbbbbbb| 久久青青草原亚洲AV无码麻豆 | 亚洲人成777在线播放| 亚洲短视频在线观看| 亚洲激情校园春色| 亚洲国产精品美女| 亚洲中文字幕在线无码一区二区 | 亚洲嫩草影院在线观看| 亚洲妇女水蜜桃av网网站| 亚洲国产高清美女在线观看| 亚洲一区二区三区四区视频| 亚洲日本人成中文字幕| 亚洲免费网站观看视频| 亚洲av成人一区二区三区观看在线| 亚洲乱码日产精品一二三| 亚洲AV网一区二区三区| 亚洲国产成人精品无码久久久久久综合| 九月婷婷亚洲综合在线| 亚洲无线一二三四区手机| 亚洲日韩国产精品第一页一区| 亚洲不卡中文字幕无码| 亚洲综合无码一区二区| 亚洲中文字幕无码av在线| 亚洲人成网站在线播放2019| 国产成人亚洲精品电影| 久久亚洲中文字幕精品一区| 亚洲国产另类久久久精品黑人| 婷婷久久久亚洲欧洲日产国码AV| 老司机亚洲精品影院无码| 亚洲国产精品一区二区久| 亚洲中文字幕乱码熟女在线| 久久无码av亚洲精品色午夜| 亚洲成a人片在线观看老师| 国产亚洲精品看片在线观看| 精品国产亚洲一区二区三区| 久久丫精品国产亚洲av不卡| 亚洲乱码在线观看| heyzo亚洲精品日韩| 区久久AAA片69亚洲|