当前位置: 首页 > article >正文

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


http://www.kler.cn/a/303324.html

相关文章:

  • 【mysql的当前读和快照读】
  • 【C++学习(37)】并发性模式:如生产者-消费者、读写锁等。 架构模式:如MVC、MVVM等。属于23 种设计模式吗? RAII 的关系?
  • 从华为到创业公司
  • jmeter介绍、使用方法、性能测试、现参数化和数据驱动、分布式测试、压力测试、接口测试
  • 某app最新版 vmp算法分析一
  • 使用 Visual Studio Installer 彻底卸载 Visual Studio方法与下载
  • SpringMVC与SpringBoot的区别
  • Docker续9:使用docker-compose部署nmt项目,在haproxy中代理mysql负载均衡
  • k8s的搭建
  • 【Clickhouse】Clickhouse数据库简介
  • mysql 日志恢复
  • Python数据分析与可视化基础教程
  • Linux系统下配置和测试Redis服务
  • 探索未来住宿体验:酒店触摸开关的科技魅力
  • 【API安全】威胁猎人发布超大流量解决方案
  • SVN的使用技巧
  • [机器学习]聚类算法
  • Servlet学习详解--基本涵盖所有Servlet知识点
  • 取消Cursor的注释斜体字风格
  • Java8函数式接口全攻略
  • 北大阿里:新出炉的LLM偏好对齐方法综述
  • SAP Fiori-Vscode 环境搭建中npm报错
  • Ansible使用kubeadm方式一键安装k8s
  • 跨越日语障碍2024轻松实现日语阅读的好帮手
  • 旅游网站设计与实现:SpringBoot技术手册
  • buildroot移植qt报错Info: creating stash file (补充qt添加字库)