Zabbix 5.0 LTS 配置企業微信(Webhook)自動傳送告警資訊

讲文张字發表於2024-07-30

依據前面文章Zabbix 5.0 LTS URL 健康監測環境,實現企業微信(Webhook)自動傳送告警資訊。

一、建立企業微信機器人

  • 先在自己的企業微信群裡建立一個機器人,並獲取其 WebHook 地址。右擊群聊天卡片,新增群機器人。
    獲得一個類似下圖的 WebHook 地址。注意,這個 WebHook 地址非常重要,請不要洩露。

    # key 的值是唯一的
    https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=b55ed8ad-6765-4e8b-827c-xxxxxxxxxx
    

二、建立媒介

步驟:配置 -- 報警媒介型別 -- 建立媒介型別 -- 新增

指令碼內容(固定樣式)

var Qiyeweixin = {
  key: null,

  message: null,
  msgtype: "markdown",
  proxy: null,

  sendMessage: function () {
    var params = {
        msgtype: Qiyeweixin.msgtype,
        markdown: {
          content: Qiyeweixin.message,
        },
      },
      data,
      response,
      request = new CurlHttpRequest(),
      url =
        "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=" +
        Qiyeweixin.key;

    if (Qiyeweixin.proxy) {
      request.setProxy(Qiyeweixin.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,
      "[Qiyeweixin Webhook] URL: " + url.replace(Qiyeweixin.key, "<BOT KEY>")
    );
    Zabbix.Log(4, "[Qiyeweixin Webhook] params: " + data);
    response = request.Post(url, data);
    Zabbix.Log(4, "[Qiyeweixin 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';
  }

  Qiyeweixin.key = params.Key;

  if (params.HTTPProxy) {
    Qiyeweixin.proxy = params.HTTPProxy;
  }

  Qiyeweixin.to = params.To;
  Qiyeweixin.message = params.Subject + "\n" + params.Message;
  Qiyeweixin.sendMessage();

  return "OK";
} catch (error) {
  Zabbix.Log(4, "[Qiyeweixin Webhook] notification failed: " + error);
  throw "Sending failed: " + error + ".";
}

三、建立動作

步驟:配置 -- 動作 -- 新的觸發條件 -- 新增

Custom message

故障資訊:{TRIGGER.STATUS}

伺服器:{HOSTNAME1}發生: {TRIGGER.NAME}故障!
告警主機:{HOSTNAME1}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警資訊: {TRIGGER.NAME}
告警專案:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}


恢復資訊:{EVENT.NAME}

伺服器: {HOST.NAME}發生:{EVENT.NAME}故障恢復!
告警主機: {HOST.NAME}
告警地址:{HOST.IP}
監控專案:{ITEM.NAME}
監控取值:{ITEM.LASTVALUE}
告警等級:{TRIGGER.SEVERITY}
當前狀態:{TRIGGER.STATUS}
告警資訊:{TRIGGER.NAME}
告警時間:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}



更新資訊:{EVENT.NAME}

伺服器: {HOST.NAME}發生:{EVENT.NAME}故障更新!
告警主機: {HOST.NAME}
告警地址:{HOST.IP}
監控專案:{ITEM.NAME}
監控取值:{ITEM.LASTVALUE}
告警等級:{TRIGGER.SEVERITY}
當前狀態:{TRIGGER.STATUS}
告警資訊:{TRIGGER.NAME}
告警時間:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}

四、配置使用者

驗證結果

Web場景-- 步驟 -- 故意寫錯URL觸發告警

相關文章