实战:Zabbix 监控平台的部署与自定义监控




前言

  如今监控系统作为保障企业 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.5
zabbix 版本6.0
主机IP
zabbixserver192.168.88.5
web1192.168.88.100
web2192.168.88.200

1、安装前准备

  监控服务器需要使用 Web 页面进行操作,且为 php 页面,所以需要部署 LNMP 环境。
  为了方便学习部署,关闭服务端 / 客户端的防火墙、关闭 SELinux。

2、准备软件包仓库

  • zabbix 官网下载地址:

https://www.zabbix.com/cn/download?zabbix=6.0&os_distribution=red_hat_enterprise_linux&os_version=8&components=server_frontend_agent&db=mysql&ws=nginx

  • zabbix 中文手册:

https://www.zabbix.com/documentation/6.0/zh

  • 配置软件包仓库:
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 -y install 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 
# 创建的数据库名称 授权用户 用户密码
105 DBName=zabbix
121 DBUser=zabbix
129 DBPassword=zabbix

2) 配置 Zabbix_agent 客户端
  Zabbix_server 依靠 agent 采集并上传监控数据,所以即使 zabbix 主机已安装服务端,也仍需安装客户端监控此控制节点。

# 为客户端配置控制节点的主机名,这将显示在 web 管理页面
[root@zabbixserver ~] vim /etc/zabbix/zabbix_agentd.conf 
182 Hostname=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 0      511          0.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 -y install zabbix-agent

# 修改 agent 配置文件
[root@web1 ~] vim /etc/zabbix/zabbix_agentd.conf 
117 Server=127.0.0.1,192.168.88.5   # agent 只接受此 IP 或 IP 段的服务器的传入连接
182 Hostname=web1                   # 本机主机名

# 设置 agent 开机自启
[root@web1 ~] systemctl enable --now zabbix-agent.service
[root@web1 ~]	 ss -ntulp | grep 10050
tcp   LISTEN 0      128          0.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 -y install zabbix-agent

# 修改 agent 配置文件
[root@web1 ~] vim /etc/zabbix/zabbix_agentd.conf 

117 # Server=127.0.0.1              # 被动监控方式下,需禁用服务端的接入
142 StartAgents=0                   # 创建被动监控下子进程的并发数量,增加数目
                                    # 可以提高数据收集的效率,0 则禁用被动监控
171 ServerActive=192.168.88.5       # 开启主动监控连接 server 的 IP:端口,默认为 10051
182 Hostname=web2                  
242 RefreshActiveChecks=120         # 主动检查间隔,每隔 120s 客户端刷新一次监控项配置
                                    # 前期调试可以设置短一些,等后期监控稳定可以变长,减少消耗

# 设置 agent 开机自启
[root@web1 ~] systemctl enable --now zabbix-agent.service
[root@web1 ~] ss -ntulp | grep 10050  # 可以发现 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 模板的主机常用监控指标如下:

  1. Space utilization:以百分比显示的磁盘利用率
  2. Used space:已用磁盘空间
  3. Available memory:可用内存
  4. CPU idle time:CPU空闲时间。不宜过低。
  5. Load average (1m avg)、Load average (5m avg)、Load average (15m avg):CPU1分钟、5分钟、15分钟的平均负载。这个值不应长期大于核心数。
  6. Interface eth0: Bits received:网卡接收到的数据量
  7. Interface eth0: Bits sent:网卡发送的数据量
  8. Number of processes:系统运行的进程数
  9. 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 for source 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/bash
  
cnt=$(mysql -uroot -e "show slave status \G" | grep -i 'running:' | grep -ci 'yes')
if [ $cnt -eq 2 ];then
        echo 1
else
        echo 0
fi
[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 python3

import 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 更深层次探索的兴趣,或者在你 构建监控体系 时提供到实际帮助,请不要吝啬你的点赞和分享,让更多的技术同仁 受益

  文章到这里就结束了,希望我的分享能为你的技术之旅增添一抹亮色。如果你喜欢这篇文章,请点赞收藏支持我,给予我前行的动力!🚀



  • 23
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值