Zabbix监控Hadoop集群应用实践完整指南
前言
Hadoop作为大数据领域的核心基础平台,其集群的健康状况直接关系到数据处理的效率和稳定性。NameNode、DataNode、ResourceManager、NodeManager等组件的运行状态,都是大数据运维团队需要密切关注的焦点。
Zabbix提供了基于HTTP协议的Hadoop监控方案,通过访问Hadoop各组件的Web UI接口(/jmx端点)获取JSON格式的监控数据,无需在Hadoop节点上安装额外的Agent,即可实现对Hadoop集群的全面监控。
本文将详细介绍如何使用Zabbix监控Hadoop集群,涵盖监控原理、模板配置、宏变量设置以及主机链接等完整流程。
一、实验环境说明
| 组件 | 配置 |
|---|---|
| Hadoop NameNode | 192.168.38.27,端口9870 |
| Hadoop ResourceManager | 192.168.38.27,端口8088 |
| Zabbix Server | 192.168.38.30 |
| 监控方式 | HTTP协议采集 /jmx 端点 |
| Hadoop版本 | Apache Hadoop 3.x |
说明:本实验NameNode和ResourceManager部署在同一台服务器上,实际生产环境中可能分布在不同的节点,监控原理完全相同。
二、Hadoop监控原理与架构
2.1 监控数据来源
Zabbix监控Hadoop的核心原理是通过HTTP协议访问Hadoop各组件的Web UI端口,获取 /jmx 端点返回的JSON格式性能数据。
数据获取地址:
| 组件 | URL | 端口 | 数据格式 |
|---|---|---|---|
| NameNode | http://192.168.38.27:9870/jmx | 9870 | JSON |
| ResourceManager | http://192.168.38.27:8088/jmx | 8088 | JSON |
2.2 整体架构图

2.3 监控项获取方式
| 获取方式 | 说明 | 适用场景 |
|---|---|---|
| 直接采集 | 通过HTTP请求获取/jmx端点的JSON数据 | NameNode、ResourceManager的核心指标 |
| 自动发现 | 通过自动发现规则获取动态变化的节点列表 | DataNode、NodeManager的节点状态 |
三、验证Hadoop Web接口连通性
3.1 测试NameNode的/jmx接口
在Zabbix Server上使用curl测试NameNode的JMX接口是否可访问:
[root@zabbix-server ~]# curl -s http://192.168.38.27:9870/jmx | head -50
预期输出(JSON格式):
{
"beans": [
{
"name": "Hadoop:service=NameNode,name=NameNodeInfo",
"modelerType": "org.apache.hadoop.hdfs.server.namenode.NameNode",
"tag.Hostname": "namenode-host",
"ClusterId": "cluster-12345",
"BlockPoolId": "BP-12345",
"State": "active",
"TotalBlocks": 123456,
"TotalFiles": 98765,
"MissingBlocks": 0,
...
}
]
}
3.2 测试ResourceManager的/jmx接口
[root@zabbix-server ~]# curl -s http://192.168.38.27:8088/jmx | head -50
预期输出(JSON格式):
{
"beans": [
{
"name": "Hadoop:service=ResourceManager,name=ClusterMetrics",
"modelerType": "org.apache.hadoop.yarn.server.resourcemanager.ClusterMetrics",
"NumActiveNMs": 3,
"NumDecommissionedNMs": 0,
"NumLostNMs": 0,
"NumUnhealthyNMs": 0,
"NumRebootedNMs": 0,
"TotalMB": 24576,
"TotalVirtualCores": 12,
"AvailableMB": 18432,
"AvailableVirtualCores": 9,
...
}
]
}
3.3 检查端口是否正常监听
在Hadoop服务器上确认端口监听状态:
[root@hadoop-server ~]# netstat -tlnp | grep -E "9870|8088"
tcp 0 0 0.0.0.0:9870 0.0.0.0:* LISTEN 12345/java
tcp 0 0 0.0.0.0:8088 0.0.0.0:* LISTEN 12346/java
四、模板宏变量配置
4.1 宏变量设计思路
Zabbix的 Hadoop by HTTP 模板中定义了多个宏变量,用于动态替换监控项的URL地址。关键设计原则是:模板中的宏变量应保持通用性,具体的主机地址应在主机层面设置同名宏变量进行覆盖。
这样设计有以下优势:
-
模板通用性:同一个模板可以复用到多个Hadoop集群
-
灵活覆盖:主机级别的宏变量优先级高于模板级别
-
便于维护:修改主机地址只需调整主机宏变量,不影响模板
4.2 模板中的宏变量
进入 数据采集(Data collection) → 模板(Templates),找到 Hadoop by HTTP 模板,查看其宏变量定义:
| 宏变量 | 默认值 | 说明 | 建议 |
|---|---|---|---|
{$HADOOP.NAMENODE.HOST} | localhost | NameNode主机地址 | 保持默认,在主机上覆盖 |
{$HADOOP.NAMENODE.PORT} | 9870 | NameNode HTTP端口 | 保持默认或按需修改 |
{$HADOOP.RESOURCEMANAGER.HOST} | localhost | ResourceManager主机地址 | 保持默认,在主机上覆盖 |
{$HADOOP.RESOURCEMANAGER.PORT} | 8088 | ResourceManager HTTP端口 | 保持默认或按需修改 |
{$HADOOP.SCHEME} | http | 协议类型 | 保持默认(如启用HTTPS则修改) |
如下图所示:

⚠️ 重要提示:
{$HADOOP.NAMENODE.HOST}和{$HADOOP.RESOURCEMANAGER.HOST}这两个宏变量不建议直接在模板中修改为具体IP,否则模板将无法复用到其他集群正确的做法是在模板中保持默认值,待模板链接到主机后,在主机级别添加同名宏变量
4.3 主机级别宏变量配置
当模板链接到具体主机后,需要在主机上添加同名宏变量,用于覆盖模板中的默认值。
操作步骤:
-
进入 数据采集(Data collection) → 主机(Hosts)
-
选择目标主机(192.168.38.27)
-
切换到 宏(Macros) 选项卡
-
添加以下宏变量:
| 宏变量 | 值 | 说明 |
|---|---|---|
{$HADOOP.NAMENODE.HOST} | 192.168.38.27 | 覆盖模板中的NameNode地址 |
{$HADOOP.RESOURCEMANAGER.HOST} | 192.168.38.27 | 覆盖模板中的ResourceManager地址 |
如下图所示:

宏变量优先级说明:主机级别的宏变量优先级高于模板级别的同名宏变量,因此主机上定义的宏变量会生效。
五、链接Hadoop监控模板
5.1 选择目标主机
由于Hadoop监控是通过HTTP协议采集数据,无需在Hadoop节点上安装Zabbix Agent,将模板直接链接到NameNode或ResourceManager所在的主机即可。
操作步骤:
-
进入 数据采集(Data collection) → 主机(Hosts)
-
选择或创建用于监控Hadoop的主机(如 192.168.38.27)
-
确保主机已添加HTTP类型的接口:
| 配置项 | 值 |
|---|---|
| 接口类型 | HTTP |
| IP地址 | 192.168.38.27 |
| 端口 | 80 |
说明:HTTP接口用于模板的监控项访问,端口填写80即可(宏变量中会指定具体端口)。
5.2 链接模板
-
进入主机详情页,切换到 模板(Templates) 选项卡
-
点击 链接新模板(Link new templates)
-
搜索并选择 Hadoop by HTTP
-
点击 更新(Update) 保存配置
如下图所示:

5.3 配置主机宏变量(重要)
模板链接后,务必在主机上配置同名宏变量覆盖模板默认值:
-
切换到主机的 宏(Macros) 选项卡
-
点击 添加(Add)
-
依次添加以下宏变量:
| 宏变量 | 值 |
|---|---|
{$HADOOP.NAMENODE.HOST} | 192.168.38.27 |
{$HADOOP.RESOURCEMANAGER.HOST} | 192.168.38.27 |
六、监控指标详解
6.1 NameNode核心监控指标
链接模板后,Zabbix会自动采集以下NameNode核心指标:
| 监控项 | 说明 | 监控意义 |
|---|---|---|
| NameNode State | NameNode状态(active/standby) | ⚠️ 判断高可用状态 |
| Total Blocks | HDFS总块数 | 反映HDFS数据总量 |
| Total Files | HDFS文件和目录总数 | 监控元数据规模 |
| Missing Blocks | 丢失的块数 | ⚠️ 不为0需立即排查 |
| Corrupt Blocks | 损坏的块数 | ⚠️ 反映数据完整性 |
| Under-Replicated Blocks | 副本不足的块数 | ⚠️ 反映副本策略执行情况 |
| Live DataNodes | 存活的DataNode数量 | ⚠️ 监控节点健康状态 |
| Dead DataNodes | 死亡的DataNode数量 | ⚠️ 为0才正常 |
| Decommissioning DataNodes | 退役中的DataNode数量 | 监控节点维护状态 |
| Capacity Total | HDFS总容量 | 容量规划依据 |
| Capacity Used | 已使用容量 | ⚠️ 使用率告警 |
| Capacity Remaining | 剩余容量 | 容量告警依据 |
6.2 ResourceManager核心监控指标
| 监控项 | 说明 | 监控意义 |
|---|---|---|
| Active Nodes | 活跃的NodeManager数量 | 监控集群节点健康 |
| Decommissioning Nodes | 退役中的NodeManager数量 | 维护状态监控 |
| Lost Nodes | 丢失的NodeManager数量 | ⚠️ 不为0需排查网络/心跳问题 |
| Unhealthy Nodes | 不健康的NodeManager数量 | ⚠️ 反映节点资源问题 |
| Rebooted Nodes | 重启的NodeManager数量 | 监控节点稳定性 |
| Total Memory | 总内存资源 | 集群资源总量 |
| Available Memory | 可用内存 | ⚠️ 资源不足告警 |
| Total Virtual Cores | 总虚拟核数 | 集群计算资源总量 |
| Available Virtual Cores | 可用虚拟核数 | ⚠️ 计算资源告警 |
| Apps Running | 运行中的应用数 | 集群负载情况 |
| Apps Submitted | 提交的应用总数 | 历史任务总量 |
| Apps Completed | 已完成应用数 | 任务完成情况 |
| Apps Failed | 失败应用数 | ⚠️ 任务失败率告警 |
| Apps Killed | 被终止应用数 | 资源不足或被手动终止 |
6.3 DataNode自动发现指标
通过自动发现规则,模板会动态发现所有DataNode节点,并为每个节点采集以下指标:
| 监控项 | 说明 | 监控意义 |
|---|---|---|
| DataNode State | 节点状态(live/dead) | 节点健康状态 |
| DataNode Used Space | 已使用磁盘空间 | 各节点存储使用率 |
| DataNode Remaining Space | 剩余磁盘空间 | 存储容量规划 |
| DataNode Capacity | 磁盘总容量 | 节点存储总量 |
| DataNode Block Pool Used | 块池使用量 | 存储分布情况 |
6.4 NodeManager自动发现指标
| 监控项 | 说明 | 监控意义 |
|---|---|---|
| NodeManager State | 节点状态(healthy/unhealthy) | 节点健康状态 |
| NodeManager Available Memory | 可用内存 | 节点资源状态 |
| NodeManager Available Vcores | 可用虚拟核数 | 节点计算资源 |
七、告警规则配置建议
7.1 NameNode告警配置
| 告警项 | 建议阈值 | 告警级别 | 说明 |
|---|---|---|---|
| Missing Blocks | > 0 | 灾难 | 数据丢失,需立即恢复 |
| Corrupt Blocks | > 0 | 灾难 | 数据损坏,需立即修复 |
| Under-Replicated Blocks | > 100 | 严重 | 副本不足,需检查DataNode |
| Dead DataNodes | > 0 | 严重 | 节点宕机,需排查 |
| Capacity Used | > 85% | 严重 | 存储即将满 |
| NameNode State | active != 1 | 灾难 | 高可用切换或故障 |
7.2 ResourceManager告警配置
| 告警项 | 建议阈值 | 告警级别 | 说明 |
|---|---|---|---|
| Lost Nodes | > 0 | 严重 | 节点心跳丢失 |
| Unhealthy Nodes | > 0 | 严重 | 节点资源不足 |
| Available Memory | < 总内存的20% | 警告 | 内存资源紧张 |
| Available Virtual Cores | < 总核数的20% | 警告 | CPU资源紧张 |
| Apps Failed Rate | > 10% | 警告 | 任务失败率过高 |
八、常见问题排查
8.1 模板链接后无数据
| 问题现象 | 排查步骤 |
|---|---|
| 所有监控项无数据 | 检查主机是否配置了HTTP接口 |
| NameNode无数据 | 检查宏变量 {$HADOOP.NAMENODE.HOST} 是否正确 |
| ResourceManager无数据 | 检查宏变量 {$HADOOP.RESOURCEMANAGER.HOST} 是否正确 |
快速诊断:
# 在Zabbix Server上测试NameNode接口
curl -s http://192.168.38.27:9870/jmx | jq .beans[].name
# 在Zabbix Server上测试ResourceManager接口
curl -s http://192.168.38.27:8088/jmx | jq .beans[].name
8.2 自动发现无节点数据
| 问题现象 | 排查方向 |
|---|---|
| DataNode未发现 | 检查NameNode的/jmx是否返回了DataNode列表信息 |
| NodeManager未发现 | 检查ResourceManager的/jmx是否返回了NodeManager信息 |
| 部分节点缺失 | 确认该节点是否已正常注册到集群 |
8.3 HTTP连接失败
| 问题现象 | 排查步骤 |
|---|---|
| Connection refused | 检查Hadoop Web服务是否正常:systemctl status hadoop |
| 端口不通 | 检查防火墙:firewall-cmd --list-ports |
| 连接超时 | 检查网络连通性:ping 192.168.38.27 |
防火墙配置参考:
# 在Hadoop服务器上开放相关端口
firewall-cmd --add-port=9870/tcp --permanent
firewall-cmd --add-port=8088/tcp --permanent
firewall-cmd --reload
九、多集群监控方案
如果环境中存在多个Hadoop集群,可以采用以下方案实现统一监控:
9.1 方案一:多模板法
为每个集群复制一份模板,分别配置不同的宏变量默认值:
| 集群 | 模板名称 | NameNode宏 | ResourceManager宏 |
|---|---|---|---|
| 生产集群 | Hadoop by HTTP - Prod | 192.168.38.27 | 192.168.38.27 |
| 测试集群 | Hadoop by HTTP - Test | 192.168.38.100 | 192.168.38.101 |
9.2 方案二:主机宏覆盖法(推荐)
使用同一个模板,在不同主机上配置不同的宏变量值:

十、总结
本文详细介绍了使用Zabbix监控Hadoop集群的完整方案,核心要点回顾:
-
免Agent采集:通过HTTP协议访问Hadoop的Web UI接口(/jmx),无需安装额外软件
-
JSON数据解析:Zabbix自动解析/jmx端点返回的JSON数据,提取关键性能指标
-
自动发现机制:通过自动发现规则动态识别DataNode和NodeManager节点
-
宏变量复用:通过主机级宏变量覆盖模板级宏变量,实现模板的通用化复用
通过这套监控方案,可以全面掌握Hadoop集群的存储容量、计算资源、节点健康等核心状态,为大数据平台的稳定运行提供有力保障。
📌 相关文章推荐:
《Zabbix监控MySQL与Redis应用实践》
《Zabbix监控Tomcat与Java微服务应用实践》
《Zabbix监控Nginx+PHP-FPM应用实践》
如果文章对您有帮助,欢迎点赞收藏!如有疑问,请在评论区留言交流。
原创文章,转载请注明出处。
更多推荐
所有评论(0)