Zabbix监控学习笔记
Zabbix是一款开源的企业级监控系统,核心作用是对IT基础设施(服务器、网络设备、应用程序等)的运行状态进行实时采集、存储、分析,并在异常时触发告警,保障系统稳定运行。其核心价值在于“全面覆盖、灵活扩展、低成本落地”,是中小企业及大型互联网公司首选的开源监控解决方案。核心特点:开源免费:基于GPL协议,无商业授权成本,可自由修改源码;多平台支持:兼容Linux、Windows、Unix等操作系统
Zabbix监控学习笔记
一、Zabbix核心定义与特点
Zabbix是一款开源的企业级监控系统,核心作用是对IT基础设施(服务器、网络设备、应用程序等)的运行状态进行实时采集、存储、分析,并在异常时触发告警,保障系统稳定运行。其核心价值在于“全面覆盖、灵活扩展、低成本落地”,是中小企业及大型互联网公司首选的开源监控解决方案。
核心特点:
-
开源免费:基于GPL协议,无商业授权成本,可自由修改源码;
-
多平台支持:兼容Linux、Windows、Unix等操作系统,可监控物理机、虚拟机、容器、网络设备(交换机、路由器)、应用程序(Nginx、MySQL等);
-
灵活扩展:支持自定义监控项、触发器、告警规则,可通过API实现批量操作和第三方集成,也可通过插件扩展功能(如Zabbix Agent 2的插件机制);
-
分布式架构:支持Proxy代理,可分担Server压力,适配跨机房、大规模监控场景;
-
可视化能力强:提供Web可视化界面,支持仪表盘、图表、拓扑图,可直观展示监控数据;
-
完善的告警机制:支持邮件、短信、钉钉、企业微信等多种告警方式,可设置分级告警、告警升级策略。
补充说明:Zabbix目前有多个版本,其中LTS版本(长期支持版,如6.0 LTS、7.0 LTS)稳定性高,适合生产环境;最新稳定版(如7.4、8.0)新增嵌套低级别发现、OAuth 2.0认证等功能,适合追求新特性的场景。
二、Zabbix核心组件(必掌握)
Zabbix采用分层架构,核心组件分为5部分,各组件协同工作,形成“数据采集-处理-存储-展示-告警”的完整链路,缺一不可(Proxy为可选组件)。
1. Zabbix Server(核心中枢)
Zabbix的核心组件,所有监控逻辑的核心,负责接收Agent/Proxy上报的监控数据,处理触发器判断、告警触发、数据存储,同时管理整个监控系统的配置(主机、模板、用户等)。
核心功能:接收监控数据、解析配置、触发告警、存储数据、管理用户权限,是整个监控系统的“大脑”。
关键依赖:必须依赖数据库(存储配置和监控数据)、Web界面(提供可视化操作),自身运行需占用一定CPU、内存资源,大规模监控时需优化配置。
2. Zabbix Agent(数据采集终端)
部署在被监控目标(服务器、设备)上的轻量级客户端,负责采集本地资源和应用数据(如CPU使用率、内存占用、磁盘空间、进程状态等),并将数据上报给Server或Proxy。
两种Agent类型(从Zabbix 4.4开始支持):
-
Zabbix Agent:轻量级,用C语言编写,性能高、内存占用低,支持多平台,适用于基础资源监控;
-
Zabbix Agent 2:用Go语言编写,灵活性强,支持插件扩展,可直接监控Docker、MySQL等应用,是官方推荐的版本。
工作模式:分为主动模式(Agent主动向Server/Proxy上报数据)和被动模式(Server/Proxy主动向Agent请求数据),可根据监控规模灵活选择。
3. Zabbix Proxy(分布式代理,可选)
用于分布式监控场景,部署在远程机房或大规模监控节点中,替代Server收集本地Agent的数据,再将汇总后的数据上报给Zabbix Server,核心作用是分担Server的压力,减少网络带宽占用。
适用场景:跨机房监控(减少跨机房网络传输)、监控节点数量多(如数百台、数千台主机)、被监控设备网络不通畅的场景。
4. Zabbix Database(数据存储)
用于存储Zabbix的所有数据,包括监控配置(主机、模板、触发器等)、监控历史数据、告警记录、用户权限等,是Zabbix正常运行的基础。
支持的数据库:MySQL/MariaDB(最常用,推荐生产环境使用)、PostgreSQL、Oracle,其中MySQL/MariaDB适配性最好,部署和维护成本最低;TimescaleDB可作为扩展,优化时序数据查询效率。
5. Zabbix Web Interface(Web界面)
基于PHP开发的Web可视化界面,是用户操作Zabbix的唯一入口,所有配置(主机、监控项、触发器)、数据查看(图表、仪表盘)、告警管理都通过该界面完成。
核心功能:配置管理、监控数据可视化、告警查看与处理、用户权限管理、审计日志,支持从任何设备访问,操作便捷。
6. 核心工具与进程
-
Zabbix Get:用于从Server/Proxy端拉取远程Agent的数据,主要用于排查Agent与Server的通信问题;
-
Zabbix Sender:用于将数据主动发送到Server/Proxy,适用于耗时较长的检查或大量主机的场景;
-
核心进程:Zabbix Server(zabbix_server)、Agent(zabbix_agentd)、Agent 2(zabbix_agent2)、Proxy(zabbix_proxy),需确保进程正常运行。
7. 核心数据流
Zabbix的监控数据流遵循固定逻辑,核心链路为:
被监控主机 → Agent采集数据 → (Proxy可选) → Server接收数据 → 数据库存储数据 → Web界面展示数据 → 触发器判断异常 → 触发告警动作 → 通知管理员。
补充:创建监控链路的基础逻辑为:创建主机 → 配置监控项 → 创建触发器 → 配置动作 → 接收告警,使用模板可简化该流程。
三、Zabbix安装部署(实战重点,以CentOS 7+MySQL为例)
部署前提:准备一台CentOS 7服务器(建议2核4G以上,生产环境可适当提升配置),关闭防火墙、SELinux,确保网络通畅,提前安装好LAMP/LNMP环境(Apache/Nginx + PHP + MySQL)。
核心部署步骤(分Server端和Agent端):
1. Server端部署(核心步骤)
步骤1:配置Zabbix官方仓库
# 安装Zabbix仓库(以6.0 LTS版本为例)
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm
# 清理缓存并更新
yum clean all && yum makecache
步骤2:安装Server、Web界面、Agent
# 安装核心组件(Server + Web + Agent)
yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-agent
步骤3:初始化数据库(关键)
# 登录MySQL(默认密码为空或根据实际情况输入)
mysql -u root -p
# 1. 创建Zabbix数据库(字符集utf8mb4,支持中文)
create database zabbix character set utf8mb4 collate utf8mb4_bin;
# 2. 创建Zabbix数据库用户,并授权
create user zabbix@localhost identified by 'Zabbix@123'; # 密码可自定义
grant all privileges on zabbix.* to zabbix@localhost;
# 3. 开启日志信任函数创建(导入数据需用到)
set global log_bin_trust_function_creators = 1;
# 4. 退出MySQL
quit;
# 导入Zabbix初始数据库脚本(脚本路径随版本可能变化,需确认)
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -pZabbix@123 zabbix
# 导入完成后,关闭日志信任函数创建
mysql -u root -p
set global log_bin_trust_function_creators = 0;
quit;
步骤4:配置Zabbix Server(关联数据库)
# 编辑Server配置文件
vim /etc/zabbix/zabbix_server.conf
# 找到以下参数,修改为对应值
DBName=zabbix # 数据库名称
DBUser=zabbix # 数据库用户
DBPassword=Zabbix@123 # 数据库密码(与上面授权的密码一致)
# 其他参数默认即可,后续可根据性能优化
步骤5:配置PHP(适配Zabbix Web)
# 编辑PHP配置文件(Zabbix Web依赖的Apache配置)
vim /etc/httpd/conf.d/zabbix.conf
# 找到时区配置,修改为中国时区
php_value date.timezone Asia/Shanghai
步骤6:启动服务并设置开机自启
# 启动Zabbix Server、Agent、Apache服务
systemctl start zabbix-server zabbix-agent httpd
# 设置开机自启
systemctl enable zabbix-server zabbix-agent httpd
# 查看服务状态(确认无异常)
systemctl status zabbix-server zabbix-agent httpd
步骤7:Web界面初始化(关键)
-
访问Web地址:http://服务器IP/zabbix(默认路径);
-
进入安装向导,依次点击“Next”,检查环境(全部OK即可继续);
-
配置数据库连接(输入数据库名称、用户、密码,与之前配置一致);
-
设置Zabbix Server名称(可自定义,如“Zabbix监控服务器”);
-
确认安装信息,点击“Finish”,完成初始化;
-
登录Web界面:默认用户名Admin,密码zabbix(首次登录需修改密码,提升安全性)。
2. Agent端部署(被监控主机)
被监控主机需安装Agent,用于采集本地数据并上报给Server/Proxy,步骤如下:
# 1. 配置Zabbix仓库(与Server端一致)
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm
yum clean all && yum makecache
# 2. 安装Zabbix Agent 2(推荐,功能更强大)
yum install -y zabbix-agent2
# 3. 配置Agent(关联Zabbix Server)
vim /etc/zabbix/zabbix_agent2.conf
# 修改核心参数
Server=192.168.1.100 # Zabbix Server的IP地址(若有Proxy,填Proxy的IP)
ServerActive=192.168.1.100 # 主动模式下,Server/Proxy的IP地址
Hostname=web-server-01 # 被监控主机的名称(需与Server端添加的主机名一致)
# 4. 启动Agent 2并设置开机自启
systemctl start zabbix-agent2
systemctl enable zabbix-agent2
# 查看状态
systemctl status zabbix-agent2
注意:Agent端需确保10050端口(被动模式)、10051端口(主动模式)开放,否则无法与Server/Proxy通信。
3. 部署验证
在Zabbix Web界面中添加被监控主机,关联默认模板(如Template OS Linux),等待5-10分钟,查看监控数据是否正常采集,若能看到CPU、内存等数据,说明部署成功。
四、Zabbix基础配置(核心实操)
部署完成后,核心配置围绕“监控什么(监控项)、怎么判断异常(触发器)、异常后怎么做(告警)”展开,重点掌握模板、主机、监控项、触发器、动作的配置。
1. 模板(Template)配置(重点,简化配置)
模板是Zabbix的核心复用机制,包含预设的监控项、触发器、图表、应用集等,将模板关联到主机,即可快速实现对主机的监控,无需单独配置每个监控项。
-
系统默认模板:如Template OS Linux(监控Linux主机)、Template OS Windows(监控Windows主机)、Template App Nginx(监控Nginx),可直接使用;
-
模板操作:
-
创建模板:Configuration → Templates → Create template,设置模板名称、所属组,添加应用集、监控项、触发器;
-
模板继承:模板可继承其他模板的配置,减少重复操作,适合自定义模板场景;
-
关联模板:添加主机时,在“Templates”选项卡中搜索并关联对应的模板,保存后即可生效。
-
2. 主机(Host)配置
主机是被监控的对象,每个被监控设备(服务器、网络设备)都需在Zabbix中创建对应的主机条目,步骤如下:
1. 进入Web界面:Configuration → Hosts → Create host;
2. 填写核心信息:
- Host name:主机名(需与Agent配置文件中的Hostname一致);
- Groups:主机组(用于分类管理,如Linux Servers、Web Servers);
- Interfaces:接口(默认Agent接口,填写被监控主机的IP地址,端口默认10050);
3. 关联模板:在“Templates”选项卡,搜索并添加对应的模板(如Template OS Linux);
4. 点击“Add”保存,完成主机添加。
注意:主机添加后,需等待几分钟,让Agent与Server建立通信,Web界面中“Status”显示为“Enabled”且无报错,说明主机正常被监控。
3. 监控项(Item)配置
监控项是Zabbix采集数据的最小单元,用于定义“采集什么数据”,每个监控项对应一个具体的监控指标(如CPU使用率、内存占用、磁盘空间)。
核心属性:
-
Name:监控项名称(如“CPU使用率(%)”);
-
Key:监控项键值(核心,唯一标识,如system.cpu.util[all,user],表示采集所有CPU的用户态使用率);
-
Type:采集类型(默认Zabbix agent,根据监控对象选择,如SNMP用于网络设备);
-
Data type:数据类型(Numeric(float)、Numeric(integer)、Text等,根据指标类型选择);
-
Update interval:更新间隔(数据采集频率,如60s,即每分钟采集一次);
-
Applications:应用集(用于分类监控项,如“CPU”“Memory”“Disk”)。
自定义监控项(实战示例:监控Nginx活跃连接数)
# 1. Agent端配置(编辑Agent 2配置文件)
vim /etc/zabbix/zabbix_agent2.conf
# 添加自定义监控项键值
UserParameter=nginx.active,ss -ant | grep ':80 ' | awk '{print $$4}' | wc -l
# 重启Agent 2
systemctl restart zabbix-agent2
# 2. Server端创建监控项
Configuration → Hosts → 选择目标主机 → Items → Create item
# 填写核心信息
Name:Nginx活跃连接数
Key:nginx.active(与Agent端配置一致)
Type:Zabbix agent
Data type:Numeric(integer)
Update interval:60s
Applications:Nginx(可新建应用集)
# 点击“Add”保存,等待数据采集
4. 触发器(Trigger)配置
触发器用于定义“什么情况下视为异常”,基于监控项的采集数据,设置阈值,当数据满足阈值条件时,触发器状态变为“Problem”(异常),触发告警。
核心属性:
-
Name:触发器名称(如“CPU使用率超过90%(持续5分钟)”);
-
Expression:触发表达式(核心,定义异常条件,如{web-server-01:system.cpu.util[all,user].avg(5m)}>90,含义:web-server-01主机的CPU用户态使用率,5分钟平均值超过90%);
-
Severity:告警级别(从低到高:Information、Warning、Average、High、Disaster,根据异常严重程度选择);
-
Recovery expression:恢复表达式(可选,定义异常恢复的条件,如阈值低于90%,触发器状态变为“OK”)。
注意:触发表达式中的“avg(5m)”表示取5分钟内的平均值,还可使用last()(最新值)、max()(最大值)等函数,根据监控需求选择。
5. 动作(Action)配置
动作是触发器触发异常后,Zabbix执行的操作(如发送告警、执行脚本),核心是“异常发生时做什么”“异常恢复时做什么”。
核心配置(以发送邮件告警为例):
-
配置媒介(告警方式):Administration → Media types → Create media type,选择“Email”,配置SMTP服务器(如QQ邮箱、企业邮箱)、发件人、密码,保存;
-
给用户分配媒介:Administration → Users → 选择用户(如Admin) → Media,添加媒介,选择刚才配置的邮件媒介,填写收件人邮箱,保存;
-
创建动作:Configuration → Actions → Create action,填写动作名称(如“CPU异常告警”);
-
配置触发条件:在“Conditions”选项卡,添加条件(如“Trigger severity”等于“High”,“Host group”等于“Linux Servers”);
-
配置操作(异常发生时):在“Operations”选项卡,添加操作,选择“Send message”,选择收件人、媒介,填写告警内容(可使用宏变量,如{HOST.NAME}、{TRIGGER.NAME},自动填充主机名、触发器名称);
-
配置恢复操作(可选):在“Recovery operations”选项卡,添加操作,发送恢复告警,告知管理员异常已解决;
-
保存动作,完成配置。
6. 自动发现与自动注册(进阶配置)
适用于大规模监控场景,减少手动添加主机的工作量:
-
自动发现:Configuration → Discovery → Create discovery rule,设置IP范围(如192.168.1.1-254)、检查类型(如Zabbix agent),关联动作(发现新主机时自动添加并关联模板);
-
自动注册:Agent端配置ServerActive和Hostname,Server端配置自动注册动作(Administration → Actions → Auto registration),Agent启动后会自动向Server注册,无需手动添加主机。
补充:Zabbix 7.4及以上版本支持嵌套低级别发现,可实现多层级对象发现(如先发现数据库实例,再发现实例下的表空间、表),适配复杂监控场景。
五、常见监控场景实战
1. 监控Linux主机(基础场景)
核心:添加主机,关联“Template OS Linux”模板,默认监控CPU、内存、磁盘、网络、进程等基础指标,无需额外配置,重点关注磁盘空间(触发阈值建议设置为85%)、内存使用率(触发阈值建议设置为90%)。
2. 监控MySQL数据库(进阶场景)
-
Agent端:安装Zabbix Agent 2,配置MySQL用户(授予监控权限),启用Agent 2的MySQL插件;
-
Server端:添加主机,关联“Template App MySQL”模板,配置模板中的宏变量(如MySQL用户名、密码);
-
重点监控项:MySQL连接数、QPS、TPS、表锁、慢查询数量,设置触发器(如连接数超过1000触发High级别告警)。
3. 监控网络设备(交换机/路由器)
-
配置网络设备:开启SNMP协议(如SNMP v2c),设置共同体名(如public);
-
Server端:添加主机,接口类型选择“SNMP”,填写网络设备IP、SNMP共同体名;
-
关联模板:关联“Template Net Generic Device”模板,监控端口流量、端口状态、CPU使用率等指标。
4. 监控Nginx服务(实战重点)
-
配置Nginx:开启status模块,允许本地访问(配置location /nginx_status);
-
Agent端:配置自定义监控项(如活跃连接数、请求数、错误率),或使用Zabbix Agent 2的Nginx插件;
-
Server端:创建监控项、触发器,重点监控活跃连接数、4xx/5xx错误率(如5xx错误率超过5%触发告警)。
5. 混合监控(集成Prometheus)
适用于监控Kubernetes集群等场景,步骤如下:
-
在K8s集群中部署node-exporter和kube-state-metrics,采集集群指标;
-
Server端:使用“Template Module Prometheus”模板,创建监控项,URL指向Prometheus查询接口;
-
可视化:可集成Grafana,添加Zabbix数据源,导入社区模板,实现更丰富的图表展示。
六、常见问题与避坑指南(必记)
-
Agent无法连接Server:
-
检查Agent配置文件中的Server、ServerActive是否正确(与Server IP一致);
-
检查防火墙(Server端开放10051端口,Agent端开放10050端口);
-
检查Agent进程是否正常运行,查看Agent日志(/var/log/zabbix/zabbix_agent2.log)排查错误;
-
使用Zabbix Get工具排查:在Server端执行zabbix_get -s 被监控IP -k “system.cpu.util[all,user]”,若能返回数据,说明通信正常。
-
-
监控数据不显示:
-
检查主机状态是否为“Enabled”,模板是否正确关联;
-
检查监控项的Update interval是否设置合理(避免间隔过长);
-
检查数据库是否正常运行,是否有监控数据写入(可查询zabbix.history表);
-
若图表有空白或圆点,说明数据丢失,需排查数据库性能、网络或被监控主机状态。
-
-
告警不触发:
-
检查触发器表达式是否正确(宏变量、阈值、函数是否有误);
-
检查动作配置是否正确(触发条件、收件人、媒介是否配置);
-
检查用户媒介是否正常(如邮件SMTP配置是否正确,可测试发送测试邮件);
-
检查告警级别是否匹配(动作条件是否包含该级别)。
-
-
Zabbix Server卡顿、性能差:
-
优化数据库:定期清理历史数据(配置zabbix_server.conf中的HousekeepingFrequency参数),使用TimescaleDB优化时序数据查询;
-
优化Server配置:调整StartPollers(轮询进程数)、StartTrappers(陷阱进程数),根据监控主机数量增加进程数;
-
部署Proxy:将大规模监控节点拆分到不同Proxy,分担Server压力;
-
减少不必要的监控项,提高监控项的更新间隔,避免高频采集占用资源。
-
-
其他常见问题:
-
监控项键值含空格:在Zabbix 3.0及以上版本,键值不能含空格,可通过数据库语句替换:update items set key_=replace(key_,’ ‘,’_');
-
Agent启动报错“socket() for ((-):10050) failed”:因Agent编译版本高于操作系统内核版本,需更换适配内核的Agent版本;
-
系统时间异常导致无数据:清除数据库中hosts.disable_until、drules.nextcheck等字段的值,重启Server/Proxy。
-
七、核心总结与学习建议
1. 核心总结
-
Zabbix的核心逻辑:“采集(Agent)→ 传输(Server/Proxy)→ 存储(Database)→ 分析(触发器)→ 告警(动作)”,所有配置都围绕这个逻辑展开;
-
重点掌握:组件作用、安装部署、模板使用、监控项/触发器/动作配置,这是Zabbix使用的核心,也是面试高频考点;
-
实战优先:Zabbix是工具型软件,光记理论不够,需亲手部署、配置监控场景,排查常见问题,才能真正掌握;
-
版本选择:生产环境优先使用LTS版本,稳定性高、维护周期长;测试环境可使用最新版本,体验新特性。
2. 学习建议
-
入门阶段:先完成Server+Agent的部署,掌握基础配置(主机、模板、监控项),实现Linux主机的基础监控;
-
进阶阶段:学习自定义监控项、触发器表达式、告警配置,实现应用(MySQL、Nginx)和网络设备的监控;
-
高级阶段:学习分布式监控(Proxy部署)、自动发现、API使用、性能优化,适配大规模监控场景;
-
辅助学习:查看Zabbix官方文档,结合实战排查问题,积累常见故障的解决方案。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)