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 上的服务重新上线。

相关推荐
小华同学ai20 分钟前
wflow-web:开源啦 ,高仿钉钉、飞书、企业微信的审批流程设计器,轻松打造属于你的工作流设计器
前端·钉钉·飞书
LuckyTHP1 天前
zabbix 7.0 安装(服务器、前端、代理等)
zabbix
qq_344403452 天前
钉钉内集成第三方免密登录(Vue+.Net)
钉钉
市象2 天前
钉钉向广告低头
互联网·钉钉·企业办公
与君共勉121382 天前
Zabbix proxy 主动模式的实现
运维·学习·zabbix
Amrian_robot3 天前
Zabbix 6.0 部署
运维·zabbix
国通快递驿站3 天前
AntFlow一款开源免费且自主可控的仿钉钉工作流引擎
开源·钉钉·antflow
Dark_programmer3 天前
uni-app - - - - - 钉钉小程序 uni.showToast回调函数不执行问题(PC端钉钉小程序 接口API回调函数不执行)
小程序·uni-app·钉钉
weixin_449310846 天前
利用钉钉与金蝶云星空进行付款单自动化集成
运维·自动化·钉钉
CL_IN7 天前
钉钉日常报销单与金蝶云星空集成技术详解
前端·数据库·钉钉