1. 首页 > Hadoop教程 > 正文

大数据教程FG090-Hadoop集群监控体系

本文档风哥主要介绍Hadoop集群监控体系,包括监控指标、监控工具、告警配置等内容,风哥教程参考Hadoop官方文档Cluster Setup、Monitoring等内容,适合大数据运维人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 监控体系概述

Hadoop集群监控是保障大数据平台稳定运行的关键环节,需要建立完善的监控体系。学习交流加群风哥微信: itpux-com

监控体系核心要素:

  • 数据采集:收集集群各项指标数据
  • 数据存储:存储监控数据用于分析
  • 数据展示:可视化展示监控数据
  • 告警通知:异常情况及时告警
# Hadoop监控体系简介

监控体系是大数据平台稳定运行的保障,
通过监控可以及时发现问题并处理。

主要功能:
1. 实时监控
– 集群状态监控
– 服务健康检查
– 资源使用监控

2. 历史分析
– 性能趋势分析
– 容量规划
– 问题排查

3. 告警通知
– 异常告警
– 阈值告警
– 趋势告警

# 监控层次

┌─────────────────────────────────────────┐
│ 应用层监控 │
│ 作业状态、任务执行、数据质量 │
├─────────────────────────────────────────┤
│ 服务层监控 │
│ HDFS、YARN、Hive、Spark等 │
├─────────────────────────────────────────┤
│ 系统层监控 │
│ CPU、内存、磁盘、网络 │
├─────────────────────────────────────────┤
│ 基础设施监控 │
│ 服务器、网络设备、存储设备 │
└─────────────────────────────────────────┘

# 监控指标分类

1. 基础设施指标
– CPU使用率
– 内存使用率
– 磁盘使用率
– 网络流量

2. HDFS指标
– NameNode状态
– DataNode状态
– 存储容量
– 块健康状态

3. YARN指标
– ResourceManager状态
– NodeManager状态
– 队列资源
– 应用状态

4. 应用指标
– 作业执行时间
– 作业成功率
– 数据处理量
– 资源消耗

# 监控工具栈

工具 用途
Prometheus 数据采集和存储
Grafana 数据可视化
AlertManager 告警管理
Node Exporter 系统指标采集
JMX Exporter Java应用指标采集

# 监控数据流

采集 -> 存储 -> 展示 -> 告警

Exporter -> Prometheus -> Grafana -> AlertManager

# 监控原则

1. 全面性
覆盖所有关键组件和指标

2. 实时性
及时发现和处理问题

3. 准确性
监控数据准确可靠

4. 可扩展性
支持新组件和指标接入

5. 易用性
界面友好,操作简单

1.2 监控指标体系

监控指标体系详解:

# 系统层监控指标

1. CPU指标
指标名称 说明
node_cpu_seconds_total CPU使用时间
node_load1 1分钟负载
node_load5 5分钟负载
node_load15 15分钟负载

2. 内存指标
指标名称 说明
node_memory_MemTotal_bytes 总内存
node_memory_MemFree_bytes 空闲内存
node_memory_MemAvailable_bytes 可用内存
node_memory_Cached_bytes 缓存内存

3. 磁盘指标
指标名称 说明
node_filesystem_size_bytes 文件系统大小
node_filesystem_free_bytes 文件系统空闲
node_disk_read_bytes_total 磁盘读取
node_disk_written_bytes_total 磁盘写入

4. 网络指标
指标名称 说明
node_network_receive_bytes_total 网络接收
node_network_transmit_bytes_total 网络发送
node_network_receive_errs_total 接收错误
node_network_transmit_errs_total 发送错误

# HDFS监控指标

1. NameNode指标
指标名称 说明
Hadoop_NameNode_TotalFiles 文件总数
Hadoop_NameNode_TotalBlocks 块总数
Hadoop_NameNode_CapacityUsed 已用容量
Hadoop_NameNode_CapacityTotal 总容量
Hadoop_NameNode_HeapMemoryUsed 堆内存使用
Hadoop_NameNode_GcCount GC次数
Hadoop_NameNode_GcTimeMillis GC时间

2. DataNode指标
指标名称 说明
Hadoop_DataNode_Capacity 容量
Hadoop_DataNode_DfsUsed 已用空间
Hadoop_DataNode_Remaining 剩余空间
Hadoop_DataNode_BytesRead 读取字节数
Hadoop_DataNode_BytesWritten 写入字节数
Hadoop_DataNode_BlocksCached 缓存块数

3. 块健康指标
指标名称 说明
MissingBlocks 丢失块数
CorruptBlocks 损坏块数
UnderReplicatedBlocks 副本不足块数
PendingReplicationBlocks 待复制块数

# YARN监控指标

1. ResourceManager指标
指标名称 说明
yarn_queue_availablememorymb 可用内存
yarn_queue_availablevcores 可用vcore
yarn_queue_appsrunning 运行应用数
yarn_queue_appspending 等待应用数
yarn_cluster_memorytotal 集群总内存
yarn_cluster_memoryused 集群已用内存

2. NodeManager指标
指标名称 说明
yarn_nodemanager_availablememorymb 可用内存
yarn_nodemanager_availablevcores 可用vcore
yarn_nodemanager_containersrunning 运行容器数
yarn_nodemanager_containerslaunched 启动容器数

# JVM监控指标

指标名称 说明
jvm_memory_bytes_used 内存使用
jvm_memory_bytes_max 最大内存
jvm_gc_collection_seconds_sum GC时间
jvm_threads_current 当前线程数
jvm_threads_deadlocked 死锁线程数

# 业务监控指标

1. 作业指标
指标名称 说明
job_submit_count 作业提交数
job_success_count 作业成功数
job_failure_count 作业失败数
job_duration_seconds 作业执行时间

2. 数据指标
指标名称 说明
data_input_bytes 输入数据量
data_output_bytes 输出数据量
data_processing_rate 处理速率

1.3 监控工具介绍

监控工具介绍:

# Prometheus

Prometheus是开源的监控告警系统,
采用Pull模式采集指标数据。

特点:
– 多维数据模型
– 灵活的查询语言(PromQL)
– 单机部署简单
– 支持联邦集群

架构:
┌─────────────┐
│ Prometheus │
│ Server │
├─────────────┤
│ TSDB │
│ 存储 │
└─────────────┘

│ Pull

┌─────────────┐
│ Exporter │
│ 指标采集 │
└─────────────┘

# Grafana

Grafana是开源的数据可视化平台,
支持多种数据源。

特点:
– 丰富的图表类型
– 灵活的仪表盘
– 告警功能
– 用户权限管理

支持数据源:
– Prometheus
– InfluxDB
– Elasticsearch
– MySQL
– PostgreSQL

# AlertManager

AlertManager是Prometheus的告警组件,
负责告警去重、分组、路由。

功能:
– 告警去重
– 告警分组
– 告警路由
– 告警静默
– 告警抑制

支持通知渠道:
– Email
– 钉钉
– 企业微信
– Slack
– PagerDuty

# Exporter

Exporter是指标采集器,
将应用指标暴露给Prometheus。

常用Exporter:
Exporter 用途
Node Exporter 系统指标
JMX Exporter Java应用指标
HDFS Exporter HDFS指标
YARN Exporter YARN指标
MySQL Exporter MySQL指标

# Hadoop原生监控

1. Web UI
– NameNode UI: http://nn:9870
– ResourceManager UI: http://rm:8088
– History Server UI: http://hs:19888

2. JMX
– 通过JMX获取详细指标
– 支持JConsole、JVisualVM

3. Metrics2
– 内置指标框架
– 支持多种输出方式

# 监控工具对比

工具 优点 缺点
Prometheus 功能强大、社区活跃 单机存储有限
Zabbix 企业级、功能全面 配置复杂
Nagios 成熟稳定、插件丰富 界面老旧
OpenTSDB 分布式存储 依赖HBase

风哥提示:Prometheus + Grafana是目前最流行的监控方案,适合Hadoop集群监控。建议建立完善的监控指标体系,覆盖系统层、服务层、应用层。

Part02-生产环境规划与建议

2.1 环境规划建议

环境规划建议:

# 版本兼容性

组件 推荐版本
Prometheus 2.48.0
Grafana 10.2.0
AlertManager 0.26.0
Node Exporter 1.7.0
JMX Exporter 0.20.0

# 硬件规划

组件 配置 数量
Prometheus 8C/16G/500G 2(高可用)
Grafana 4C/8G/100G 2
AlertManager 2C/4G/50G 3
Node Exporter – 每个节点
JMX Exporter – 每个服务

# 软件依赖

1. Prometheus
– Go 1.20+
– systemd

2. Grafana
– SQLite/MySQL/PostgreSQL

3. AlertManager
– Go 1.20+

# 网络规划

端口 用途
9090 Prometheus Web
9093 AlertManager Web
3000 Grafana Web
9100 Node Exporter
7070 JMX Exporter

# 目录规划

目录 用途
/bigdata/app/prometheus Prometheus安装目录
/bigdata/app/prometheus/data Prometheus数据目录
/bigdata/app/grafana Grafana安装目录
/bigdata/app/alertmanager AlertManager安装目录

# 数据保留策略

数据类型 保留时间
原始数据 15天
聚合数据 90天
告警历史 180天

# 高可用规划

1. Prometheus高可用
– 部署2个实例
– Thanos实现长期存储
– 负载均衡

2. Grafana高可用
– 部署2个实例
– 数据库存储配置
– 负载均衡

3. AlertManager高可用
– 部署3个实例
– 集群模式
– 告警去重

2.2 告警规划建议

告警规划建议:

# 告警级别

级别 说明 响应时间
P0 紧急 5分钟
P1 严重 15分钟
P2 警告 30分钟
P3 提示 2小时

# 告警规则

1. 系统告警
告警名称 条件 级别
CPU使用率高 > 80% 持续5分钟 P2
内存使用率高 > 85% 持续5分钟 P2
磁盘使用率高 > 85% P1
磁盘使用率严重 > 95% P0

2. HDFS告警
告警名称 条件 级别
NameNode不可用 down P0
DataNode不可用 > 10% down P1
丢失块 > 0 P0
损坏块 > 0 P0
副本不足块 > 100 P1

3. YARN告警
告警名称 条件 级别
ResourceManager不可用 down P0
NodeManager不可用 > 10% down P1
队列资源不足 可用 < 10% P1 应用积压 pending > 100 P2

4. JVM告警
告警名称 条件 级别
堆内存使用率高 > 85% P2
GC频繁 GC次数 > 100/分钟 P2
GC时间长 GC时间 > 1秒/次 P1

# 告警通知渠道

渠道 适用场景
Email 所有告警
钉钉 P0/P1告警
企业微信 P0/P1告警
短信 P0告警
电话 P0告警

# 告警收敛

1. 分组
按告警名称、标签分组

2. 抑制
高级别告警抑制低级别

3. 静默
维护期间静默告警

# 告警升级

时间 动作
0分钟 发送告警
15分钟 未确认,升级
30分钟 未处理,升级
60分钟 未解决,升级

2.3 仪表盘规划建议

仪表盘规划建议:

# 仪表盘分类

1. 集群总览仪表盘
– 集群健康状态
– 关键指标概览
– 告警统计

2. 系统监控仪表盘
– CPU使用率
– 内存使用率
– 磁盘使用率
– 网络流量

3. HDFS监控仪表盘
– NameNode状态
– DataNode状态
– 存储容量
– 块健康状态

4. YARN监控仪表盘
– ResourceManager状态
– NodeManager状态
– 队列资源
– 应用状态

5. 作业监控仪表盘
– 作业统计
– 作业趋势
– 作业详情

# 仪表盘设计原则

1. 层次清晰
从总览到详情,逐层深入

2. 重点突出
关键指标放在显眼位置

3. 颜色合理
使用颜色区分状态

4. 交互友好
支持筛选、钻取

# 常用图表类型

图表类型 适用场景
折线图 趋势变化
柱状图 对比分析
饼图 占比分析
仪表盘 单指标展示
表格 详细数据
热力图 分布分析

生产环境建议:生产环境建议配置监控高可用,建立完善的告警规则和通知渠道。定期审查和优化监控策略。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 Prometheus部署实战

# 1. 下载安装Prometheus
$ cd /bigdata/app
$ wget https://github.com/prometheus/prometheus/releases/download/v2.48.0/prometheus-2.48.0.linux-amd64.tar.gz
$ tar -xzf prometheus-2.48.0.linux-amd64.tar.gz
$ ln -s prometheus-2.48.0.linux-amd64 prometheus

# 2. 创建配置文件
$ cat > /bigdata/app/prometheus/prometheus.yml << 'EOF' global: scrape_interval: 15s evaluation_interval: 15s alerting: alertmanagers: - static_configs: - targets: - localhost:9093 rule_files: - /bigdata/app/prometheus/rules/*.yml scrape_configs: # Prometheus自身监控 - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] # Node Exporter监控 - job_name: 'node' static_configs: - targets: - 'fgedu-node1:9100' - 'fgedu-node2:9100' - 'fgedu-node3:9100' labels: cluster: 'fgedu-hadoop' # HDFS NameNode监控 - job_name: 'namenode' static_configs: - targets: ['fgedu-node1:7070'] labels: component: 'namenode' # HDFS DataNode监控 - job_name: 'datanode' static_configs: - targets: - 'fgedu-node1:7071' - 'fgedu-node2:7071' - 'fgedu-node3:7071' labels: component: 'datanode' # YARN ResourceManager监控 - job_name: 'resourcemanager' static_configs: - targets: ['fgedu-node1:7072'] labels: component: 'resourcemanager' # YARN NodeManager监控 - job_name: 'nodemanager' static_configs: - targets: - 'fgedu-node1:7073' - 'fgedu-node2:7073' - 'fgedu-node3:7073' labels: component: 'nodemanager' EOF # 3. 创建告警规则 $ mkdir -p /bigdata/app/prometheus/rules $ cat > /bigdata/app/prometheus/rules/hadoop.yml << 'EOF' groups: - name: hadoop_alerts rules: # CPU告警 - alert: HighCPUUsage expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: “CPU使用率过高”
description: “实例 {{ $labels.instance }} CPU使用率超过80%,当前值: {{ $value }}%”

# 内存告警
– alert: HighMemoryUsage
expr: (1 – (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85
for: 5m
labels:
severity: warning
annotations:
summary: “内存使用率过高”
description: “实例 {{ $labels.instance }} 内存使用率超过85%,当前值: {{ $value }}%”

# 磁盘告警
– alert: HighDiskUsage
expr: (1 – (node_filesystem_avail_bytes{fstype!~”tmpfs|overlay”} / node_filesystem_size_bytes{fstype!~”tmpfs|overlay”})) * 100 > 85
for: 5m
labels:
severity: warning
annotations:
summary: “磁盘使用率过高”
description: “实例 {{ $labels.instance }} 磁盘使用率超过85%,当前值: {{ $value }}%”

# NameNode堆内存告警
– alert: NameNodeHeapHigh
expr: jvm_memory_bytes_used{area=”heap”,component=”namenode”} / jvm_memory_bytes_max{area=”heap”,component=”namenode”} * 100 > 85
for: 5m
labels:
severity: warning
annotations:
summary: “NameNode堆内存使用率过高”
description: “NameNode堆内存使用率超过85%,当前值: {{ $value }}%”

# 丢失块告警
– alert: MissingBlocks
expr: Hadoop_NameNode_MissingBlocks > 0
for: 1m
labels:
severity: critical
annotations:
summary: “HDFS存在丢失块”
description: “HDFS存在 {{ $value }} 个丢失块”

# DataNode下线告警
– alert: DataNodeDown
expr: up{job=”datanode”} == 0
for: 5m
labels:
severity: critical
annotations:
summary: “DataNode不可用”
description: “DataNode {{ $labels.instance }} 不可用”
EOF

# 4. 创建systemd服务
$ cat > /etc/systemd/system/prometheus.service << 'EOF' [Unit] Description=Prometheus After=network.target [Service] Type=simple User=root ExecStart=/bigdata/app/prometheus/prometheus \ --config.file=/bigdata/app/prometheus/prometheus.yml \ --storage.tsdb.path=/bigdata/app/prometheus/data \ --storage.tsdb.retention.time=15d \ --web.listen-address=:9090 Restart=on-failure [Install] WantedBy=multi-user.target EOF # 5. 启动Prometheus $ systemctl daemon-reload $ systemctl start prometheus $ systemctl enable prometheus # 6. 验证 $ curl http://localhost:9090/-/healthy Prometheus is Healthy. # 7. 访问Web UI http://fgedu-node1:9090

3.2 Grafana配置实战

# 1. 安装Grafana
$ cd /bigdata/app
$ wget https://dl.grafana.com/oss/release/grafana-10.2.0.linux-amd64.tar.gz
$ tar -xzf grafana-10.2.0.linux-amd64.tar.gz
$ ln -s grafana-10.2.0 grafana

# 2. 配置Grafana
$ cat > /bigdata/app/grafana/conf/custom.ini << 'EOF' [server] http_port = 3000 domain = fgedu-node1 [database] type = sqlite3 path = /bigdata/app/grafana/data/grafana.db [security] admin_user = admin admin_password = admin123 [auth.anonymous] enabled = false [alerting] enabled = true EOF # 3. 启动Grafana $ cd /bigdata/app/grafana $ bin/grafana-server & # 4. 访问Web UI http://fgedu-node1:3000 用户名: admin 密码: admin123 # 5. 添加Prometheus数据源 # Web UI -> Configuration -> Data Sources -> Add data source
# 选择 Prometheus
# URL: http://localhost:9090
# Save & Test

# 6. 导入Hadoop监控仪表盘
# Web UI -> Dashboards -> Import
# 输入仪表盘ID: 15098 (Hadoop Dashboard)
# 或上传JSON文件

# 7. 创建自定义仪表盘
# Web UI -> Dashboards -> New Dashboard

# 示例面板JSON
$ cat > /tmp/hadoop_dashboard.json << 'EOF' { "dashboard": { "title": "Hadoop Cluster Monitor", "panels": [ { "title": "CPU Usage", "type": "graph", "targets": [ { "expr": "100 - (avg by(instance) (irate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)", "legendFormat": "{{instance}}" } ] }, { "title": "Memory Usage", "type": "graph", "targets": [ { "expr": "(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100", "legendFormat": "{{instance}}" } ] }, { "title": "HDFS Capacity", "type": "gauge", "targets": [ { "expr": "Hadoop_NameNode_CapacityUsed / Hadoop_NameNode_CapacityTotal * 100", "legendFormat": "Used %" } ] } ] } } EOF

3.3 Exporter部署实战

# 1. 部署Node Exporter
# 在所有节点执行
$ cd /bigdata/app
$ wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
$ tar -xzf node_exporter-1.7.0.linux-amd64.tar.gz
$ ln -s node_exporter-1.7.0.linux-amd64 node_exporter

# 创建systemd服务
$ cat > /etc/systemd/system/node_exporter.service << 'EOF' [Unit] Description=Node Exporter After=network.target [Service] Type=simple ExecStart=/bigdata/app/node_exporter/node_exporter Restart=on-failure [Install] WantedBy=multi-user.target EOF $ systemctl daemon-reload $ systemctl start node_exporter $ systemctl enable node_exporter # 验证 $ curl http://localhost:9100/metrics | head # HELP node_cpu_seconds_total Seconds the cpus spent in each mode. # TYPE node_cpu_seconds_total counter node_cpu_seconds_total{cpu="0",mode="idle"} 123456.78 # 2. 部署JMX Exporter # 下载JMX Exporter $ cd /bigdata/app $ wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.20.0/jmx_prometheus_javaagent-0.20.0.jar # 创建配置文件 $ cat > /bigdata/app/jmx_exporter/namenode.yml << 'EOF' lowercaseOutputName: true lowercaseOutputLabelNames: true rules: - pattern: 'Hadoop<>Value’
name: Hadoop_NameNode_$1
type: GAUGE
– pattern: ‘java.langused’
name: jvm_memory_bytes_used
labels:
area: heap
type: GAUGE
EOF

# 配置NameNode使用JMX Exporter
# 在hadoop-env.sh中添加
$ cat >> /bigdata/app/hadoop/etc/hadoop/hadoop-env.sh << 'EOF' export HADOOP_NAMENODE_OPTS="$HADOOP_NAMENODE_OPTS -javaagent:/bigdata/app/jmx_exporter/jmx_prometheus_javaagent-0.20.0.jar=7070:/bigdata/app/jmx_exporter/namenode.yml" EOF # 配置DataNode使用JMX Exporter $ cat >> /bigdata/app/hadoop/etc/hadoop/hadoop-env.sh << 'EOF' export HADOOP_DATANODE_OPTS="$HADOOP_DATANODE_OPTS -javaagent:/bigdata/app/jmx_exporter/jmx_prometheus_javaagent-0.20.0.jar=7071:/bigdata/app/jmx_exporter/datanode.yml" EOF # 配置ResourceManager使用JMX Exporter $ cat >> /bigdata/app/hadoop/etc/hadoop/yarn-env.sh << 'EOF' export YARN_RESOURCEMANAGER_OPTS="$YARN_RESOURCEMANAGER_OPTS -javaagent:/bigdata/app/jmx_exporter/jmx_prometheus_javaagent-0.20.0.jar=7072:/bigdata/app/jmx_exporter/resourcemanager.yml" EOF # 配置NodeManager使用JMX Exporter $ cat >> /bigdata/app/hadoop/etc/hadoop/yarn-env.sh << 'EOF' export YARN_NODEMANAGER_OPTS="$YARN_NODEMANAGER_OPTS -javaagent:/bigdata/app/jmx_exporter/jmx_prometheus_javaagent-0.20.0.jar=7073:/bigdata/app/jmx_exporter/nodemanager.yml" EOF # 重启Hadoop服务 $ stop-dfs.sh && start-dfs.sh $ stop-yarn.sh && start-yarn.sh # 验证 $ curl http://fgedu-node1:7070/metrics | head # HELP Hadoop_NameNode_TotalFiles Total files # TYPE Hadoop_NameNode_TotalFiles gauge Hadoop_NameNode_TotalFiles 12345.0 # 3. 部署AlertManager $ cd /bigdata/app $ wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz $ tar -xzf alertmanager-0.26.0.linux-amd64.tar.gz $ ln -s alertmanager-0.26.0.linux-amd64 alertmanager # 配置AlertManager $ cat > /bigdata/app/alertmanager/alertmanager.yml << 'EOF' global: resolve_timeout: 5m smtp_smarthost: 'smtp.fgedu.com:25' smtp_from: 'alert@fgedu.com' smtp_auth_username: 'alert@fgedu.com' smtp_auth_password: 'alert123' route: group_by: ['alertname'] group_wait: 30s group_interval: 5m repeat_interval: 4h receiver: 'email' routes: - match: severity: critical receiver: 'email' - match: severity: warning receiver: 'email' receivers: - name: 'email' email_configs: - to: 'admin@fgedu.com' send_resolved: true EOF # 启动AlertManager $ cd /bigdata/app/alertmanager $ ./alertmanager --config.file=alertmanager.yml & # 访问Web UI http://fgedu-node1:9093

风哥提示:部署监控需要按步骤进行,先部署Prometheus和Grafana,再部署各类Exporter。配置告警规则时要根据实际业务需求调整阈值。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 集群监控案例

# 案例:完整Hadoop集群监控方案

# 1. 监控脚本
$ cat > /tmp/hadoop_monitor.sh << 'EOF' #!/bin/bash # hadoop_monitor.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn echo "=== Hadoop集群监控报告 $(date) ===" # HDFS监控 echo "" echo "=== HDFS状态 ===" hdfs dfsadmin -report | head -20 echo "" echo "=== HDFS健康状态 ===" hdfs fsck / -files -blocks -locations | tail -5 # YARN监控 echo "" echo "=== YARN状态 ===" yarn node -list echo "" echo "=== 队列状态 ===" yarn queue -status default # 系统监控 echo "" echo "=== 系统资源 ===" echo "CPU使用率: $(top -bn1 | grep "Cpu(s)" | awk '{print $2}')%" echo "内存使用率: $(free | awk '/Mem/{printf "%.2f%%", $3/$2*100}')" echo "磁盘使用率: $(df -h / | awk 'NR==2{print $5}')" # 告警检查 echo "" echo "=== 告警检查 ===" MISSING_BLOCKS=$(hdfs fsck / 2>&1 | grep “MISSING” | awk ‘{print $1}’)
if [ “$MISSING_BLOCKS” -gt 0 ]; then
echo “告警: 存在丢失块 $MISSING_BLOCKS 个”
fi

CORRUPT_BLOCKS=$(hdfs fsck / 2>&1 | grep “CORRUPT” | awk ‘{print $1}’)
if [ “$CORRUPT_BLOCKS” -gt 0 ]; then
echo “告警: 存在损坏块 $CORRUPT_BLOCKS 个”
fi

DEAD_NODES=$(hdfs dfsadmin -report | grep “Dead datanodes” | awk -F: ‘{print $2}’)
if [ “$DEAD_NODES” -gt 0 ]; then
echo “告警: 存在死亡节点 $DEAD_NODES 个”
fi
EOF

$ chmod +x /tmp/hadoop_monitor.sh
$ /tmp/hadoop_monitor.sh

=== Hadoop集群监控报告 2026年 04月 08日 19:00:00 CST ===

=== HDFS状态 ===
Configured Capacity: 600000000000 (600 TB)
Present Capacity: 580000000000 (580 TB)
DFS Remaining: 400000000000 (400 TB)

=== HDFS健康状态 ===
Status: HEALTHY
Total size: 180000000000 B
Total blocks: 500000
Total files: 300000

=== YARN状态 ===
Total Nodes:10
Node-Id Node-State Node-Http-Address
fgedu-node1:8041 RUNNING fgedu-node1:8042
fgedu-node2:8041 RUNNING fgedu-node2:8042

=== 队列状态 ===
Queue Name: default
State: RUNNING
Capacity: 100%

=== 系统资源 ===
CPU使用率: 25.3%
内存使用率: 68.50%
磁盘使用率: 45%

=== 告警检查 ===

4.2 告警案例

# 案例:告警处理流程

# 1. 接收告警
告警内容:
告警名称: DataNodeDown
告警级别: critical
告警内容: DataNode fgedu-node3:7071 不可用
告警时间: 2026-04-08 19:00:00

# 2. 排查问题
# 检查DataNode状态
$ hdfs dfsadmin -report | grep -A5 “fgedu-node3”

# 检查DataNode日志
$ tail -100 /bigdata/app/hadoop/logs/hadoop-root-datanode-fgedu-node3.log

# 检查系统状态
$ ssh fgedu-node3 “top -bn1 | head”
$ ssh fgedu-node3 “df -h”

# 3. 解决问题
# 如果是进程挂掉
$ ssh fgedu-node3 “hdfs –daemon start datanode”

# 如果是磁盘满
$ ssh fgedu-node3 “rm -rf /tmp/*”

# 如果是网络问题
$ ping fgedu-node3

# 4. 验证恢复
$ hdfs dfsadmin -report | grep -A5 “fgedu-node3”

Live datanodes (3):
Name: 192.168.1.103:9866 (fgedu-node3)
Hostname: fgedu-node3

# 5. 关闭告警
# AlertManager UI -> Silence -> Create Silence
# 或等待自动恢复

4.3 常见问题处理

4.3.1 Prometheus数据丢失

# 问题现象:监控数据丢失

# 排查步骤
# 1. 检查磁盘空间
$ df -h /bigdata/app/prometheus/data

# 2. 检查Prometheus日志
$ tail -100 /bigdata/app/prometheus/prometheus.log

# 解决方案
# 1. 扩展存储
# 2. 调整保留时间
–storage.tsdb.retention.time=15d

# 3. 配置远程存储
remote_write:
– url: “http://remote-storage:9090/api/v1/write”

4.3.2 告警风暴

# 问题现象:告警风暴

# 排查步骤
# 1. 检查告警规则
$ cat /bigdata/app/prometheus/rules/*.yml

# 2. 检查告警历史
# AlertManager UI -> Alerts

# 解决方案
# 1. 调整告警阈值
# 2. 增加告警等待时间
for: 10m

# 3. 配置告警分组
route:
group_by: [‘alertname’, ‘instance’]
group_wait: 30s
group_interval: 5m

Part05-风哥经验总结与分享

5.1 监控最佳实践

监控最佳实践建议:

# 监控最佳实践
1. 建立完善的监控指标体系
2. 配置合理的告警规则
3. 定期审查监控策略
4. 保持监控系统高可用
5. 做好监控数据备份

5.2 使用建议

使用建议:

监控使用建议:

  • 监控要全面覆盖
  • 告警要及时准确
  • 定期优化监控策略
  • 建立监控运维文档

5.3 工具推荐

监控工具推荐:

  • Prometheus:数据采集存储
  • Grafana:数据可视化
  • AlertManager:告警管理
  • 自定义脚本:补充监控
风哥提示:监控是大数据平台稳定运行的保障。建议建立完善的监控体系,覆盖系统层、服务层、应用层。配置合理的告警规则,确保问题及时发现和处理。from bigdata视频:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息