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 上的服务重新上线。
相关文章:
zabbix之钉钉告警
钉钉告警设置 我们可以将同一个运維组的人员加入到同一个钉钉工作群中,当有异常出现后,Zabbix 将告警信息发送到钉钉的群里面,此时,群内所有的运维人员都能在第一时间看到这则告警详细。 Zabbix 监控系统默认没有开箱即用…...
《OpenCV计算机视觉》—— 对图片进行旋转的两种方法
文章目录 一、用numpy库中的方法对图片进行旋转二、用OpenCV库中的方法对图片进行旋转 一、用numpy库中的方法对图片进行旋转 numpy库中的 np.rot90 函数方法可以对图片进行旋转 代码实现如下: import cv2 import numpy as np# 读取图片 img cv2.imread(wechat.jp…...
Python 错误 ValueError 解析,实际错误实例详解 (一)
文章目录 前言Python 中错误 ValueError: No JSON object Could Be Decoded在 Python 中解码 JSON 对象将 JSON 字符串解码为 Python 对象将 Python 对象编码为 JSON 字符串Python 中错误 ValueError: Unsupported Pickle Protocol: 3Python 中的 Pickling 和 UnpicklingPython…...
[java][git]上传本地代码及更新代码到GitHub教程
上传本地代码及更新代码到GitHub教程 上传本地代码 第一步:去github上创建自己的Repository,创建页面如下图所示: 红框为新建的仓库的https地址 第二步: echo "# Test" >> README.md 第三步:建立g…...
react antd table expandable defaultExpandAllRows 不生效问题
原因:defaultExpandAllRows只会在第一次渲染时触发 解决方案:渲染前判断table 的datasource 数据是否已准备好 {pageList.length > 0 ? (<TablerowSelection{rowSelection}columns{columns}dataSource{pageList}style{{ marginTop: 24 }}pagina…...
什么是领域驱动设计?
什么是领域驱动设计? 领域驱动设计(Domain-Driven Design,简称DDD)是一种面向对象的软件开发方法,它强调将软件系统的设计和实现过程与业务领域紧密结合,通过深入理解和建模业务领域,从而实现高…...
信息安全工程师(1)计算机网络分类
一、按分布范围分类 广域网(WAN): 定义:广域网的任务是提供长距离通信,运送主机所发送的数据。其覆盖范围通常是直径为几十千米到几千千米的区域,因此也被称为远程网。特点:连接广域网的各个结点…...
利士策分享,探索无界:心灵之旅,发现未知精彩
利士策分享,探索无界:心灵之旅,发现未知精彩 梦想的种子,在心田生根发芽 正如每一颗种子都蕴含着生命的奥秘,每个人心中那颗探索的种子,也藏着对未知世界的渴望与追求。它告诉我们,成长不仅仅…...
Jetson 部署 Faster Whisper
文章目录 WhisperFaster Whisper安装使用尝试WSL部署尝试 Jetson 部署时间戳 实时转录 Whisper Whisper 是一种通用语音识别模型。它是在大量不同音频数据集上进行训练的,也是一个多任务模型,可以执行多语言语音识别、语音翻译和语言识别。 测试&#x…...
测试开发基础——测试分类
四、测试分类 1. 按照测试目标分类 1.1. 界面测试 肉眼看到的任何元素都需要进行测试 界面测试(简称U测试),指按照界面的需求(一般是U设计稿)和界面的设计规则,对我们软件界面所展示的全部内容进行测试…...
【计网】数据链路层:概述之位置|地位|链路|数据链路|帧
✨ Blog’s 主页: 白乐天_ξ( ✿>◡❛) 🌈 个人Motto:他强任他强,清风拂山岗! 💫 欢迎来到我的学习笔记! ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ 1. 在OSI体系结构中的位置 1. 位置:数…...
【Android】NestedScrollView的简单用法与滚动冲突、滑动冲突
一、NestedScrollView 1. 什么是 NestedScrollView NestedScrollView 是 Android 中一个用于处理垂直方向滚动的布局组件,它继承自 FrameLayout,同时支持嵌套滑动(Nested Scrolling)机制。相比于传统的 ScrollView,N…...
【LeetCode】每日一题 2024_9_13 预算内的最多机器人数目(滑动窗口、单调队列)
LeetCode 启动! 每日一题的题解重新开始连载! 题目:预算内的最多机器人数目 题目链接:2398. 预算内的最多机器人数目 题目描述 代码与解题思路 func maximumRobots(chargeTimes []int, runningCosts []int, budget int64) (an…...
TypeScript中 any和unknown 的区别
1、给其他变量赋值 any可以给其他类型的变量重新赋值; 但unknown是不行的,unknown 可以保持类型安全,从而减少潜在的错误; 2、使用类型上的方法 any可以用类型上的方法,unknown是不可以的...
道可云人工智能元宇宙每日资讯|第五届深圳国际人工智能展(GAIE)在深圳会展中心举行
道可云元宇宙每日简报(2024年9月12日)讯,今日元宇宙新鲜事有: 成都:最高1000万元,研发川藏线数字文旅元宇宙空间 近日,成都市科学技术局启动2025年成都市第一批科技项目和第一批“常年申报”市…...
Bootstrap布局实例(偏移列)
偏移是一个用于更专业的布局的有用功能。它们可用来给列腾出更多的空间。例如,.col-xs-* 类不支持偏移,但是它们可以简单地通过使用一个空的单元格来实现该效果。 为了在大屏幕显示器上使用偏移,请使用 .col-md-offset-* 类。这些类会把一个…...
IP网络广播服务平台任意文件上传漏洞
文章目录 免责声明搜索语法漏洞描述漏洞复现修复建议 免责声明 本文章仅供学习与交流,请勿用于非法用途,均由使用者本人负责,文章作者不为此承担任何责任 搜索语法 icon_hash"-568806419"漏洞描述 该系统在upload接口处可上传任…...
详细阐述Activity的生命周期
目录 1. onCreate(): 2. onStart(): 3. onResume(): 4. onPause(): 5. onStop(): 6. onRestart(): 7. onDestroy(): 活动生命周期图: 特别说明: 例子ÿ…...
spring boot+vue3学习之旅
前言 使用的是黑马程序员的教程,所有资料都来自于它的公众号,侵权即删,这里只做记录学习,然后我还遇到一个问题,不知道为啥idea每次打开一个新项目,maven路径就要重装,很麻烦。 新建项目 之…...
vue-watch监听功能(侦听器)详解使用
在Vue中,watch侦听器允许我们观察和响应Vue实例上数据的变化。当被侦听的数据发生变化时,可以执行异步操作或开销较大的操作,这是computed属性可能不适合的场景。watch侦听器提供了更灵活的方式来处理数据变化时的副作用。 基本用法 watch选…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
