Zabbix 作为一款功能强大的开源监控解决方案,广泛应用于企业级 IT 基础设施的监控与管理,在服务器硬件监控领域,Zabbix 通过灵活的插件机制、丰富的模板支持和自定义能力,能够实现对服务器硬件状态的全面、实时监控,确保系统稳定运行并提前预警潜在故障,本文将详细介绍如何利用 Zabbix 监控服务器硬件的核心组件、实施步骤及关键配置要点。

Zabbix 监控服务器硬件的核心组件
服务器硬件监控主要涵盖 CPU、内存、磁盘、电源、风扇、温度传感器等物理组件,Zabbix 通过以下核心功能实现对这些组件的监控:
-
Zabbix Agent:部署在被监控服务器上的轻量级代理,负责收集本地硬件指标(如 CPU 使用率、内存占用、磁盘 I/O 等)并上报给 Zabbix Server,支持 Zabbix Agent(原生)、Zabbix Agent2(改进版,支持更多插件)以及 SNMP 协议(用于网络设备或无 Agent 环境)。
-
模板(Template):Zabbix 提供预定义模板(如 Template OS Linux、Template HW Linux),包含监控项、触发器、图形等预设配置,可直接链接到主机,快速实现硬件监控,Template OS Linux 包含 CPU 负载、内存使用率、磁盘空间等监控项。
-
自定义监控项:对于硬件厂商特有的指标(如服务器温度、电源状态),可通过编写自定义脚本(如 Shell、Python)或利用硬件管理接口(如 IPMI、 Dell OpenManage)实现数据采集,并在 Zabbix 中定义自定义监控项。
(图片来源网络,侵删) -
触发器(Trigger):基于监控项数据设置阈值条件,当指标超出阈值时触发告警,设置“CPU 使用率持续 5 分钟超过 90%”或“磁盘剩余空间小于 10%”等触发器,及时通知管理员。
-
可视化:通过图形(Graph)、仪表盘(Dashboard)展示硬件指标趋势,直观呈现服务器运行状态,可创建 CPU 使用率时间序列图、磁盘 I/O 柱状图等。
服务器硬件监控的关键指标及实现
CPU 监控
CPU 是服务器的核心组件,需监控使用率、负载、温度等指标。
- 监控项:
- CPU 使用率(用户态、系统态、空闲)
- CPU 负载(1分钟、5分钟、15分钟平均值)
- CPU 温度(需硬件支持,如通过
sensors命令或 IPMI 获取)
- 实现方式:
- 使用 Zabbix Agent 自带监控项(如
system.cpu.util),通过vfs.fs.size监控磁盘空间,system.load监控负载。 - 自定义脚本:通过
/proc/stat计算 CPU 使用率,或利用lm-sensors采集温度数据,定义为UserParameter。
- 使用 Zabbix Agent 自带监控项(如
内存监控
内存不足会导致服务器性能下降,需监控总内存、已用内存、空闲内存及交换分区使用情况。

- 监控项:
- 内存总容量、已用容量、使用率
- 交换分区(Swap)使用率
- 实现方式:
- Zabbix Agent 自带
vm.memory.size监控项,通过mode=used获取已用内存,mode=total获取总内存。 - 触发器示例:
内存使用率 > 90%持续 10 分钟触发告警。
- Zabbix Agent 自带
磁盘及存储监控
磁盘性能和容量直接影响服务器数据存储能力,需监控磁盘使用率、I/O 速度、错误率等。
- 监控项:
- 磁盘分区使用率、剩余空间
- 磁盘 I/O 读写速率(ops/s、B/s)
- 磁盘健康状态(如 SMART 信息,需
smartctl工具)
- 实现方式:
- 使用
vfs.fs.size监控磁盘空间,vfs.fs.dev[*]监控磁盘 I/O。 - 自定义脚本:通过
smartctl -a /dev/sda获取磁盘 SMART 属性,提取Reallocated_Sector_Count等关键指标。
- 使用
硬件健康状态监控(服务器级)
对于刀片服务器、机架式服务器等,需监控电源状态、风扇转速、温度传感器等硬件组件。
- 监控项:
- 电源状态(在线/离线)
- 风扇转速(RPM)
- 温度传感器(CPU 温度、主板温度)
- 实现方式:
- IPMI 集成:通过 Zabbix Agent 调用
ipmitool命令采集数据,UserParameter=system.power.status,/ipmitool fru | grep "Power Supply" | awk '{print $4}' - 硬件厂商管理工具:如 Dell 的
omreport、HP 的hpasmcli,编写脚本提取硬件状态数据。
- IPMI 集成:通过 Zabbix Agent 调用
网络硬件监控
虽然网络监控通常归为网络设备范畴,但服务器网卡状态(如带宽使用、错误包数)也需纳入硬件监控。
- 监控项:
- 网卡流量(入站/出站)
- 网络错误包数(CRC 错误、丢包)
- 实现方式:
- 使用
net.if.in[*]和net.if.out[*]监控网卡流量,net.if.err[*]监控错误包数。
- 使用
Zabbix 硬件监控实施步骤
-
环境准备
- 安装 Zabbix Server(建议 6.0+ 版本)及 Zabbix Agent。
- 确保被监控服务器与 Zabbix Server 网络连通,开放 Agent 端口(默认 10050)。
-
部署 Agent
- 在 Linux 服务器上安装 Zabbix Agent:
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm yum install zabbix-agent
- 配置 Agent 配置文件
/etc/zabbix/zabbix_agentd.conf,设置Server(Zabbix Server IP)和Hostname(与 Zabbix Web 界面主机名一致)。
- 在 Linux 服务器上安装 Zabbix Agent:
-
创建主机并链接模板
- 登录 Zabbix Web 界面,创建主机(Configuration → Hosts),填写主机名、IP 地址等基本信息。
- 链接预定义模板(如 Template OS Linux),或自定义模板(包含硬件监控项、触发器等)。
-
配置自定义监控项(可选)
- 对于硬件特有指标,在 Agent 端定义
UserParameter,例如监控 CPU 温度:UserParameter=cpu.temp,sensors | grep "Core 0" | awk '{print $3}' | cut -d'+' -f2 - 在 Zabbix Web 界面创建监控项(Configuration → Items),选择“Zabbix Agent”类型,键名为
cpu.temp。
- 对于硬件特有指标,在 Agent 端定义
-
设置触发器与告警
- 为关键监控项配置触发器,
- 名称:CPU 温度过高
- 条件:
{Template OS Linux:cpu.temp.last()}>70(温度超过 70℃) - 告警级别: Disaster
- 配置告警媒介(邮件、钉钉、微信等),确保故障信息及时推送。
- 为关键监控项配置触发器,
-
可视化与报表
- 创建图形(Monitoring → Graphs),选择监控项生成趋势图。
- 通过仪表盘(Dashboards)汇总多台服务器的硬件状态,实现统一监控视图。
常见硬件监控问题及优化
-
数据采集延迟
- 原因:Agent 与 Server 网络不稳定、监控项采集间隔过长。
- 优化:调整监控项采集间隔(如关键指标设为 30 秒),启用 Zabbix Agent 的主动模式(Active Mode)减少 Server 端压力。
-
自定义监控项数据异常
- 原因:脚本逻辑错误、权限不足(如
ipmitool需 root 权限执行)。 - 优化:测试脚本单独执行,确保返回数值格式正确;配置 Agent sudo 权限,避免权限问题。
- 原因:脚本逻辑错误、权限不足(如
-
告警风暴
- 原因:触发器阈值设置不合理、频繁波动。
- 优化:使用触发器表达式中的
nodata()函数处理数据缺失,或增加“持续时间”条件(如avg() > 90 for 5m)。
相关问答 FAQs
Q1:如何通过 Zabbix 监控服务器硬盘的 SMART 健康状态?
A1:可通过自定义监控项实现,首先安装 smartmontools 工具(yum install smartmontools),然后编写脚本提取 SMART 属性,
UserParameter=smart.health,/usr/sbin/smartctl -H /dev/sda | grep "SMART overall-health" | awk '{print $NF}'
在 Zabbix 中创建监控项,键名为 smart.health,并设置触发器(如状态为 FAILED 时告警)。
Q2:Zabbix 如何监控服务器的电源状态(如电源是否掉电)?
A2:若服务器支持 IPMI,可通过 ipmitool 命令采集电源状态,在 Agent 端定义:
UserParameter=power.status,/usr/bin/ipmitool fru | grep "Power Supply" | awk '{print $4}' | grep -c "Yes"
监控项返回 1 表示电源正常,0 表示异常,配置触发器:{power.status.last()}=0 时触发告警。
