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界面初始化(关键)

  1. 访问Web地址:http://服务器IP/zabbix(默认路径);

  2. 进入安装向导,依次点击“Next”,检查环境(全部OK即可继续);

  3. 配置数据库连接(输入数据库名称、用户、密码,与之前配置一致);

  4. 设置Zabbix Server名称(可自定义,如“Zabbix监控服务器”);

  5. 确认安装信息,点击“Finish”,完成初始化;

  6. 登录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执行的操作(如发送告警、执行脚本),核心是“异常发生时做什么”“异常恢复时做什么”。

核心配置(以发送邮件告警为例):

  1. 配置媒介(告警方式):Administration → Media types → Create media type,选择“Email”,配置SMTP服务器(如QQ邮箱、企业邮箱)、发件人、密码,保存;

  2. 给用户分配媒介:Administration → Users → 选择用户(如Admin) → Media,添加媒介,选择刚才配置的邮件媒介,填写收件人邮箱,保存;

  3. 创建动作:Configuration → Actions → Create action,填写动作名称(如“CPU异常告警”);

  4. 配置触发条件:在“Conditions”选项卡,添加条件(如“Trigger severity”等于“High”,“Host group”等于“Linux Servers”);

  5. 配置操作(异常发生时):在“Operations”选项卡,添加操作,选择“Send message”,选择收件人、媒介,填写告警内容(可使用宏变量,如{HOST.NAME}、{TRIGGER.NAME},自动填充主机名、触发器名称);

  6. 配置恢复操作(可选):在“Recovery operations”选项卡,添加操作,发送恢复告警,告知管理员异常已解决;

  7. 保存动作,完成配置。

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数据库(进阶场景)

  1. Agent端:安装Zabbix Agent 2,配置MySQL用户(授予监控权限),启用Agent 2的MySQL插件;

  2. Server端:添加主机,关联“Template App MySQL”模板,配置模板中的宏变量(如MySQL用户名、密码);

  3. 重点监控项:MySQL连接数、QPS、TPS、表锁、慢查询数量,设置触发器(如连接数超过1000触发High级别告警)。

3. 监控网络设备(交换机/路由器)

  1. 配置网络设备:开启SNMP协议(如SNMP v2c),设置共同体名(如public);

  2. Server端:添加主机,接口类型选择“SNMP”,填写网络设备IP、SNMP共同体名;

  3. 关联模板:关联“Template Net Generic Device”模板,监控端口流量、端口状态、CPU使用率等指标。

4. 监控Nginx服务(实战重点)

  1. 配置Nginx:开启status模块,允许本地访问(配置location /nginx_status);

  2. Agent端:配置自定义监控项(如活跃连接数、请求数、错误率),或使用Zabbix Agent 2的Nginx插件;

  3. Server端:创建监控项、触发器,重点监控活跃连接数、4xx/5xx错误率(如5xx错误率超过5%触发告警)。

5. 混合监控(集成Prometheus)

适用于监控Kubernetes集群等场景,步骤如下:

  1. 在K8s集群中部署node-exporter和kube-state-metrics,采集集群指标;

  2. Server端:使用“Template Module Prometheus”模板,创建监控项,URL指向Prometheus查询接口;

  3. 可视化:可集成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官方文档,结合实战排查问题,积累常见故障的解决方案。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐