zabbix之钉钉告警

钉钉告警设置

我们可以将同一个运維组的人员加入到同一个钉钉工作群中,当有异常出现后,Zabbix 将告警信息发送到钉钉的群里面,此时,群内所有的运维人员都能在第一时间看到这则告警详细。

Zabbix 监控系统默认没有开箱即用的对接钉钉的结构,需要利用 Zabbix 监控系统的脚本定制化的方式扩展钉钉告警的实现。

1.webhook的定义

Webhook 是一个 API 概念,是微服务 API 的使用范式之一,也被称为反向 API,即前端不主动发送请求,完全由后端推送;举个常用例子,比如你的好友发了一条朋友圈,后端将这条消息推送给所有其他好友的客户端,就是 Webhook 的典型场景。

简单来说,webhook 就是一个接收 HTTP POST(或 GET,PUT,DELETE)的 URL,一个实现了 webhook的 API 提供商就是在当事件发生的时候会向这个配置好的 URL 发送一条信息,与请求-响应式不同,使用 webhook 你可以实时接受到变化。

在钉钉中,我们可以为群创建一个 webhook,zabbix 就是通过 webhook 向这个钉钉群发送信息的。

2.为钉钉群创建 webhook

钉钉机器人是全局唯一的应用,即无论是在单聊场景中还是群聊场景中,都可以用来推送应用的通知和用来对用户进行对话式服务,机器人 ID 都可以是唯一的。这意味着开发者既可以选择仅创建一个机器人,而后将其放在各个应用场景下使用,也可以创建多个机器人,然后分别部署在不同场景下。

(1)设置钉钉机器人

群设置--》智能群助手添加自定义群机器人

注意:多添加一些关键字:报警、告警、问题、故障、恢复

(2)生成webhook

记下这个webhook,只要机器人不删,这个webhook就可以一直使用

(3)测试

使用如下命令在linux系统中发送测试信息

[root@zbx ~]# curl 'webhook地址' -H 'Content-Type:application/json' -d '{"msgtype":"text","text":{"content":"报警"}}'

2.设置zabbix告警方式

(1)创建报警媒介

"告警"-->"媒介",创建媒介类型

参数部分设置:

Message: (ALERT.MESSAGE}

TO: {ALERT.SENDTO}

URL:https://oapi,dingtalk.com/robot/send?access token=<你的 token 值>

删掉其他参数将本案例提供的脚本粘贴进去

脚本内容如下:

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;
}
(2)消息模版设置

在消息模版页面,消息的类型主要设置两个:问题和问题恢复,如图所示:

消息类型问题消息模版填写如下:

主题:
【告警】<font color="comment">{TRIGGER.STATUS}</font>,
服务器: <font color="comment">{HOSTNAME1}</font>故障!

消息:

>告警主机:<font color="comment">{HOSTNAME1}</font>

>告警地址:<font color="comment">{HOST.IP}</font>

>告警时间:<font color="comment">{EVENT.DATE} {EVENT.TIME}</font>

>告警等级:<font color="comment">{TRIGGER.SEVERITY}</font>

>告警信息:<font color="comment">{TRIGGER.NAME}</font>

>告警项目:<font color="comment">{TRIGGER.KEY1}</font>

>问题详情:<font color="comment">{ITEM.NAME}:{ITEM.VALUE}</font>

>当前状态:<font color="comment">{TRIGGER.STATUS}: {ITEM.VALUE1}</font>

>事  件 ID:<font color="comment">{EVENT.ID}</font>

消息类型:问题恢复模版

恢复主题:
【恢复】<font color="comment">{TRIGGER.STATUS}</font>,
服务器: <font color="comment">{HOSTNAME1}</font>已恢复!

恢复消息:
>恢复主机:<font color="comment">{HOSTNAME1}</font>

>恢复地址:<font color="comment">{HOST.IP}</font>

>恢复时间:<font color="comment">{EVENT.DATE} {EVENT.TIME}</font>

>告警等级:<font color="comment">{TRIGGER.SEVERITY}</font>

>恢复信息:<font color="comment">{TRIGGER.NAME}</font>

>恢复项目:<font color="comment">{TRIGGER.KEY1}</font>

>问题详情:<font color="comment">{ITEM.NAME}:{ITEM.VALUE} </font>

>当前状态:<font color="comment">{TRIGGER.STATUS}: {ITEM.VALUE1}</font>

>事  件 ID:<font color="comment">{EVENT.ID}</font>
(3)选项部分的设置

3.为用户添加告警媒介

4.创建触发器动作

在要被监控的主机上安装一个httpd网页用于测试

为该主机添加一个Apache by Zabbix agent的模版

在数据采集--》主机 找到对应主机

在告警--》动作 中创建一个触发器动作 ,设置问题操作和恢复操作

将Apache相关的勾选上,主要是告警,也可全部勾选

添加问题操作和恢复操作(选择用户和用户组)

5.验证

停掉server01上的httpd

备注:

1.说明 Apache 的进程数量为 0,表示 Apache 服务没有在运行。

2.说明 Apache 的服务在端口 80 上没有响应,表示服务宕机。

恢复开启状态

备注:

1.恢复通知表明 Apache 进程数量已恢复到正常状态,有 6 个进程在运行。

2.恢复通知表明 Apache 服务已恢复正常,端口 80 上的服务重新上线。

相关推荐
LKID体2 天前
调用钉钉接口发送消息
钉钉
小俱的一步步2 天前
钉钉自定义机器人发送群消息(加签方式、http发送)
机器人·钉钉
连胜优佳4 天前
1.zabbix概述
前端·zabbix
小王格子5 天前
Zabbix6.0升级为7.2
zabbix·zabbix升级·zabbix 7
小王格子5 天前
Zabbix6.0升级为6.4
zabbix·zabbix 6.0·zabbix升级
ZJL-阿友7 天前
go语言 爬虫 钉钉群机器人
爬虫·golang·钉钉·钉钉群机器人
AI_NEW_COME8 天前
超越飞书钉钉:探索高效内部知识库平替方案与应用
人工智能·钉钉·飞书
CL_IN8 天前
高效数据集成:钉钉与企业系统无缝对接
java·前端·钉钉
nVisual11 天前
nVisual关于钉钉小程序打开项目及调试说明
小程序·钉钉·nvisual
inter_peng12 天前
[工具升级问题] 钉钉(linux版)升级带来的小麻烦
linux·运维·钉钉