news 2026/9/5 4:53:37

Prometheus采集失败、无指标数据全场景排查手册

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Prometheus采集失败、无指标数据全场景排查手册

Prometheus采集失败、无指标数据全场景排查手册

技术栈:Kubernetes v1.32.13 + Rocky Linux 8.6 + Prometheus + Containerd 1.7.x

操作环境 / 对接原理 / 详细步骤 / 完整命令 / 配置文件 / 验证流程 / 排错方案

Prometheus采集失败、无指标数据全场景排查手册

操作环境

  • K8s 集群 3 节点:k8s-master(192.168.1.10), k8s-node1(192.168.1.11), k8s-node2(192.168.1.12),K8s 版本 v1.32.13

  • 监控组件:Prometheus监控,已部署对应监控组件 Pod,Prometheus 已配置服务发现,Grafana 已对接数据源

  • 操作系统 Rocky Linux 8.6,容器运行时 Containerd 1.7.x,已配置监控专用命名空间 monitoring

  • 监控数据持久化:已配置 PVC 绑定,数据留存策略已规划,监控组件资源限制已设置

  • 已配置 RBAC 权限,监控组件具备集群资源读取权限,网络策略已放行监控通信端口

对接原理

Prometheus采集失败、无指标数据全场景排查手册是 K8s 集群监控告警系统运维中的核心操作场景。K8s 监控体系通过指标采集(Exporter)、数据存储(Prometheus TSDB)、可视化展示(Grafana)、告警管理(Alertmanager)四大核心组件实现全链路监控。Prometheus监控作为监控体系的具体组件,负责指标采集、数据存储、可视化展示或告警分发。运维操作的核心目标是确保监控系统的可用性、数据质量、告警精准度和性能稳定性:通过规范化的部署配置确保监控组件稳定运行,通过精细化的指标采集确保数据完整准确,通过合理的告警规则确保故障及时发现不误报,通过性能调优确保监控系统不成为瓶颈,通过高可用和容灾备份确保监控不中断。所有操作需遵循业务无感知原则,对监控系统的变更采用灰度和滚动方式,避免影响业务监控。

详细步骤

1. 监控现状盘点与组件状态检查

# 1. 检查集群节点状态 kubectl get nodes -o wide kubectl get pods -n monitoring -o wide 2>/dev/null || kubectl get pods -A | grep -E 'prometheus|grafana|alertmanager|exporter' ​ # 2. 检查监控组件状态 kubectl get pods -n monitoring -o wide 2>/dev/null kubectl get svc -n monitoring -o wide 2>/dev/null kubectl get pvc -n monitoring -o wide 2>/dev/null ​ # 3. 检查 Prometheus 状态 kubectl get pods -n monitoring -l app=prometheus -o wide 2>/dev/null kubectl logs -n monitoring -l app=prometheus --tail=30 2>/dev/null | tail -20 ​ # 4. 检查 Grafana 状态 kubectl get pods -n monitoring -l app=grafana -o wide 2>/dev/null kubectl logs -n monitoring -l app=grafana --tail=20 2>/dev/null | tail -10 ​ # 5. 检查 Alertmanager 状态 kubectl get pods -n monitoring -l app=alertmanager -o wide 2>/dev/null kubectl logs -n monitoring -l app=alertmanager --tail=20 2>/dev/null | tail -10 ​ # 6. 检查 Exporter 状态 kubectl get pods -A | grep -E 'node-exporter|cadvisor|kube-state-metrics' kubectl get svc -A | grep -E 'node-exporter|cadvisor|kube-state-metrics' ​ # 7. 检查监控数据采集状态 # Prometheus Targets 状态 # kubectl port-forward -n monitoring svc/prometheus 9090:9090 & # curl -s http://localhost:9090/api/v1/targets | jq '.data.activeTargets[] | {job, health, lastError}' | head -50 ​ # 8. 导出监控配置备份 kubectl get cm -n monitoring -o yaml > /tmp/monitor_cm_backup_$(date +%Y%m%d).yaml 2>/dev/null kubectl get secret -n monitoring -o yaml > /tmp/monitor_secret_backup_$(date +%Y%m%d).yaml 2>/dev/null kubectl get pvc -n monitoring -o yaml > /tmp/monitor_pvc_backup_$(date +%Y%m%d).yaml 2>/dev/null echo "监控配置已备份到 /tmp/" ​

2. 制定操作方案与备份防护

# 1. 备份监控配置(操作前必做) kubectl get cm -n monitoring -o yaml > /tmp/monitor_cm_backup_$(date +%Y%m%d_%H%M%S).yaml 2>/dev/null kubectl get secret -n monitoring -o yaml > /tmp/monitor_secret_backup_$(date +%Y%m%d_%H%M%S).yaml 2>/dev/null kubectl get deployment,statefulset,daemonset -n monitoring -o yaml > /tmp/monitor_workload_backup_$(date +%Y%m%d_%H%M%S).yaml 2>/dev/null kubectl get pvc -n monitoring -o yaml > /tmp/monitor_pvc_backup_$(date +%Y%m%d_%H%M%S).yaml 2>/dev/null ​ # 2. 记录当前监控状态 echo "=== 监控状态记录 $(date) ===" > /tmp/monitor_status_$(date +%Y%m%d).txt echo "--- 监控组件 Pod ---" >> /tmp/monitor_status_$(date +%Y%m%d).txt kubectl get pods -n monitoring -o wide 2>/dev/null >> /tmp/monitor_status_$(date +%Y%m%d).txt echo "--- 监控 Service ---" >> /tmp/monitor_status_$(date +%Y%m%d).txt kubectl get svc -n monitoring -o wide 2>/dev/null >> /tmp/monitor_status_$(date +%Y%m%d).txt echo "--- 监控 PVC ---" >> /tmp/monitor_status_$(date +%Y%m%d).txt kubectl get pvc -n monitoring -o wide 2>/dev/null >> /tmp/monitor_status_$(date +%Y%m%d).txt cat /tmp/monitor_status_$(date +%Y%m%d).txt ​ # 3. 制定操作方案 cat > /tmp/monitor_operation_plan.md << 'EOF' # 监控操作方案 ## 一、操作目标 ## 二、影响范围评估 ## 三、操作步骤与时间窗口 ## 四、回滚方案 ## 五、验证标准 ## 六、风险点与应对措施 EOF echo "操作方案模板已创建" ​ # 4. 确认业务窗口 echo "当前时间: $(date)" echo "建议在业务低峰期执行监控操作,避免影响业务监控" ​ # 5. 通知相关业务方 # echo "监控运维操作通知" | mail -s "监控运维通知" admin@example.com ​

3. 执行监控组件配置操作

# 1. 检查监控组件配置 # Prometheus 配置 kubectl get cm -n monitoring prometheus-config -o yaml 2>/dev/null | head -80 # Grafana 配置 kubectl get cm -n monitoring grafana-config -o yaml 2>/dev/null | head -50 # Alertmanager 配置 kubectl get cm -n monitoring alertmanager-config -o yaml 2>/dev/null | head -50 ​ # 2. 检查监控组件日志 # Prometheus 日志 kubectl logs -n monitoring -l app=prometheus --tail=50 2>/dev/null | tail -30 # Grafana 日志 kubectl logs -n monitoring -l app=grafana --tail=30 2>/dev/null | tail -20 # Alertmanager 日志 kubectl logs -n monitoring -l app=alertmanager --tail=30 2>/dev/null | tail -20 ​ # 3. 检查 Prometheus 配置语法 # kubectl exec -n monitoring prometheus-0 -- promtool check config /etc/prometheus/prometheus.yml ​ # 4. 检查 Alertmanager 配置语法 # kubectl exec -n monitoring alertmanager-0 -- amtool check-config /etc/alertmanager/alertmanager.yml ​ # 5. 执行具体监控配置操作(根据标题调整) echo "执行监控组件具体配置操作..." echo "请根据操作方案执行具体步骤" ​ # 6. 应用监控配置变更 # kubectl apply -f /tmp/monitor_config.yaml # kubectl rollout restart deployment/prometheus -n monitoring # kubectl rollout restart deployment/grafana -n monitoring # kubectl rollout restart statefulset/alertmanager -n monitoring ​ # 7. 等待监控组件重启完成 kubectl rollout status deployment/prometheus -n monitoring --timeout=120s 2>/dev/null kubectl rollout status deployment/grafana -n monitoring --timeout=120s 2>/dev/null kubectl rollout status statefulset/alertmanager -n monitoring --timeout=120s 2>/dev/null echo "监控组件重启完成" ​

4. 验证监控数据采集与业务无感知

# 1. 验证监控组件状态 kubectl get pods -n monitoring -o wide 2>/dev/null # 预期:所有监控组件 Pod Running,READY 正常 ​ # 2. 验证 Prometheus 数据采集 # 检查 Targets 状态 # kubectl port-forward -n monitoring svc/prometheus 9090:9090 & # sleep 5 # curl -s http://localhost:9090/api/v1/targets | jq '.data.activeTargets[] | select(.health!="up") | {job, health, lastError}' # 预期:所有 Targets 状态为 up,无异常 ​ # 3. 验证 Prometheus 查询 # curl -s 'http://localhost:9090/api/v1/query?query=up' | jq '.data.result[] | {metric: .metric.job, value: .value[1]}' | head -20 # 预期:查询返回正常数据 ​ # 4. 验证 Grafana 访问 # kubectl port-forward -n monitoring svc/grafana 3000:3000 & # sleep 5 # curl -s http://admin:admin@localhost:3000/api/health # 预期:Grafana 健康检查正常 ​ # 5. 验证 Grafana 数据源 # curl -s http://admin:admin@localhost:3000/api/datasources | jq '.[].name' # 预期:Prometheus 数据源已配置 ​ # 6. 验证 Alertmanager 状态 # kubectl port-forward -n monitoring svc/alertmanager 9093:9093 & # sleep 5 # curl -s http://localhost:9093/api/v2/status | jq '.cluster' # 预期:Alertmanager 集群状态正常 ​ # 7. 验证告警规则 # curl -s http://localhost:9090/api/v1/rules | jq '.data.groups[] | {name, rules: [.rules[] | {name, health}]}' | head -50 # 预期:告警规则已加载,状态健康 ​ # 8. 清理 port-forward # pkill -f "port-forward" 2>/dev/null echo "验证完成" ​

5. 监控告警规则与面板配置

# 1. 配置监控告警规则 # 检查现有告警规则 # kubectl get cm -n monitoring prometheus-rules -o yaml 2>/dev/null | head -100 ​ # 2. 配置 Alertmanager 告警路由 # 检查 Alertmanager 配置 # kubectl get cm -n monitoring alertmanager-config -o yaml 2>/dev/null ​ # 3. 配置监控告警渠道 # 企业微信/钉钉/邮件/短信告警渠道配置 # 检查 Secret 中的告警渠道配置 # kubectl get secret -n monitoring alertmanager-secret -o yaml 2>/dev/null ​ # 4. 配置监控面板 # 检查 Grafana 数据源和面板 # kubectl get cm -n monitoring grafana-dashboards -o yaml 2>/dev/null | head -50 ​ # 5. 配置监控数据持久化 # 检查 PVC 绑定状态 kubectl get pvc -n monitoring -o wide 2>/dev/null # 预期:PVC 已 Bound,数据持久化正常 ​ # 6. 配置监控组件资源限制 # 检查 Deployment/StatefulSet 资源限制 kubectl get deployment -n monitoring -o jsonpath='{.items[*].spec.template.spec.containers[*].resources}' 2>/dev/null kubectl get statefulset -n monitoring -o jsonpath='{.items[*].spec.template.spec.containers[*].resources}' 2>/dev/null ​ # 7. 配置监控组件高可用 # 检查副本数和反亲和性 kubectl get deployment -n monitoring -o jsonpath='{.items[*].spec.replicas}' 2>/dev/null kubectl get statefulset -n monitoring -o jsonpath='{.items[*].spec.replicas}' 2>/dev/null ​ # 8. 配置监控组件日志轮转 # 检查日志配置 kubectl get cm -n monitoring -o name 2>/dev/null | head -20 ​

6. 验证操作结果与生成报告

# 1. 验证监控组件状态 kubectl get pods -n monitoring -o wide 2>/dev/null # 预期:所有监控组件 Pod Running,READY 正常 ​ # 2. 验证监控数据采集 # 检查 Prometheus Targets # kubectl port-forward -n monitoring svc/prometheus 9090:9090 & # sleep 5 # curl -s http://localhost:9090/api/v1/targets | jq '.data.activeTargets | length' # 预期:Targets 数量符合预期 ​ # 3. 验证告警规则 # curl -s http://localhost:9090/api/v1/rules | jq '.data.groups | length' # 预期:告警规则组已加载 ​ # 4. 验证 Grafana 面板 # curl -s http://admin:admin@localhost:3000/api/search | jq '.[].title' | head -20 # 预期:监控面板已配置 ​ # 5. 验证 Alertmanager 告警 # curl -s http://localhost:9093/api/v2/alerts | jq 'length' # 预期:告警状态正常 ​ # 6. 验证监控数据持久化 kubectl get pvc -n monitoring -o wide 2>/dev/null # 预期:PVC Bound,数据持久化正常 ​ # 7. 验证监控组件资源使用 kubectl top pods -n monitoring 2>/dev/null # 预期:资源使用在合理范围内 ​ # 8. 生成操作报告 echo "=== 监控操作报告 ===" > /tmp/monitor_operation_report.txt echo "操作时间: $(date)" >> /tmp/monitor_operation_report.txt echo "监控组件 Pod 数: $(kubectl get pods -n monitoring --no-headers 2>/dev/null | wc -l)" >> /tmp/monitor_operation_report.txt echo "异常 Pod: $(kubectl get pods -n monitoring --no-headers 2>/dev/null | grep -v Running | grep -v NAME | wc -l)" >> /tmp/monitor_operation_report.txt echo "PVC 数: $(kubectl get pvc -n monitoring --no-headers 2>/dev/null | wc -l)" >> /tmp/monitor_operation_report.txt echo "Service 数: $(kubectl get svc -n monitoring --no-headers 2>/dev/null | wc -l)" >> /tmp/monitor_operation_report.txt echo "ConfigMap 数: $(kubectl get cm -n monitoring --no-headers 2>/dev/null | wc -l)" >> /tmp/monitor_operation_report.txt cat /tmp/monitor_operation_report.txt ​ # 9. 清理 port-forward # pkill -f "port-forward" 2>/dev/null ​

验证流程

# 1. 监控组件状态验证 kubectl get pods -n monitoring -o wide 2>/dev/null # 预期:所有监控组件 Pod Running,READY 正常 ​ # 2. Prometheus 数据采集验证 # kubectl port-forward -n monitoring svc/prometheus 9090:9090 & # sleep 5 # curl -s http://localhost:9090/api/v1/targets | jq '.data.activeTargets[] | select(.health!="up") | {job, health}' # 预期:所有 Targets 状态 up ​ # 3. Prometheus 查询验证 # curl -s 'http://localhost:9090/api/v1/query?query=up' | jq '.data.result | length' # 预期:查询返回正常数据 ​ # 4. Grafana 访问验证 # curl -s http://admin:admin@localhost:3000/api/health # 预期:Grafana 健康 ​ # 5. Alertmanager 状态验证 # curl -s http://localhost:9093/api/v2/status | jq '.cluster.status' # 预期:Alertmanager 集群正常 ​ # 6. 监控数据持久化验证 kubectl get pvc -n monitoring -o wide 2>/dev/null # 预期:PVC Bound ​ # 7. 监控组件资源验证 kubectl top pods -n monitoring 2>/dev/null # 预期:资源使用合理 ​ # 8. 操作报告验证 cat /tmp/monitor_operation_report.txt # 预期:报告包含操作前后对比 ​

排错方案

  • Prometheus 启动失败:检查配置文件语法、PVC 挂载、权限、端口冲突、镜像版本、资源限制

  • Prometheus 采集失败 Target Down:检查目标服务状态、网络连通性、防火墙端口、RBAC 权限、服务发现配置

  • Prometheus 内存溢出 OOM:检查指标基数、采集频率、保留时间、内存限制、TSDB 配置、查询优化

  • Prometheus CPU 占用过高:检查高基数指标、复杂查询、采集任务数量、规则评估频率、资源限制

  • Prometheus 磁盘 IO 打满:检查 TSDB 写入、压缩、保留策略、磁盘性能、PVC 容量、IO 调度器

  • Prometheus 配置热更新失败:检查配置文件语法、reload 接口、配置校验、ConfigMap 更新、Pod 重启策略

  • Prometheus 高可用数据不一致:检查远程读写、联邦集群、数据同步、时间漂移、存储配置

  • Prometheus 服务发现失败:检查 RBAC 权限、API Server 连通性、服务发现配置、标签选择器、网络策略

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 16:29:31

算力核心指标与集群调度实战:从TFLOPS到分布式训练

算力这个话题最近被反复推上热搜&#xff0c;从“两大实验室将掌控全球算力”这种宏观叙事&#xff0c;到“单颗AI算力卡FP16算力≥280TFLOPS”“≥8颗AI算力卡”这类偏硬件规格的讨论&#xff0c;都指向同一个问题&#xff1a;算力正在成为像电力一样的基础资源。但很多人对“…

作者头像 李华
网站建设 2026/9/2 3:59:41

从川西格聂南线实测看中国新能源车竞争力:智能驾驶与工程迭代

跑完川西格聂南线这趟路&#xff0c;我对“中国新能源车真正的竞争力”这个问题的答案&#xff0c;发生了一次比较彻底的重构。过去几年&#xff0c;我认可中国新能源车&#xff0c;主要用的还是“政策驱动、电动化换道超车、用车成本低”这套逻辑。但这次在高原、碎石路、多弯…

作者头像 李华
网站建设 2026/9/1 3:13:19

从诊断到修正:真实场景表格解析系统的落地指南

真实场景中的表格解析&#xff08;Table Parsing&#xff09;远比公开评测集展示出来的情况复杂&#xff1a;印刷清晰的 PDF 会计表、手机拍摄的收据附件、ESG 报告里的跨页合并单元格、以及带有页眉页脚干扰的网页表格&#xff0c;都会让同一套模型出现完全不同的表现。这也是…

作者头像 李华
网站建设 2026/9/2 1:59:46

所有权代码评审的借用边界

所有权代码评审的借用边界Rust 的借用检查能保证引用不会活得比数据更久&#xff0c;但它并不替评审者决定一个函数“应该借用还是应该拥有”。签名里的 &T、&mut T、T、Cow 或 Arc 都在表达调用关系。选错了&#xff0c;代码也许能编译&#xff0c;却会出现多余复制、…

作者头像 李华
网站建设 2026/9/2 9:25:52

容器运维代码评审该盯住哪些细节

容器运维代码评审该盯住哪些细节容器里的程序最终要面对的是调度、网络、资源限制和终止信号。一次业务功能改动&#xff0c;可能因为探针写法、连接关闭顺序或配置默认值&#xff0c;在滚动发布时放大成可用性问题。评审不能只读业务函数&#xff0c;还要沿着进程从启动到退出…

作者头像 李华
网站建设 2026/8/31 1:49:43

CS自学完整指南:用一本开源手册从零搭建计算机科学体系

CS自学完整指南&#xff1a;用一本开源手册从零搭建计算机科学体系 【免费下载链接】cs-self-learning 计算机自学指南 项目地址: https://gitcode.com/GitHub_Trending/cs/cs-self-learning CS自学指南&#xff08;仓库名 cs-self-learning&#xff09;是一本开源的计算…

作者头像 李华