zabbix监控-钉钉webhook告警并使用markdown格式

news2025/1/19 22:09:48

zabbix监控-企业微信webhook告警并使用markdown格式

最终告警样式:

markdown格式与text格式的优点:文字排版清晰,可对不同文字标识颜色,大小等。

此方法使用zabbix提供的webhook方式,不需要建立脚本文件。

zabbix版本:Zabbix 6.2.8

一、创建钉钉群聊机器人

打开群聊界面,右上角设置,往下拉动鼠标,可以看到群管理页签中-机器人,进入机器人设置界面。添加自定义机器人。

设置机器人名称,并添加自定义的关键词,如:告警

关键词作用:只要告警文本中包含关键词的内容钉钉机器人就允许发送。

创建完成后,我们就能得到机器人的webhook地址。 

二、zabbix新建报警媒介

zabbix页面-管理-媒介-创建报警媒介

按照如下内容配置。名称可以任意,其他参数需要一致

Message{ALERT.MESSAGE}
Subject{ALERT.SUBJECT}
To{ALERT.SENDTO}
URL钉钉群聊机器人webhook地址,复制全部URL地址

 脚本内容(参考其他技术大佬,并做了内容修改):

var Dingding = {
    params: {},
    proxy: null,
    setParams: function (params) {
        if (typeof params !== 'object') {
            return;
        }
        Dingding.params = params; 
    },
    request: function () {
        var data = {
          msgtype: "markdown",
          markdown: {
            title: Dingding.params.Subject,
            text: Dingding.params.Subject + "\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;
}

添加报警模板:

模板类型选择问题,内容如下,根据个人喜好配置,也可直接复制下方内容。

主题:

#### 【监控告警】主机: <font color="warning">{HOST.NAME}</font>  IP地址:<font color="warning">{HOST.IP}</font>

消息:

>主机名称:**<font color="comment">{HOST.NAME}</font>**<br />
>主机IP:<font color="SlateGray">{HOST.IP}</font><br />
>告警时间:<font color="SlateGray">{EVENT.DATE}-{EVENT.TIME}</font><br />
>问题名称:<font color="warning">{EVENT.NAME}</font><br />
>问题详情:<font color="SlateGray">{ITEM.NAME}:{ITEM.VALUE}</font><br />
>目前状态:<font color="SlateGray">{TRIGGER.STATUS}</font><br />
>操作数据:<font color="SlateGray">{EVENT.OPDATA}</font> 

三、添加动作

配置-动作-触发器动作-创建动作

名称随意,条件按照如下内容选择,我选择的是大于严重才能报警,你可以可以选择其他的严重性

 

 在动作-操作栏中,添加操作,发送给用户,这里发送给admin用户,仅送到-选择钉钉报警媒介

 这是页面参数具体的解释信息:

四、设置用户

管理-用户-admin用户,添加报警媒介,类型选钉钉报警媒介,收件人随意填写,时间可以写工作时间,没在这个时间段的就不会收到信息,严重性选择按需勾选,勾选后才能发送对应的告警等级。

五、完成设置,接收告警消息

断开某台服务器的ping链接,就可以收到告警信息了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/779615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【人工智能】监督学习、分类问题、决策树、信息增益

文章目录 Decision Trees 决策树建立决策树分类模型的流程如何建立决策树?决策树学习表达能力决策树学习信息论在决策树学习中的应用特征选择准则一:信息增益举例结论不足回到餐厅的例子从12个例子中学到的决策树:Decision Trees 决策树 什么是决策树 —— 基本概念 非叶节…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(7 月 20 日论文合集)

文章目录 一、检测相关(7篇)1.1 Drone navigation and license place detection for vehicle location in indoor spaces1.2 BSDM: Background Suppression Diffusion Model for Hyperspectral Anomaly Detection1.3 Domain Adaptation for Enhanced Object Detection in Foggy…

STM32C0开发(2)----开发板介绍

基于RASC的keil电子时钟制作_配置keil以及使用串口进行打印 套件概述样品申请特征系统控制和生态系统访问功能示意图系统框图跳线设置开发板原理图 套件概述 STM32C011F4P6-TSSOP20评估套件可以使用户能够无缝评估TSSOP20封装中STM32C0S系列微控制器的功能&#xff0c;具备高效…

Java面试题总结记录(2)—— 多线程并发篇

1、Java实现多线程的方法 创建线程的常用方式 继承Thread类实现Runnable接口实现Callable接口线程池方式创建 说明&#xff1a; 通过继承 Thread 或 实现 Runnable接口&#xff0c;Callable接口都可以实现多线程&#xff0c;不过实现Runnable接口与实现Callable接口的方式基本…

gin 中间件流程控制:Next()、 Abort()

gin 中间件流程控制 Next() 源码注释&#xff1a;Next应该只在中间件内部使用。它执行调用处理程序内部链中的挂起处理程序。 通俗的说&#xff0c;就是中间件放行&#xff0c;当一个中间件代码执行到Next()&#xff0c;会先执行它之后的函数&#xff0c;最后再来执行完本函…

Python Flask构建微信小程序订餐系统 (十)

🔥 编辑会员信息 🔥 编辑会员信息可以通过点击会员列表操作,也可以点击会员信息详情点击进行操作 🔥 修改编程会员信息列表布局 🔥 修改 web/templates/member/index.html 文件,添加跳转到编辑会员信息的页面 web/templates/member/set.html 🔥 创建用于会员…

Dockerfile文件+docker build命令方式创建Docker自定义镜像

自定义镜像 mycentosjava8 自定义一个centos镜像&#xff0c;具备vimifconfigjdk8的配置 拉取centos镜像 docker pull centos 该默认镜像此时还没有vim、ifconfig和jdk的配置或功能 jdk8的下载 地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#java8 …

关于Nginx的 location 配置各种情况转换后的样子记录

Nginx location 配置要代理的地址测试URL代理后的URL举例编号/test01http://127.0.0.1:8080/test01/abc/test/test01/abc/test01/test02http://127.0.0.1:8080//test02/abc/test//abc/test02/test03/http://127.0.0.1:8080/test03/abc/test/test03/abc/test03/test04/http://12…

MYSQL练习一

练习一 创建stroe数据库&#xff0c;在数据库中根据开发喵store业务 创建表&#xff0c;表结构如下&#xff0c;并插入以下数据&#xff0c;完成下面的 sql 表数据&#xff1a; - 查询商品库存等于50的所有商品&#xff0c;显示商品编号&#xff0c;商 品名称&#xff0c;商品…

Vue第四篇:html和js基础知识查漏补缺

1、a标签 定义超链接&#xff0c;用于从一个页面链接到另一个页面 target属性&#xff1a;打开目标URL的方式&#xff0c;_top为再当前窗口打开&#xff0c;_blank为新窗口打开 2、span标签 对文档中的行内元素进行组合&#xff0c;它提供了一种将文本的一部分或者文档的一部分…

GB2312编码

说明 GB2312代码表用两个字节表示一个图形字符&#xff0c;两个字节中前面的字节为第一字节&#xff0c;后面的字节为第二字节。 区位码&#xff1a; GB2312代码表分成94个区&#xff0c;范围为1-94&#xff0c;区的编号由第一字节表示&#xff1b;每个区有94位&#xff0c;范…

@PostConstruct和@PreDestroy与servlet生命周期的关系

执行顺序结果 /*** 服务器加载Servlet* ---> 创建servlet实例&#xff0c;实现servlet构造函数* ---> 执行注解PostConstruct* ---> servlet.Init()* ---> servlet/service() 方法* ---> 执行注解PreDestroy* ---> servlet.destroy()* ---> 服务器卸载Se…

React Dva项目中路由跳转的方法

接下来 我们来看看路由跳转 先打开 我们Dva项目 然后我们需要在routes 下创建一个自己的路由&#xff0c;如果您尚未掌握在Dva项目中创建路由&#xff0c;可以参考我的文章 React 在Dva项目中修改路由配置&#xff0c;并创建一个自己的路由 然后 我的项目有两个路由 router.js…

2. Spring 的创建和使用

目录 1. 创建 Spring 项目 1.1 创建一个 maven 项目 1.2 添加 Spring 框架支持 1.3 添加启动类 2. 存储 Bean 对象 2.1 创建 Bean 2.2 将 Bean 注册到容器 3. 获取并使用 Bean 对象 3.1 创建 Spring 上下文 ApplicationContext 和 BeanFactory 的区别&#xff08;重点…

《零基础入门学习Python》第054讲:论一只爬虫的自我修养2:实战

0. 请写下这一节课你学习到的内容&#xff1a;格式不限&#xff0c;回忆并复述是加强记忆的好方式&#xff01; 今天我们决定在实战中来进行学习&#xff0c;会举两个例子&#xff0c;第一个例子是我们会下载一只猫&#xff0c;第二个例子是我们用Python来模拟浏览器通过在线的…

MySQL数据库中 IF函数的使用

文章目录 使用IF函数进行简单条件判断IF函数的应用场景总结 IF函数作为MySQL数据库中的一个函数&#xff0c;可以在查询语句中进行条件判断并返回不同的结果。它有多种语法形式&#xff0c;包括简单的IF语句和复杂的CASE语句。在本篇文章中&#xff0c;我们将介绍IF函数的基本用…

Android 实现仿淘宝地址多级选择器

先看下效果图 仿淘宝的选择完城市出来的选择省市区之类的&#xff0c;这个支持自定义层级&#xff0c;多少层都可以使用&#xff0c;接下来是代码: BottomPopUtils.class&#xff0c;我写了一个工具类&#xff0c;方便全局调用 public class BottomPopUtils {public static P…

JAVA-正则表达式基本语法规则和Pattern,Matcher,PatternSyntaxException三大类

目录 引言 一&#xff0c;正则表达式基本语法规则 二&#xff0c;正则表达式的三大类方法 2.1&#xff0c;Pattern类 2.1.1&#xff0c;Pattern的常用方法matches&#xff08;&#xff09; 2.2&#xff0c;Matcher类 2.2.1&#xff0c;Matcher的常用方法find() 2.2.2&a…

vue3-Vite原理

1. vite的优势 1. 极速的服务启动2. 轻量快速的预加载.....2. 对vite的理解&#xff08;和webpack对比说明&#xff09; webpack要经过打包&#xff0c;然后在开发阶段启动服务器vite不需要打包 下图的"准备"就是编译的意思。 css的内容会编译程一个字符串。 组件会…

[SSM]手写Spring框架

目录 十一、手写Spring框架 第一步&#xff1a;创建模块myspring 第二步&#xff1a;准备好要管理的Bean 第三步&#xff1a;准备myspring.xml配置文件 第四步&#xff1a;核心接口实现 第五步&#xff1a;实例化Bean 第六步&#xff1a;给Bean属性赋值 第七步&#xff…