文章目录
前言
如今监控系统作为保障企业 IT 基础设施稳定运行的重要工具,其重要性日益凸显。Zabbix,作为一款功能强大且 **
开源
** 的监控软件,不仅能够对网络和服务器状态进行全面监控,还通过灵活的 **
通知机制
** ,确保了问题能够及时被响应和处理。本文将带领大家深入了解 Zabbix 的安装、配置以及如何利用其强大的 **
自定义监控
** 功能,实现对各种服务和应用的监控,旨在帮助技术界的新老朋友们快速掌握 Zabbix 的使用和管理,提升对于 IT 系统的 **
监控能力
**。
**
大家好,我是技术界的小萌新,今天要和大家分享一些干货。在阅读之前请先点赞👍,给我一点鼓励吧!这对我来说很重要 (*^▽^*)
**
Zabbix 介绍:
Zabbix 是一款开源的企业级 **
分布式监控
** 解决方案,它能够监控网络和各种服务器的状态,包括虚拟机、应用程序、服务、数据库、网站以及云服务等的健康和完整性 。Zabbix 通过灵活的 **
通知机制
** ,使用户能够为几乎所有事件配置基于电子邮件的警报,从而快速响应服务器问题 。它还提供基于存储的数据的报告和 **
数据可视化
** 功能,使其成为容量规划的理想选择 。
Zabbix 的 **
特点
** 如下:
- Zabbix 是一套高度集成的监控解决方案。
- 可以实现企业级的开源
分布式
监控。 - Zabbix 通过 C/S 模式采集监控数据。
- Zabbix 通过 B/S 模式实现
web 管理
。
Zabbix 的 **
组件
** 有:
- zabbix agent:指标采集器,在被监控主机上采集指标数据,并将采集到的数据发送给 zabbix server。
- zabbix server:负责接收 agent 发送的数据,统计数据、管理数据。
- zabbix database:用于存储所有 zabbix 的配置信息以及监控数据,可用 Mysql,PostgreSQL。
- zabbix web:管理员通过 web 界面管理、配置以及查看相关监控信息,可用 Nginx,Apache。
- zabbix-proxy:分布式监控,用来分担 zabbix server 的压力(不是必须)。
一、环境准备
我们将要进行 Zabbix 的部署实践,并介绍其内置的功能与自定义监控项如何实现,来体会并学习 Zabbix 的完善监控解决方案。其他配置如下:
操作系统为 Rocky 8.5zabbix 版本6.0主机IPzabbixserver192.168.88.5web1192.168.88.100web2192.168.88.200
1、安装前准备
监控服务器需要使用 Web 页面进行操作,且为 php 页面,所以需要部署 **
LNMP
** 环境。
为了方便学习部署,关闭服务端 / 客户端的防火墙、关闭 SELinux。
2、准备软件包仓库
- zabbix 官网下载地址:
- zabbix 中文手册:
- 配置软件包仓库:
rpm-Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-5.el8.noarch.rpm
# 自动配置zabbix的 RPM 软件仓库
dnf makecache
# 刷新仓库信息
二、部署 Zabbix-server
1、安装 server,agent,web 等
Zabbix 已 **
集成
** 了管理监控平台所需的所有软件包与相应配置文件,包括数据库、用户 web 操作所需的 nginx 与 php 等,如果在 **
生产环境
** 不能关闭防火墙与 SELinux,也有适配的软件包,可以根据中文手册自行配置。
# 安装服务组件,及数据库和中文汉化包
dnf -yinstall zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent mysql-server glibc-langpack-zh
2、配置 Zabbix 数据库
1) 创建 Zabbix 数据库
[root@zabbixserver ~] systemctl enable mysqld --now[root@zabbixserver ~] mysql
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;# 创建并设置数据库专用字符集
mysql> create user zabbix@localhost identified by 'zabbix';# 创建 zabbix 服务用户
mysql> grant all privileges on zabbix.* to zabbix@localhost;# 配置用户的 zabbix 数据库权限
mysql>set global log_bin_trust_function_creators =1;# 打开函数生成器,在后续生成提高查询效率的触发性函数
mysql> quit;# 登录验证 用户、密码、数据库 是否配置错误[root@zabbixserver ~]# mysql -uzabbix -pzabbix -hlocalhost zabbix
2) 导入 sql 数据到 Zabbix 数据库
**
确认无误
** 后导入 zabbix 为我们准备的 sql 数据库文件
zcat 是 gzip 工具套件的一部分,可以查看 gzip 压缩内容,并输出到终端,我们把数据库信息通过 zcat 导入到数据库中
**`zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -pzabbix zabbix@
3、修改配置文件
1) 为 Zabbix_server 配置数据库
如果有数据库配置与上述不一致,需在此处填写自定义的配置。
[root@zabbixserver ~]vim /etc/zabbix/zabbix_server.conf
# 创建的数据库名称 授权用户 用户密码105DBName=zabbix
121DBUser=zabbix
129DBPassword=zabbix
2) 配置 Zabbix_agent 客户端
Zabbix_server 依靠 agent 采集并上传监控数据,所以即使 zabbix 主机已安装服务端,也仍需安装客户端监控此控制节点。
# 为客户端配置控制节点的主机名,这将显示在 web 管理页面[root@zabbixserver ~]vim /etc/zabbix/zabbix_agentd.conf
182Hostname=zabbixserver
3) 配置 Nginx 发布 Zabbix 的 Web 页面
[root@zabbixserver ~]vim /etc/nginx/conf.d/zabbix.conf
# 打开 2,3 行的注释即可开放 8080 端口发布 web 管理页面1 server {2# listen 8080;3# server_name example.com;
4) 启动服务
# 以上配置完毕,设置服务开机自启[root@zabbixserver ~] systemctl enable--now zabbix-server zabbix-agent nginx php-fpm
[root@zabbixserver ~]# ss -ntulp | grep :8080
tcp LISTEN 05110.0.0.0:8080 0.0.0.0:* users:(("nginx",pid=15993,fd=6),("nginx",pid=15992,fd=6),("nginx",pid=15991,fd=6))
4、Zabbix_server 初始化
进入 8080端口的 web 页面进行 Zabbix_server 的初始化安装。更改默认语言为中文,点击下一步,检查必要条件,再点击下一步,因为是从官方软件包库安装的环境,所以环境一般是没有问题的,接下来到了配置数据库连接。
输入设置的 MySQL 数据库用户配置信息,如果输入错误,会提示无法连接到数据库
进行 Zabbix 服务端主机名的设置,选择 Asia/Shanghai 时区。
最后进行汇总,并完成安装,生成配置文件为 **
/etc/zabbix/web/zabbix.conf.php
**
默认账户为 **
Admin
** ,密码为 **
zabbix
**,登录以进入 **
Dashboard
** 进行 web 管理,以下继续添加被监控主机。
三、部署 Zabbix_agent 监控端
在 web1,web2 主机安装 zabbix-agend 客户端软件,如果被控主机过多如数十个也可以使用 ansible 剧本的方式进行部署。添加监控端有两种方式,这里逐步介绍。
1、被动监控
**
被动监控
** 是 zabbix 的默认模式,在被监控主机较少的情况下,配置比较简单,但需要一个一个在 web 页面添加被控主机,如果数量多了就比较麻烦。值得注意的是,由于 server 需要向 agent 建立网络连接以索要数据,所以如果被控主机过多,可能在 server 负载较高时导致不能及时获取最新数据。
让我们在 web1 主机安装客户端,修改配置,并启动服务。
# 配置本地 zabbix 软件包仓库[root@web1 ~]rpm-Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-5.el8.noarch.rpm
[root@web1 ~] dnf -yinstall zabbix-agent
# 修改 agent 配置文件[root@web1 ~]vim /etc/zabbix/zabbix_agentd.conf
117Server=127.0.0.1,192.168.88.5 # agent 只接受此 IP 或 IP 段的服务器的传入连接182Hostname=web1 # 本机主机名# 设置 agent 开机自启[root@web1 ~] systemctl enable--now zabbix-agent.service
[root@web1 ~] ss -ntulp|grep10050
tcp LISTEN 01280.0.0.0:10050 0.0.0.0:* users:(("zabbix_agentd",pid=16242,fd=4)
这里可以总结 zabbix 客户端的端口为 10050,服务端的端口为 10051。
2、手动添加监控主机
在 server 的 web 管理页面添加默认为 **
被动监控
** 模式的主机。
添加步骤:1 选择主机 > 2 创建监控主机 > 3 添加主机名 > 4 使用监控模板 > 5 选择 Templates 分组 > 6 使用 zabbix agent 客户端默认监控模板 > 7 确定监控模板选择 > 8 群组为被控主机的分组,选择 Linux servers > 8 网络接口选择 agent,并填写 web1 的 IP > 9 最后选择添加即成功
- 主机:安装了agent,被监控的主机。
- 群组:根据需求,将多台主机加入到一个主机组中,方便管理,系统默认已经创建了一些主机组。
- 模板:是监控项的集合。将模板应用到主机,主机就可以直接拥有模板中的所有监控项,系统中默认已经创建了一些模板。
**
注意
** :以下监控模板设置错误,均需设置为 Linux by Zabbix agent (Zabbix agent active),因为 Zabbix agent 模板的监控项很少。
等待一些时间,待服务端向客户端索要监控数据后,可用性即可从灰到绿,如果 ZBX 由绿色变为 红色,则可能是 agent 客户端配置有误、服务没有启用等,需要自行检查。
3、主动监控
主动监控适用于 **
大规模监控
** ,server 负载过高的情况下,在主动监控模式下,Zabbix agent 需要知道 server 的 **
地址和端口
** ,并且在 agent 的配置中启用主动模式。这样配置后,agent 会获取被控主机的模板监控项,并定期将收集的数据发送到指定的 server。这种模式提高了数据收集的效率,尤其是在大规模监控部署中,接下来我们进行 web2 的 agent 主动监控配置。
# 配置本地 zabbix 软件包仓库[root@web1 ~]rpm-Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-5.el8.noarch.rpm
[root@web1 ~] dnf -yinstall zabbix-agent
# 修改 agent 配置文件[root@web1 ~]vim /etc/zabbix/zabbix_agentd.conf
117# Server=127.0.0.1 # 被动监控方式下,需禁用服务端的接入142StartAgents=0# 创建被动监控下子进程的并发数量,增加数目# 可以提高数据收集的效率,0 则禁用被动监控171ServerActive=192.168.88.5 # 开启主动监控连接 server 的 IP:端口,默认为 10051182Hostname=web2
242RefreshActiveChecks=120# 主动检查间隔,每隔 120s 客户端刷新一次监控项配置# 前期调试可以设置短一些,等后期监控稳定可以变长,减少消耗# 设置 agent 开机自启[root@web1 ~] systemctl enable--now zabbix-agent.service
[root@web1 ~] ss -ntulp|grep10050# 可以发现 10050 端口已消失,说明主动监控设置成功
4、批量添加被控主机
如果被控主机过多,可以配置 **
主动发现规则
** ,来批量添加此规则下的被控主机,我们使用次方式来添加 web2,感受其功能。
1、创建自动发现规则
配置步骤:1 侧边栏 自动发现规则 > 2 创建规则 > 3 选择匹配的 IP 范围> 4 更新间隔 1 分钟 > 5 检查方式为 SSH 22 端口 > 6 三者均为匹配 IP 地址> 7 启用规则并更新 。
- 检查规则可以选择发现其他服务的端口,如 FTP、HTTP、telnet 等。
- IP 范围规则与端口格式都很灵活。
- 设备唯一标识:IP 地址,该模式 server 不会发现 IP 相同的主机。
- 主机名称:server 中的主机参数,为此主机 IP,或选择 DNS域名。
- 可见的名称:这个参数定义了自动发现的设备在 Zabbix web页面中的显示名称。
2、创建满足自动发现规则后的动作
配置步骤:1 侧边栏 动作,发现动作 > 2 创建动作 > 3 选择条件逻辑为“和”,添加条件 > 4 触发条件为刚创建的自动发现规则,可配置其他触发条件 > 5 配置触发后的操作 > 6 添加到主机群组并链接监控模板,最后应用。
主动监控模式下的 agent 监控模板需要换为适配主动监控方式的 Linux by Zabbix agent
active
。触发条件与操作动作灵活多样,除了设置为 主机在线 1m 则添加监控,也可设置为 离线 24h 则删除主机监控,更符合大规模分布式集群下的需求。
容易出错的地方与解决思路:
**
!注意
** : 如果 server 服务端自动发现中 **
可见名称
** 与 agent 客户端配置中记录的 Hostname 本地主机名配置不一致会导致互相检查不到对方,导致出错,server 能主动发现 客户端,但是客户端无法连接,不能取得监控模板并采集数据。
以上容易出的错是因为 agent 会检查自己的 Hostname 是否与 server 配置监控模板的主机可见名称一致,server 也依靠检查 可见名称 是否与 agent 的域名解析一致再进行连接,两者缺一个环节就会无法互联,解决方法如下:
- 方法 1 : server 服务端 自动发现规则 的 可见名称 设为 “DNS 名称”,添加 server,agent 的关于 Hostname 的域名解析。
- 方法 2 : agent 客户端配置的 Hostname 为本机 IP 即可,双方即可无需域名解析,即可互相检查到对方。
- 主动监控的逻辑 可以发现自动发现的主机通过动作添加了监控模板,此时 ZBX 可用性不可查询,正常现象,因为 server 靠主动与 agent 10050 端口建立连接的方式进行 agent 的被动监控,从而主动获取其可用性,但是启用主动监控的 agent 会周期性的上传自己的数据给 server,自己的 10050 端口已经关闭,它会根据配置文件中 ServerActive 的服务器 IP:端口 去主动连接 server。
四、监控对象、指标、模板
1、监控对象
可以运用 Zabbix 进行监控的对象有很多,可以大致分为以下几个方面:
- 系统层监视:
系统监控:CPU利用率、内存利用率、磁盘IO速度、进程数量、内核完整性等
网络监控:网络设备进出口流量、工作负载、网络延迟、丢包率等
- 服务软件监控:
消息中间件:kafka、RocketMQ、RabbitMQ 等
Web服务容器:Nginx、Tomcat、httpd、docker、kubernetes等
数据库及缓存系统:MySQL、PostgreSQL、MongoDB、Redis、ElasticSearch 等
存储系统:Ceph、Nas 等
- 业务层监控
如电商网站销售量、转化率、新客户/回头客数量等
业务接口:登录数、注册数、订单量、支付数量等
监控关键业务应用程序的性能和可用性。
2、常用监控指标
Linux by Zabbix agent 模板的主机常用监控指标如下:
- Space utilization:以百分比显示的磁盘利用率
- Used space:已用磁盘空间
- Available memory:可用内存
- CPU idle time:CPU空闲时间。不宜过低。
- Load average (1m avg)、Load average (5m avg)、Load average (15m avg):CPU1分钟、5分钟、15分钟的平均负载。这个值不应长期大于核心数。
- Interface eth0: Bits received:网卡接收到的数据量
- Interface eth0: Bits sent:网卡发送的数据量
- Number of processes:系统运行的进程数
- Number of logged in users:已登陆的用户数 查看更多需要指标方法:1 监测 > 2 最新数据 > 3 筛选器
3、常用监控模板
Zabbix 为用户提供了很多开箱即用的模板供大家使用,具体需要什么模板可以搜索如下关键字:
IPMI 模板: 用于监视服务器硬件,如温度电压、风扇工作状态、电源状态 等 HTTP 模板:用于对很多服务的
HTTP 模板:HTTP状态(UP/DOWN)进行监控,例 如:Apache、Nginx等。
Zabbix agent 模板:用于对Apache、HAProxy、Nginx、PHP-FPM、 RabbitMQ、等应用监控。
JMX 模板: 用于监控Java应用程序。
ODBC 模板: 用于数据库(MySQL、Oracle、PostgreSQL)的监控模板
更多官方模板:https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates
4、数据图表乱码解决方法
Zabbix 的监控图表会出现中文字符乱码的问题,这时候只需要查找 web 字体并替换即可解决问题。
# 查找 zabbix 的 web 字体所在位置,并用其他字体替换。[root@zabbixserver alternatives]find / -name fonts
/usr/share/zabbix/assets/fonts
/usr/share/fonts
/etc/fonts
/CloudrResetPwdAgent/depend/jre/lib/fonts
/boot/grub2/fonts
[root@zabbixserver alternatives]cd /usr/share/zabbix/assets/fonts
[root@zabbixserver fonts] ll
total 0
lrwxrwxrwx 1 root root 33 Jul 24 09:28 graphfont.ttf -> /etc/alternatives/zabbix-web-font
# 这里提前备好了 windows 的中文字体并替换,名称不变。[root@zabbixserver alternatives]mv ~/SIMKAI.TTF zabbix-web-font
mv: overwrite 'zabbix-web-font'? y
[root@zabbixserver alternatives]
五、自定义监控项
基本的系统监控 Zabbix agent 模板已经提供了很多监控项可供使用,但是公司内的业务监控可能需要更自定义的监控项来完成目标。首先查看创建整个监控模板的大致流程:
1 侧边栏配置 > 2 选择模板,新建 > 3 填写模板属性 > 4 新建监控项 > 5 创建触发器 > 6 创建触发器动作,执行告警或脚本 > 7 选择操作的告警媒介
其中自定义监控项需要在 Zabbix agent 的配置文件中创建 **
自定义的 key
** ,该 key 配置了相应的 linux 命令或脚本,它们执行后的返回值作为监控的数据,配置号自定义 key 后即可在 server 端添加该监控 **
键值
** 到监控项中。流程中的告警媒介需要提前配置好,可以选择邮件报警、钉钉报警、微信报警等。我们通过以下自定义监控 Mysql 的主从状态和主从复制延迟的流程来学习其自定义监控原理。
1、自定义 Mysql 主从状态及延迟 监控项
1) Mysql 主从状态监控
监控 mysql 主从的思路是检查 **
show slave status
** 这条命令的返回中是否都有 IO 线程与 SQL 线程正在运行的信息,自定义此监控项流程如下:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting forsource to send event
......
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
......# 提前测试好命令的返回,grep -c 用于统计匹配的行数,看 yes 行数是否为 2。[root@web2 script] mysql -e"show slave status \G"|grep-i'running:'|grep-ci'yes'2# 返回正常,写如下脚本,若是统计数量不等于2,则返回0,说明 mysql 主从状态正常# 脚本中 mysql 需指定有权限用户,root 或新建 zabbix 权限用户,否则 agent 不能登录 mysql 获取监控数据[root@web2 script]vim mysql-status.sh
# **`/bin/bashcnt=$(mysql -uroot-e"show slave status \G"|grep-i'running:'|grep-ci'yes')if[$cnt-eq2];thenecho1elseecho0fi[root@web2 script]chmod +x mysql-status.sh
[root@web2 script] ./mysql-status.sh
1# 脚本测试正常,准备启用此脚本在 zabbix 的自定义 key 中。
自定义 key 与其返回值,作为自定义监控项的键值参数依据,需要在 **
/etc/zabbix/zabbix_agentd.d/
** 目录下的文件中被定义,且格式如下:
**
UserParameter=<key>,<shell command>
**
UserParameter:这是Zabbix配置文件中的关键字,用于定义用户自定义监控项。
<key>:这是用户定义的监控项标识符,也就是监控项的 key。它是一个字符串,用于唯一标识监控项 。
<shell command>:这是要执行的 shell 命令,通常是一个 Linux 命令或脚本。当 Zabbix agent 执行这个监控项时,将运行这个命令并返回结果。也可以实现在 zabbix server 监控项中向此脚本传入不同变量,从而获取不同监控值的返回,方式如下:
UserParameter= **key[*]
** , /bin/script $1 $2 在 server 自定义监控项中输入键值 key[first second],即可成功传入 2 个参数给脚本。
[*],表示传入所有的参数,$1 $2,表示前方传入的位置变量1和2。
我们接下来填写自定义 key 的配置:
# 写入自定义 key: mysql-status, mysql-status.sh 脚本执行的返回值作为监控值,1 表示主从状态正常,2 表示主从状态异常。[root@web2 script]vim /etc/zabbix/zabbix_agentd.d/watchmysql.conf
UserParameter=mysql-status, /etc/zabbix/scripts/mysql-status.sh
# 重启 agent,读取配置[root@web2 script]systemctl restart zabbix-agent
写好脚本后,一般来说在 Zabbix server 端可以进行测试,只需要 **
zabbix-get
** 软件包的命令 **
zabbix_get -s <hostname> -k <key>
** 即可得到监控脚本的返回值,但是由于我们的 web2 是主动监控,所以 server 无法通过 10050 端口连接到 agent ,所以我们直接用自定义监控项测试返回是否正常,流程如下:
侧边栏选择配置 --> 创建模板 --> 选择并自定义监控项配置自定义 key --> web2 主机应用此监控项–> 等待片刻,检查 web2 最新数据
**
注意
** : 不同来源的键值,类型不同,agent 被动监控传入的类型为 “Zabbix客户端”,主动监控选择 ”主动式“。
在主机中点击主机名称,选择此模板更新应用
稍等片刻查看最新数据可看到监控成功。
2) Mysql 主从复制延迟监控
如上同理,进行 Mysql 主从复制延迟的监控,主从复制延迟的思路为获取 show slave status 中的 **
Seconds_Behind_Master
** 数值,单位为秒,表示了主从延迟的时间,一般为0,大于0则说明发生了主从延迟,我们作出如下配置:
# 一条命令就可以找到主从复制延迟的返回值[root@web2 zabbix] mysql -uroot-e"show slave status\G"|awk'/Seconds_Behind_Master/{print $NF}'0# 不用脚本,直接进行配置[root@web2 zabbix]vim zabbix_agentd.d/watchmysql.conf
UserParameter=mysql-status, /etc/zabbix/scripts/mysql-status.sh
UserParameter=mysql-delay, mysql -uroot-e"show slave status\G"|awk'/Seconds_Behind_Master/{print $NF}'[root@web2 zabbix] systemctl restart zabbix-agent
进入 Mysql 模板,添加此自定义 key 监控项,稍等片刻即可在最新数据下看到监控成功。
2、创建钉钉告警媒介
1) 创建钉钉机器人
钉钉告警原理与其他如微信等告警原理一致,都是通过它们提供的消息机器人进行 **
Webhook
** 协议的通信。Webhook 是一种应用程序之间的 **
实时通信
** 方式,它允许一个系统(源)在特定事件发生时,通过 **
HTTP请求
** (通常是POST请求)向另一个系统(目标)发送消息或数据。而 Zabbix 就支持 Webhook 的通信媒介,我们首先创建钉钉机器人的授权 URL。
钉钉的机器人需要在钉钉电脑端操作,手机不允许。流程如下:
1 手机钉钉创建单人群聊 --> 2 电脑钉钉选中该群,进入群设置 --> 3 群设置中添加 “智能群助手” --> 4 选择添加“自定义机器人” --> "选择自定义关键词,zabbix 发送信息必须包含此关键词 --> 复制 Webhook 的 URL
2) Zabbix 创建告警媒介
通过以上的步骤,拿到了关键的钉钉机器人的 webhook 授权 URL ,接下来就可以在 Zabbix 中创建告警媒介了。流程如下:
1 侧边栏选择 管理 媒介 --> 2 创建媒介类型 --> 3 报警媒介类型选择 “脚本” --> 4 填写需要发送的消息模板 --> 5 确认更新
其中的 python 告警脚本已经为大家准备好了,但是告警脚本需要放在特定的位置 **
/usr/lib/zabbix/alertscripts/
** 下,才可以被服务端识别。
# python 告警模板,有条件的也可以让开发的同事帮忙写一个,或者让 AI 效劳。# 在如下 url 位置填入钉钉机器人的 webhook 授权 URL 即可。[root@zabbixserver ~]vim /usr/lib/zabbix/alertscripts/dingalert.py
# **`/usr/bin/env python3import json
import requests
import sys
def send_msg(url, remiders, msg):
headers ={'Content-Type':'application/json; charset=utf-8'}
data ={"msgtype":"text",
"at":{"atMobiles": remiders,
"isAtAll": False,
},
"text":{"content": msg,
}}
r = requests.post(url, data=json.dumps(data), headers=headers)return r.text
if __name__ =='__main__':
msg = sys.argv[1]
remiders =[]
url ='钉钉机器人Webhook地址'# 注意此处需输入机器人的webhook地址
print(send_msg(url, remiders, msg))[root@zabbixserver ~]chmod +x /usr/lib/zabbix/alertscripts/dingalert.py
消息脚本创建完毕,可以提前测试一下,方法如下,钉钉群中已成功显示。
[root@zabbixserver ~] /usr/lib/zabbix/alertscripts/dingalert.py 'Warn! 测试消息'# 注意消息中要包含关键字 Warn{"errcode":0,"errmsg":"ok"}
我们进行后续的步骤,创建报警媒介。
其中的脚本参数 **
{ALERT.MESSAGE}
** ,代表着该报警媒介的“报警消息”,在触发器触发动作后,动作为调用报警媒介进行报警,然后报警媒介为使用脚本告警,最后就通过该脚本参数把报警消息传入脚本中,脚本通过 Webhook 的通信方式 POST 发送消息给钉钉机器人,完成整个流程。
更多可支持的宏(变量参数)如下,可运用到报警媒介中。
https://www.zabbix.com/documentation/6.0/zh/manual/appendix/macros/supported_by_location?hl=ALERT.MESSAGE
3) 用户应用告警媒介
告警媒介配置后没有对象,也将无法工作,需要将此告警媒介分配给用户,此用户拥有这样的告警媒介才允许“动作”触发该告警。添加报警媒介,类型选择提前配置好的钉钉机器人脚本,收件人为该用户,下面为此不同类型的警报激活该报警设置。
3、创建触发器动作
1) 创建触发器
准备好了报警媒介,需要创建 Mysql 监控模板的触发器,最后配置触发动作,即可配置完整个告警流程。
这里首先配置检查主从状态的触发器,选择事件严重性,当 mysql-status 键的值为 0 时说明主从状态异常。同理配置主从延迟,设置大于等于 10 s 即触发报警。
2) 创建动作
接下来创建动作,动作为发送消息,或者其他恢复操作( **
救援动作
** ),发送消息的话可以发送给用户,通过什么报警媒介,如脚本,用户需要配置该报警媒介,才允许使用该报警媒介的方式进行报警。下面的条件可以设定确认此事件后就不触发动作,防止一直发送消息。动作中的操作步骤之间的逻辑稍微有些复杂,可以按如下理解。
如果有多个步骤的话,每个步骤按 **
顺序执行
** ,按 “默认操作步骤时间” 为每一步骤之间执行后的分隔时间,或者按当前步骤设置的 “持续时间” 设置,其他如下示例:
- 第一步:“1-1” ,表示步骤 1 执行到 步骤 1,即第 1 步执行 1 次,1-0 即表示第一步执行无限次。
- 第二步:“2-2” ,表示步骤 2 执行到 步骤 2,即执行 1 次。
- 第三步:“3-4” ,表示步骤 3 执行到 步骤 4 ,即这一大步将执行 2 次,换句话说,第三大步需要由3、4两个小步组成。
- 第四步:“5-7” ,表示第四步持续时长为3步的时长,换句话说,第四大步需要有5、6、7三个小步组成,即第四大步执行 3 次。
4、测试告警
最后让我们测试一下 Mysql 主从服务器状态的告警是否成功,手动关闭 Mysql 主服务器,可以看到以下现象,Web 页面中出现告警,钉钉机器人也发出警告,说明测试告警成功。
这一套流程基本可以应用到大部分服务器告警业务,如果告警的条件十分复杂,如一段时间周期内多次出现异常,才发出告警,可以在触发器中设置 **
多种表达式
** ,动作中设置 **
多种触发器条件
** 才激活动作等等可以满足更多复杂的告警需求。
总结
通过本篇文章的深入探讨,我们不仅学习了 Zabbix 的基本概念和 **
核心组件
** ,还通过实际操作案例,掌握了从环境准备到 Zabbix server 和 agent 的 **
部署
** ,再到自定义监控项和 **
告警设置
** 的完整流程。
Zabbix 的灵活性和可扩展性使其成为众多企业的首选监控解决方案。通过本文的分享,希望能够帮助读者们在 **
技术实践
** 中更加得心应手,无论是面对系统监控、服务监控还是业务监控,都能够游刃有余。
最后,如果本文能够激发你对 Zabbix 更深层次探索的兴趣,或者在你 **
构建监控体系
** 时提供到实际帮助,请不要吝啬你的点赞和分享,让更多的技术同仁 **
受益
** 。
**
文章到这里就结束了,希望我的分享能为你的技术之旅增添一抹亮色。如果你喜欢这篇文章,请点赞收藏支持我,给予我前行的动力!🚀
**
版权归原作者 云端梦留白 所有, 如有侵权,请联系我们删除。