前言

Hadoop作为大数据领域的核心基础平台,其集群的健康状况直接关系到数据处理的效率和稳定性。NameNode、DataNode、ResourceManager、NodeManager等组件的运行状态,都是大数据运维团队需要密切关注的焦点。

Zabbix提供了基于HTTP协议的Hadoop监控方案,通过访问Hadoop各组件的Web UI接口(/jmx端点)获取JSON格式的监控数据,无需在Hadoop节点上安装额外的Agent,即可实现对Hadoop集群的全面监控。

本文将详细介绍如何使用Zabbix监控Hadoop集群,涵盖监控原理、模板配置、宏变量设置以及主机链接等完整流程。

一、实验环境说明

组件配置
Hadoop NameNode192.168.38.27,端口9870
Hadoop ResourceManager192.168.38.27,端口8088
Zabbix Server192.168.38.30
监控方式HTTP协议采集 /jmx 端点
Hadoop版本Apache Hadoop 3.x

说明:本实验NameNode和ResourceManager部署在同一台服务器上,实际生产环境中可能分布在不同的节点,监控原理完全相同。

二、Hadoop监控原理与架构

2.1 监控数据来源

Zabbix监控Hadoop的核心原理是通过HTTP协议访问Hadoop各组件的Web UI端口,获取 /jmx 端点返回的JSON格式性能数据。

数据获取地址:

组件URL端口数据格式
NameNodehttp://192.168.38.27:9870/jmx9870JSON
ResourceManagerhttp://192.168.38.27:8088/jmx8088JSON

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}localhostNameNode主机地址保持默认,在主机上覆盖
{$HADOOP.NAMENODE.PORT}9870NameNode HTTP端口保持默认或按需修改
{$HADOOP.RESOURCEMANAGER.HOST}localhostResourceManager主机地址保持默认,在主机上覆盖
{$HADOOP.RESOURCEMANAGER.PORT}8088ResourceManager HTTP端口保持默认或按需修改
{$HADOOP.SCHEME}http协议类型保持默认(如启用HTTPS则修改)

如下图所示:

微信截图_20230509165555

⚠️ 重要提示

  • {$HADOOP.NAMENODE.HOST} 和 {$HADOOP.RESOURCEMANAGER.HOST} 这两个宏变量不建议直接在模板中修改为具体IP,否则模板将无法复用到其他集群

  • 正确的做法是在模板中保持默认值,待模板链接到主机后,在主机级别添加同名宏变量

4.3 主机级别宏变量配置

当模板链接到具体主机后,需要在主机上添加同名宏变量,用于覆盖模板中的默认值。

操作步骤:

  1. 进入 数据采集(Data collection) → 主机(Hosts)

  2. 选择目标主机(192.168.38.27)

  3. 切换到 宏(Macros) 选项卡

  4. 添加以下宏变量:

宏变量说明
{$HADOOP.NAMENODE.HOST}192.168.38.27覆盖模板中的NameNode地址
{$HADOOP.RESOURCEMANAGER.HOST}192.168.38.27覆盖模板中的ResourceManager地址

如下图所示:

微信截图_20230509170732

宏变量优先级说明:主机级别的宏变量优先级高于模板级别的同名宏变量,因此主机上定义的宏变量会生效。

五、链接Hadoop监控模板

5.1 选择目标主机

由于Hadoop监控是通过HTTP协议采集数据,无需在Hadoop节点上安装Zabbix Agent,将模板直接链接到NameNode或ResourceManager所在的主机即可。

操作步骤:

  1. 进入 数据采集(Data collection) → 主机(Hosts)

  2. 选择或创建用于监控Hadoop的主机(如 192.168.38.27)

  3. 确保主机已添加HTTP类型的接口:

配置项
接口类型HTTP
IP地址192.168.38.27
端口80

说明:HTTP接口用于模板的监控项访问,端口填写80即可(宏变量中会指定具体端口)。

5.2 链接模板

  1. 进入主机详情页,切换到 模板(Templates) 选项卡

  2. 点击 链接新模板(Link new templates)

  3. 搜索并选择 Hadoop by HTTP

  4. 点击 更新(Update) 保存配置

如下图所示:

微信截图_20230509151413

5.3 配置主机宏变量(重要)

模板链接后,务必在主机上配置同名宏变量覆盖模板默认值:

  1. 切换到主机的 宏(Macros) 选项卡

  2. 点击 添加(Add)

  3. 依次添加以下宏变量:

宏变量
{$HADOOP.NAMENODE.HOST}192.168.38.27
{$HADOOP.RESOURCEMANAGER.HOST}192.168.38.27

六、监控指标详解

6.1 NameNode核心监控指标

链接模板后,Zabbix会自动采集以下NameNode核心指标:

监控项说明监控意义
NameNode StateNameNode状态(active/standby)⚠️ 判断高可用状态
Total BlocksHDFS总块数反映HDFS数据总量
Total FilesHDFS文件和目录总数监控元数据规模
Missing Blocks丢失的块数⚠️ 不为0需立即排查
Corrupt Blocks损坏的块数⚠️ 反映数据完整性
Under-Replicated Blocks副本不足的块数⚠️ 反映副本策略执行情况
Live DataNodes存活的DataNode数量⚠️ 监控节点健康状态
Dead DataNodes死亡的DataNode数量⚠️ 为0才正常
Decommissioning DataNodes退役中的DataNode数量监控节点维护状态
Capacity TotalHDFS总容量容量规划依据
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 Stateactive != 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 - Prod192.168.38.27192.168.38.27
测试集群Hadoop by HTTP - Test192.168.38.100192.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应用实践》

如果文章对您有帮助,欢迎点赞收藏!如有疑问,请在评论区留言交流。

原创文章,转载请注明出处。

更多推荐