本文档风哥主要介绍Hadoop集群监控体系,包括监控指标、监控工具、告警配置等内容,风哥教程参考Hadoop官方文档Cluster Setup、Monitoring等内容,适合大数据运维人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 监控体系概述
Hadoop集群监控是保障大数据平台稳定运行的关键环节,需要建立完善的监控体系。学习交流加群风哥微信: itpux-com
- 数据采集:收集集群各项指标数据
- 数据存储:存储监控数据用于分析
- 数据展示:可视化展示监控数据
- 告警通知:异常情况及时告警
监控体系是大数据平台稳定运行的保障,
通过监控可以及时发现问题并处理。
主要功能:
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是开源的监控告警系统,
采用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
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. 交互友好
支持筛选、钻取
# 常用图表类型
图表类型 适用场景
折线图 趋势变化
柱状图 对比分析
饼图 占比分析
仪表盘 单指标展示
表格 详细数据
热力图 分布分析
Part03-生产环境项目实施方案
3.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配置实战
$ 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部署实战
# 在所有节点执行
$ 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
name: Hadoop_NameNode_$1
type: GAUGE
– pattern: ‘java.lang
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
Part04-生产案例与实战讲解
4.1 集群监控案例
# 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:告警管理
- 自定义脚本:补充监控
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
