Lazy loaded image
监控
Lazy loaded imagezabbix
字数 9886阅读时长 25 分钟
2021-7-2
2025-8-11
type
status
date
slug
summary
tags
category
icon
password

Zabbix 介绍

Zabbix 是一个企业级分布式开源监控解决方案,支持实时监控数千台服务器,虚拟机和网络设备,采集百万级监控指标,适用于任何IT基础架构、服务、应用程序和资源的解决方案。zabbix使用场景:
notion image
Zabbix 是一个高度成熟完善的网络监控解决方案,包含了多种功能
notion image

Zabbix 架构

Zabbix主要有几个组件构成,分别介绍如下: Zabbix server:Zabbix的核心组件,是所有配置信息、统计信息和操作数据的核心存储器。它主要负责接收客户端发送的报告和信息,同时,所有配置、统计数据及配置操作数据均由其组织进行。 Zabbix agent:Zabbix agent部署在被监控主机上,能够主动监控本地资源和应用程序,并负责收集数据发往Zabbix server端或Zabbix proxy端。 Zabbix Database Storage:主要用于存储数据,所有配置信息和Zabbix收集到的数据都被存储在数据库中。常用的存储设备有MySQL、Oracle、SQLite等。 Zabbix Web界面:Zabbix提供的GUI接口,通常(但不一定)与Zabbix server运行在同一台物理机器上。 Zabbix proxy代理服务器:可选组件,常用于分布监控环境中,代理server可以替Zabbix server收集性能和可用性数据,汇总后统一发往Zabbix server端。
notion image
Zabbix采集数据,使用多种方式,但是都是基于 C/S(客户端/服务器端) 或 C/P/S (客户端/代理/服务器端)架构。C/P/S架构只是在C/S架构的基础上,多安装了数据传输代理程序Proxy。通过Proxy代理采集分节点下所有客户端的数据。之后,统一提交到服务器端,在服务器端实现集中管配。
Zabbix-Server从各个被监控的客户端采集信息,被控端通过对象agent、trapper采集器以及SNMP、JMX、SSH、Telnet等协议,将数据发送到Zabbix-Server。Zabbix服务器端按照一定的格式把数据储存到数据库。当用户打开浏览器时,从数据库读取数据,然后渲染成图形图像呈现。收集数据时,按照用户配置的各种触发条件,向用户发送警报。报警方式:web页面、短信、邮件等等。

部署

zabbix版本选择: Zabbix 通常发布两种类型的版本:LTS(Long-Term Support,长期支持)版本和非 LTS 版本。这些版本之间的主要区别在于支持周期、新功能的引入和稳定性。
LTS 版本: 支持周期更长:LTS 版本通常有更长的支持周期,通常为 5 年或更长时间。这意味着您可以长期使用该版本而不必频繁升级。 更强调稳定性:LTS 版本的主要重点是提供稳定性和安全性。它们不会引入大规模的新功能或重大更改,而是专注于 bug 修复和性能改进。 适合生产环境:LTS 版本通常更适合生产环境,特别是对于需要长期稳定性和可靠性的企业。
非 LTS 版本: 支持周期较短:非 LTS 版本的支持周期较短,通常为 1 年或更短时间。这意味着您需要更频繁地升级以获取最新的功能和修复。 新功能引入:非 LTS 版本更有可能引入新的功能、改进和扩展。这使得它们成为了尝试和测试新功能的好选择,但也可能引入一些未知的问题。 用于测试和开发:非 LTS 版本通常更适合测试、开发和实验环境,以便您可以探索和评估最新功能。
zabbix安装方式: yum方式安装:yum最大的优势在于可以联网去下载所需要的rpm包,然后自动安装,在这个工程中如果要安装的rpm包有依赖关系,yum会帮你解决掉这些依赖关系依次安装所有rpm包。 源码方式安装:安装一个源码包,是需要我们自己把源代码编译成二进制的可执行文件。如果你读得懂这些源代码,那么你就可以去修改这些源代码自定义功能,然后再去编译成你想要的。使用源码包的好处除了可以自定义修改源代码外还可以定制相关的功能,因为源码包在编译的时候是可以附加额外的选项的。 源码包的编译用到了linux系统里的编译器,常见的源码包一般都是用C语言开发的,这也是因为C语言为linux上最标准的程序语言。Linux上的C语言编译器叫做gcc,利用它就可以把C语言变成可执行的二进制文件。所以如果你的机器上没有安装gcc就没有办法去编译源码。
官方提供对多种OS版本的Zabbix 安装,可以从 ZABBIX 官方的软件仓库或镜像网站安装Zabbix。访问链接: https://www.zabbix.com/download 找到仓库的源

编译安装zabbix

我这里是在 centos 7 安装 Zabbix Server 6.0。下载zabbix源码包,并解压到指定路径
创建用户账户,对于所有 Zabbix 守护进程,需要一个非特权用户。 如果从非特权用户帐户启动 Zabbix 守护程序,它将以该用户身份运行。
安装所需依赖
在zabbix目录中编译安装
相关参数解释:

安装 PHP

在使用默认yum源时,运行yum list php-fpm*查看,只有5.4这个版本。由于CentOS7自带PHP版本为5.6,所以需要安装额外的库,也是remi的库(REMI是Remi Collect创建和维护的免费仓库,其主要目标是向Fedora和Enterprise Linux(RHEL、CentOS、Oracle、Scientific Linux)系统提供最新版本的PHP stack、全功能和其他一些软件包。)
修改php参数,网页预配置必要条件

安装 httpd

移动前端文件至web服务的根目录并授权

部署 mysql

部署mysql数据库,如果环境有mysql,那么将此步骤忽略。由于 zabbix 6.0 需要 mysql 8.0 以上,安装 mysql 8.0 的 yum 仓库文件
安装数据库
启动mysql,并设置开机自启
启动mysql后会初始化,查找mysql密码
登录mysql数据库
修改mysql的root密码,必须先修改密码,由于mysql安全机制,密码需要设置复杂点,不然修改不成功
创建zabbix库
测试zabbix用户
导入数据库架构及数据
修改配置zabbix_server文件数据库密码,修改为MySQL的zabbix用户密码

启动 zabbix-server httpd

zabbix服务添加到systemctl启动管理
要让systemd重新识别此单元文件
启动zabbix服务端,且开机自启
检查zabbix
修改时区,修改/etc/php.ini文件,修改date.timezone = Asia/Shanghai
重启http服务
如果zabbix启动报错,如下
登录MySQL,查看加密方式
查看本地mysql用户的信息
修改zabbix加密方式

web页面

登录zabbix web页面,登录地址:IP+端口(默认80),语言选择中文
notion image
配置连接数据库的ip和密码
notion image
设置zabbix主机名称
notion image
账号密码默认为Admin/zabbix
notion image
这里显示是表示zabbix server运行正常
notion image
我们将zabbix server服务停止,此时这里显示
notion image

安装字体

官方默认安装的zabbix有些监控项部分显示乱码,由于web界面显示为中文,但是系统没有相关字体支持,因此需要相关字体的支持才能正常显示
notion image
在Windows上找到控制面板-->字体-->楷体(或者其他个人喜欢的中文字体),然后将字体拷贝到windows系统其它目录,比如拷贝至windows当前用户的桌面。或者执行win+r输入fonts
notion image
将 windows 字体文件上传至 zabbix web 目录,我这里路径为/var/www/html/assets/fonts,将导入的文件改名为DejaVuSans.ttf然后更改权限为zabbix用户和组。
或者修改zabbix文件调用新字体,注意,文件名必须是ttf结尾
通常不需要重启 zabbix 及 apache,修改后的字体文件即可直接生效。刷新页面,验证字体是否生效
notion image

安装nginx

如果你不想通过httpd作为web服务器,那么可以选择使用nginx,部署nginx
启动Nginx,并设置开机启动
Zabbix 前端是 PHP 编写的,所以必须运行在支持 PHP 的 Web 服务器上。只需要简单的从 zabbix-<version>/ui/* 路径下复制 PHP 文件到 Web 服务器的 HTML 文档目录,即可完成安装。
编辑修改nginx配置文件/etc/nginx/conf.d/default.conf,如下为server字段下面的部分内容:
安装php-fpm
重启nginx、php-fpm服务
登录zabbix web页面,登录地址:IP+端口(默认80),语言选择中文。余下操作步骤与httpd操作一样,可以翻看上述笔记,这里就不在进行描述了。
notion image
官方默认安装的zabbix有些监控项部分显示乱码,由于web界面显示为中文,但是系统没有相关字体支持,因此需要相关字体的支持才能正常显示,详细操作间安装字体章节,只不过nginx这里的路径为/usr/share/nginx/html/assets/fonts/

部署Zabbix Agent

Zabbix Agent 需要安装到被监控的主机上,它负责定期收集各项数据,并发送到 zabbix server 端,zabbix server 将数据存储到数据库中,zabbix web 访问数据库在前端进行展现和绘图。Zabbix Agent 有两个版本:Zabbix Agent 和 Zabbix Agent2。Zabbix Agent2 是新一代的 Zabbix agent,在Zabbix 4.4的版本时已经推出,未来可能会代替 Zabbix agent。
在被监控的主机安装 zabbix agent2,然后添加到 zabbix server 以对其进行资源监控。官网https://www.zabbix.com/cn/download
notion image
在 Zabbix 的通信模型中,当 Zabbix Server 以主动方式采集数据,即 Server 主动连接 Agent时,Agent 充当被动接收者。因此,Zabbix Agent 需要在配置文件中显式允许 Server 端的访问,否则数据采集请求将被拒绝
启动zabbix agent
在zabbix server节点探测被监控主机连接性,返回1表示连接正常
比如查询负载

用户和组管理

系统默认有Admin和guest两个用户,其中guest,密码为空,且默认被禁用 用户组:指定可访问资源的范围,比如哪些主机可以被访问到 角色:加入角色可以控制用户是否有管理能力,还有更多的细小权限分派,比如:具体某个菜单项的访问
目前ZABBIX环境监控的业务类型不同,需要给不同业务类型的组创建用户并授权只能查看/编辑自己业务类型的主机。 系统默认用户: Admin:系统管理员,拥有所有权限。 guest:访客用户,默认密码为空,且默认处于禁用状态。 用户组(User Group):用于划定用户可访问的资源范围,例如可以访问哪些主机、主机组或模板。用户加入某个组后,就会继承该组所分配的访问权限。 角色(Role):决定用户在系统中的操作权限,包括是否具备管理能力,以及细化到具体的功能菜单访问权限。例如:可以限制某个角色只能查看监控数据,不能新增或删除监控项。

创建用户群组

管理 → 用户群组 → 创建用户群组
notion image
指定组名
notion image
选择主机组和权限
notion image

创建用户

管理 → 用户 → 创建用户
notion image
指定用户名、选择群组、设置密码、选择语言、选择主题
notion image
选择用户类型,然后添加即可(用户:只能查看,管理员:可读可编辑)
notion image
使用新用户登录并查看,因为新添加的用户test只有主机组node的权限,并且指定的用户类型是用户,所以该用户只能查看监控数据

监控项

notion image

自定义监控项

在实际生产环境中,Zabbix 自带的监控项可能无法完全满足我们的需求。例如,一些业务指标、自定义日志分析、特殊的服务健康检查等,默认模板可能并未覆盖。此时,我们需要根据 Zabbix 的规范自定义监控项(Items),以适配生产环境的具体需求。
客户端可以自定义监控项,在 Zabbix Agent 配置文件添加内容,格式如下
或者创建独立的自定义文件
在 Zabbix 中,自定义监控项可以通过 Shell 命令执行的结果 赋值给 自定义 Key,key名必须整个系统唯一。注意大小写是敏感的,Key名允许的字符为0-9a-zA-Z_-.。比如我们要采集节点TIME_WAIT 的数量
测试监控项,在Zabbix Agent 上执行测试,不需要重启服务
在 Zabbix Server上可以使用 zabbix_get 工具获取自定义监控项,但是需要重启被监控节点的zabbix-agent2服务
测试监控项
如果提示如下错误,是因为脚本中有运行 netstat 查看进程的命令,在普通用户下执行的 netstat命令,所以权限不足
notion image
登陆root用户,执行如下命令,让其它用户瞬间获得文件所有者的权限
测试没问题的话,我们就来配置监控项。打开web页面,找到要添加监控项的主机
notion image
点击右上角创建监控项
notion image
名称自定义即可,键值填写agent端定义的KEY
notion image
创建完后,点击测试
notion image
测试没问题后,点击更新,点击应用
notion image
保存后发现监控项数值为1
notion image
然后搜索添加的监控项,查看最新采集的数据
notion image

自定义带参数的监控项

在 Zabbix 中,监控项 Key 可以使用 [*] 语法来定义动态参数,从而让同一个 Key 支持多个不同的输入值,而不需要为每个参数单独创建监控项。Zabbix 解析 Key 时,[] 代表可变参数部分,* 允许多个参数。[*] 允许在 Key 中传递参数,例如 custom.key[param1, param2]。传递的参数可以在命令中使用 $1、$2 … $9 进行引用,其中$1表示第一个位置参数,依次类推。
下面我们来创建一个脚本
测试脚本
脚本测试通过后,创建配置文件
测试监控项
重启zabbix-agent2
测试通过后,我们来配置监控项,点击监控项 → 创建监控项
notion image
名称自定义即可,键值填写agent端定义的KEY
notion image
点击测试,测试通过后,点击添加。然后我么继续点击创建监控项
notion image
最后,点击应用
notion image

模板

在 Zabbix 里,如果每新增一台主机都要手动配置监控项,那对大规模集群来说就太低效了。例如,如果有 100 台服务器,每次都重复配置,不仅耗时还容易出错,还不如多看看视频学习学习。模板(Template) 的作用就是解决这个问题。它可以看作是一组监控项(Items)、触发器(Triggers)、图形(Graphs)、自动发现规则(Discovery rules)等配置的集合。当创建新主机时,只需直接应用已有的模板,就能自动继承所有的监控项,而不需要重复手动添加。这样既提高了效率,也确保了监控规则的一致性。
简单来说就是给需要监控的项组合到一起作为一个监控模板,后续有其他主机需要监控相同的项,直接使用该模板即可,不必要在手动逐个添加监控项了。

系统模板

我们在安装zabbix的时候,它内嵌了非常多的模板功能,我们在添加主机的时候,有一项就是附加模板的步骤,这样我们就在添加完主机后,看到很多的监控项信息了。zabbix自带很多模板,点击 配置 → 模版
notion image
下面我们举例使用zabbix自带模板,配置--主机--创建主机--模板--选择模板--添加模板。直接这里搜索,比如我们配置了一个模板
notion image
 

自定义模板

Zabbix 自带的模板包含了一些通用的监控项,但它们不一定完全符合我们的实际需求。如果直接使用这些模板,可能会导致监控项过多(无用项)、缺少关键指标(业务相关项)、或数据不准确等问题。然而,我们的监控需求涉及大量主机,如果每台主机都手动配置监控项,维护成本会非常高。因此,自定义模板 变得非常重要。通过自定义模板,我们可以 精准定义符合业务需求的监控项、触发器、图形等,并在多个主机间复用,确保监控的灵活性、准确性和可维护性。自定义模板和监控项实现过程如下: 在 Zabbix 被监控主机上编写自定义监控项的取值的脚本,并加执行权限 在 Zabbix 被监控主机上的配置文件中添加自定义监控项,指定 key 和 对 key 赋值的脚本及参数 在 Zabbix Server 上使用 zabbix_get 工具,测试是否能取到自定义监控项信息 在 Zabbix Web 创建模板,在模板中添加自定义监控项 在 Zabbix Web 将模板关联至被监控的主机 导出自定义模板可以在其它 Zabbix Server 复用
除了自定义模板,也可以从 zabbix 网站查找适合自已的模板:https://share.zabbix.com。下面我们来创建一个模板,配置 → 模板 → 创建模板
notion image
添加模版的操作面板如下,我这里将模板添加到了Templates组中。填写好后点击添加按钮完成模版的添加
notion image
搜索创建好的模版,然后点击监控项,进入该模版的监控项集合页面
notion image
 
 

告警

通常当达到一定的指标,比如硬盘使用率为80%左右时,会触发触发器的条件。而触发器可以再触发动作实现事件通知告警,或执行指定命令等。要实现事件通知告警,就需要一个中间介质来发送告警消息,Zabbix 有如下常见报警介质有邮件、微信、短信等。

触发器

触发器其实就是一些条件的定义,一个触发器是根据一个监控项的返回值,将之与预先设置的阈值进行对比,当监控项返回了不符合预定义的值范围后,就进行触发下一步操作的警戒线,一般要对创建的监控项设置触发器以及触发方式和值的大小。基本的触发器表达式格式如下所示
server:主机名称 key:主机上关系的相应监控项的key function:评估采集到的数据是否在合理范围内时所使用的函数,目前触发器所支持的函数有avg(平均)、count(计数)、change(变化)、date(日期)、dayofweek(星期)、delta(增量)、diff、iregexp、last()、max(最大值)、min(最小值)、nodata(无数据)、now(现在)、sum(总和)等 parameter:函数参数;大多数数值函数可以接受秒数为其参数,而如果在数值参数之前使用“#”做为前缀,则表示为最近几次的取值,如sum(300)表示300秒内所有取值之和,而sum(#10)则表示最近10次取值之和
可以在指定主机上创建触发器,只是针对指定主机有效。也可以在指定模板上创建触发器,则使用此模板的所有主机都有效,一个模板中可以有多触发器。触发器中使用的表达式是非常灵活的,可以使用它们去创建关于监控统计的复杂逻辑测试。在定义触发器之前呢,我们先来创建一个监控项,我们这里以监控磁盘使用率为例
测试
测试没问题后,重启zabbix-agent2
配置监控项
notion image
下面我们来定义一个触发器:配置 → 主机 → none1 → 触发器 → 创建触发器
notion image
添加告警表达式
notion image
严重性设置为严重,然后点击添加
notion image
模拟触发告警
然后我们查看boot使用率,发现使用率已经超过了百分之八十
点击 监测 → 仪表板 查看告警
notion image

滞后

有时我们需要一个OK和问题状态之间的区间值,而不是一个简单的阈值。比如我想使用率大于80%告警,低于70%解除告警,该怎么操作呢?为了做到这一点,我们首先定义问题事件的触发器表达式。然后在事件成功迭代中选择恢复表达式,并为OK事件输入恢复表达式
notion image
现在磁盘使用率是90%,下面我们将磁盘使用率缩减到71%
点击 监测 → 仪表板 查看告警,发现告警信息还在
notion image
因为我们这里设置的恢复阈值是使用率低于70%,下面我们将/boot/test.img文件删除,然后再次查看仪表盘,发现告警信息不在了

告警接收

创建报警媒介类型,实现发信人功能。报警媒介类型是一种给运维工程师发送消息通知的渠道,即当zabbix的触发器触发一个事件后,怎么才能把这个事件通过某些方式通知给运维工程师呢? 媒介类型就起到此作用,如果想要实现邮件告警功能,那么对应的媒介类型就是配置用来发送告警邮件的发件人邮箱。

邮件告警

在Zabbix服务端设置邮件报警,当被监控主机宕机或者达到触发器预设值时,会自动发送报警邮件到指定邮箱。在邮箱上开启SMTP功能,利用此邮箱实现发送报警邮件
 
配置报警媒介:管理 → 报警媒介类型 → 创建报警媒介类型
notion image
配置 QQ 邮箱: 1、SMTP服务器如果是网易就写163,如果是QQ邮箱就写qq 2、服务器端口号默认是25,不加密,465是加密,如果填写465那么下main安全链接就得选择SSL/TLS 3、这里的密码是 QQ 邮箱的授权码,非 QQ 账户登录密码
notion image
添加消息模板用于发送信息
notion image
可以修改两个消息模板,示例如下 问题
notion image
恢复
notion image
创建好后,测试邮件发送是否正常。如果测试邮件发送提示Support for SMTP authentication was not compiled in
notion image
测试在linux环境发送邮件
安装postfix软件
启动服务
如果测试提示没有mail命令,安装依赖及邮件发送包
编辑mailx配置文件/etc/mail.rc ,在文件末尾添加如下信息:
安装好后,再次执行发送邮件命令,若有如下报错
配置文件需要追加配置:
notion image
此时返回zabbix服务器,继续测试邮件发送是否正常。如果测试邮件发送还提示Support for SMTP authentication was not compiled in,我们可以使用脚本方式。利用 sendemail 工具实现邮件脚本,创建脚本文件
赋予权限
测试脚本
notion image
查看邮箱此时已经接收到了测试发送的邮件
notion image
配置报警媒介:管理 → 报警媒介类型 → 创建报警媒介类型。脚本参数如下:
notion image
可以修改两个消息模板,示例如下 问题
notion image
恢复
notion image
创建好后,测试邮件发送是否正常
notion image

将报警媒介关联用户

媒介类型创建好之后,还需要在每个zabbix账户里面添加相应的收件配置,比如邮件类型的媒介类型要给zabbix账户添加邮箱,如果是微信类型的媒介类型那么就要在zabbix账户设置微信号,短信类型的媒介类型那就得给zabbix账户设置手机号用于接收报警消息内容。在zabbix用户中添加报警媒介时,需要指定告警信息的收件人的邮件地址
notion image
注意:下面图中一定要点击更新才能生效
notion image

创建和配置动作

动作可以实现当触发器被触发后可以执行哪些操作,一般可以是发送告警或执行命令。指定动作即条件为事件的严重度为信息时就触发动作
notion image
配置操作 步骤设为0时,表示会不停的持续发送警报,一般建议1到3表示执行三次。 步骤持续时间表示如果有后续步骤执行时的间隔时长,默认为0表示使用默认时间1h后才会执行后续步骤,此值最低不能低于60s,最大不能超过604800s,可以设为1到5m(分钟)比较合适。
示例:配置操作,操作内容
notion image
配置故障恢复信息,恢复操作内容
notion image
模拟故障验证邮件通知,利用之前创建的触发器实现邮件通知
然后我们查看boot使用率,发现使用率已经超过了百分之八十
点击 监测 → 仪表板 查看告警,查看动作,可以看到发送成功
notion image
查看邮件
notion image
将触发告警生成的文件删除
查看恢复告警邮件
notion image

故障自愈

在 Zabbix 中,当某个监控项出现异常时,可以通过动作实现自动恢复,例如重启服务、调用脚本等。动作触发后,Zabbix 会自动执行对应的恢复操作。但在执行时,系统会根据事件来源的主机或主机组,检查动作中目标用户或用户组是否至少拥有读取权限。
以nginx服务为例,当nginx服务停止时,自动重启服务,实现故障自愈功能。zabbix agent2 需要开启远程命令执行,修改配置文件
重启 zabbix agent2
默认zabbix agent是使用zabbix用户启动的,有些特权命令zabbix用户是没有权限执行,会导致定义好的自治愈策略因为权限拒绝,而执行失败,所以需要事先对zabbix用户进行sudo授权
检查语法
启动nginx,测试是否成功
设置监控项和触发器,新建动作,在触发条件里面添加操作,在远程主机通过zabbix客户端执行命令
在 Zabbix 6.0 之前,如果需要在触发动作时执行远程命令,可以直接在 Operations 选项卡中填写对应的命令。而从 Zabbix 6.0 开始,执行脚本的方式发生了变化。需要先进入 管理→ 脚本 中预先创建脚本,在创建动作时的 Operations 选项卡中,再选择这个已创建的脚本。也就是说,6.0 之后版本必须先注册脚本,再在动作中调用,才能实现类似故障自愈(如重启服务)的自动化操作。
notion image
指定脚本名称及相关命令
notion image
创建动作,添加动作的条件,用于指定动作关联的条件,选中Nginx Service is down 的触发器。即只有特定的触发器发生才会执行动作
notion image
点击操作,步骤为1和1表示只执行一次;步骤持续时间表示如果有多个步骤执行时的时间间隔,0表示使用默认步骤持续时间间隔
notion image
如果需要配置告警则继续添加操作,比如
notion image
下面我们将nginx服务停止,触发告警自愈
在监测页面可以看到动作执行,邮件已发送
notion image
查看告警邮件
notion image
我们再次查看nginx服务状态,可以看到nginx服务被重新启动
notion image
也可以通过查看 Zabbix Agent 日志,注意需要打开DebugLevel=4 才能看到下面信息
 
上一篇
Grafana
下一篇
SkyWalking