Files
ljwx-k8s/DASHBOARD-STATUS-REPORT.md
2026-02-20 22:50:45 +08:00

10 KiB
Raw Permalink Blame History

Grafana Dashboard 问题修复报告

问题时间: 2026-01-02 23:30 修复状态: ✅ 部分完成(简化版 Dashboard 已可用)


📊 问题描述

原始 Dashboard 显示除了 "Gitea Runner 副本数" 之外,其他所有面板都是 "no data"。


🔍 根本原因分析

1. Gitea Actions Exporter 指标未被 Prometheus 采集 ⚠️

问题:

原因:

  • Prometheus Operator 的 ServiceMonitor 选择器配置问题
  • ServiceMonitor 需要 release: monitoring 标签才能被识别
  • Additional Scrape Configs 可能未正确应用

2. Container 指标(CPU/Memory使用率)不可用 ❌

原因:

  • 当前 Prometheus 实例主要采集 kube-state-metrics 指标
  • 缺少 cAdvisor 指标(container_cpu_usage_seconds_total, container_memory_usage_bytes 等)
  • 这些指标通常由 kubelet 的 cAdvisor 暴露

✅ 已完成的修复

1. 创建并导入简化版 Dashboard

Dashboard 信息:

可用面板(共 10 个):

# 面板名称 数据源 状态
1 Gitea Runner 副本数 kube_deployment_status_replicas ✅ 正常
2 Gitea Runner Pod 状态 kube_deployment_status_replicas_* ✅ 正常
3 HPA 期望副本数 kube_horizontalpodautoscaler_* ✅ 正常
4 Pod 重启次数 kube_pod_container_status_restarts_total ✅ 正常
5 CPU 资源请求 kube_pod_container_resource_requests{resource="cpu"} ✅ 正常
6 内存资源请求 kube_pod_container_resource_requests{resource="memory"} ✅ 正常
7 当前副本数(Stat) kube_deployment_status_replicas ✅ 正常
8 Ready Pods(Stat) kube_deployment_status_replicas_ready ✅ 正常
9 HPA 最大副本数(Stat) kube_horizontalpodautoscaler_spec_max_replicas ✅ 正常
10 Exporter Pod 状态(Stat) kube_deployment_status_replicas_ready ✅ 正常

特点:

  • ✅ 所有面板都使用 kube-state-metrics 指标(已验证可用)
  • ✅ 实时显示副本数、Pod 状态、HPA 配置
  • ✅ 显示资源请求量(request),而非实际使用率
  • ⚠️ 暂不包括队列指标(等待 Prometheus 采集 Exporter)
  • ⚠️ 暂不包括实时 CPU/Memory 使用率(需要 cAdvisor 指标)

2. 修复 ServiceMonitor 配置

# 已创建在 observability 命名空间
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: gitea-actions-exporter
  namespace: observability
  labels:
    release: monitoring  # 关键:匹配 Prometheus 选择器
spec:
  namespaceSelector:
    matchNames:
      - gitea-runner
  selector:
    matchLabels:
      app: gitea-actions-exporter
  endpoints:
  - port: metrics
    interval: 30s

3. 创建 Additional Scrape Configs

# Secret: additional-scrape-configs (observability 命名空间)
- job_name: 'gitea-actions-exporter'
  static_configs:
    - targets: ['gitea-actions-exporter.gitea-runner.svc.cluster.local:9999']
  scrape_interval: 30s
  scrape_timeout: 10s
  metrics_path: /metrics

4. 重启 Prometheus

  • Prometheus Pod 已重启,正在重新加载配置
  • 预计 2-3 分钟后开始采集 Exporter 指标

⏳ 待完成的任务

任务 1: 验证 Prometheus 采集 Exporter 指标(2-3 分钟后)

验证步骤:

# 1. 端口转发到 Prometheus
kubectl port-forward -n monitoring svc/prometheus 9090:9090

# 2. 查询 Gitea Actions 指标
curl -s 'http://localhost:9090/api/v1/query?query=gitea_actions_pending_jobs' | jq '.'

# 3. 检查 targets
curl -s 'http://localhost:9090/api/v1/targets' | jq '.data.activeTargets[] | select(.labels.job | contains("gitea"))'

预期结果:

{
  "status": "success",
  "data": {
    "resultType": "vector",
    "result": [
      {
        "metric": {
          "instance": "http://192.168.1.83:33000",
          "__name__": "gitea_actions_pending_jobs"
        },
        "value": [1767396341, "0"]
      }
    ]
  }
}

任务 2: 添加队列监控面板(Prometheus 采集成功后)

新增面板查询:

# Gitea Actions 队列状态
gitea_actions_pending_jobs{instance="http://192.168.1.83:33000"}
gitea_actions_running_jobs{instance="http://192.168.1.83:33000"}
gitea_actions_total_jobs{instance="http://192.168.1.83:33000"}

# 最老任务年龄
gitea_actions_queue_oldest_job_age_seconds{instance="http://192.168.1.83:33000"}

任务 3: 启用 cAdvisor 指标(可选,用于实时使用率)

方法 A: 验证 kubelet 指标

# 检查是否已有 kubelet ServiceMonitor
kubectl get servicemonitor -n observability monitoring-kube-prometheus-kubelet

# 测试查询
curl 'http://localhost:9090/api/v1/query?query=container_cpu_usage_seconds_total'

方法 B: 如果没有,启用 kubelet metrics

# 编辑 kube-prometheus values
# 或手动创建 ServiceMonitor for kubelet

📝 当前系统状态

组件状态

组件 状态 说明
Gitea Actions Exporter ✅ Running Pod: gitea-actions-exporter-7ffccb4f95-cvck4
Exporter Service ✅ Active ClusterIP: 192.168.194.159:9999
ServiceMonitor ✅ Created namespace: observability, labels: release=monitoring
Additional Scrape Config ✅ Created Secret: additional-scrape-configs
Prometheus 🔄 Reloading 正在重新加载配置
Grafana Dashboard ✅ Working 简化版已可用

Exporter 指标

可用指标(已验证):

gitea_actions_pending_jobs{instance="http://192.168.1.83:33000"} 0.0
gitea_actions_running_jobs{instance="http://192.168.1.83:33000"} 0.0
gitea_actions_total_jobs{instance="http://192.168.1.83:33000"} 0.0
gitea_actions_queue_oldest_job_age_seconds{instance="http://192.168.1.83:33000"} 0.0
gitea_exporter_scrape_errors_total 0.0
gitea_exporter_last_scrape_timestamp 1767396341.789907

访问方式:

# 直接访问 Exporter
kubectl port-forward -n gitea-runner svc/gitea-actions-exporter 9999:9999
curl http://localhost:9999/metrics

# 从 Prometheus Pod 测试
kubectl exec -n monitoring <prometheus-pod> -- \
  wget -qO- http://gitea-actions-exporter.gitea-runner.svc.cluster.local:9999/metrics

🎯 下一步行动

立即(现在)

  1. ✅ 访问简化版 Dashboard

  2. 🔄 等待 Prometheus 重新加载(2-3 分钟)

    • Prometheus Pod 正在重启
    • 配置将自动重新加载

2-3 分钟后

  1. ✅ 验证 Prometheus 采集

    kubectl port-forward -n monitoring svc/prometheus 9090:9090
    # 访问 http://localhost:9090/targets 查看 gitea-actions-exporter
    
  2. ✅ 测试队列指标查询

    curl -s 'http://localhost:9090/api/v1/query?query=gitea_actions_pending_jobs'
    
  3. ✅ 更新 Dashboard 添加队列面板(如果采集成功)

长期优化(可选)

  1. ⚪ 启用 cAdvisor 指标

    • 添加实时 CPU/Memory 使用率面板
    • 需要配置 kubelet ServiceMonitor
  2. ⚪ 优化告警规则

    • 基于队列长度设置告警
    • 基于扩缩容事件设置通知

🛠️ 故障排查指南

问题 1: Prometheus 仍未采集到 Exporter 指标

检查步骤:

# 1. 验证 ServiceMonitor
kubectl get servicemonitor -n observability gitea-actions-exporter -o yaml

# 2. 检查 Prometheus 选择器
kubectl get prometheus -n observability monitoring-kube-prometheus-prometheus -o yaml | grep -A 5 serviceMonitorSelector

# 3. 查看 Prometheus 日志
kubectl logs -n monitoring -l app.kubernetes.io/name=prometheus --tail=100

# 4. 检查 targets
kubectl port-forward -n monitoring svc/prometheus 9090:9090
# 访问 http://localhost:9090/targets

解决方案:

如果仍未工作,手动添加到 Prometheus ConfigMap:

kubectl edit configmap prometheus-config -n monitoring
# 在 scrape_configs 添加:
# - job_name: 'gitea-actions-exporter'
#   static_configs:
#     - targets: ['gitea-actions-exporter.gitea-runner:9999']

问题 2: Dashboard 面板仍显示 "no data"

检查步骤:

# 1. 验证 Prometheus 数据源
# Grafana UI -> Configuration -> Data Sources -> Prometheus

# 2. 测试查询
# Dashboard -> Panel -> Edit -> Query
kube_deployment_status_replicas{deployment="gitea-runner", namespace="gitea-runner"}

# 3. 检查时间范围
# Dashboard 右上角时间选择器,确保选择了包含数据的时间范围

📄 相关文件

文件 位置 用途
简化版 Dashboard JSON gitea-actions-exporter/gitea-runner-simple-dashboard.json Dashboard 定义
ServiceMonitor gitea-actions-exporter/k8s-manifests/servicemonitor-observability.yaml Prometheus 监控配置
Additional Scrape Config gitea-actions-exporter/prometheus-additional-scrape.yaml Prometheus 额外抓取配置
快速修复脚本 fix-dashboard-quick.sh 自动化修复工具
问题修复指南 DASHBOARD-FIX-GUIDE.md 详细故障排查文档

📊 Dashboard 访问信息

Dashboard URL 状态
简化版(推荐) http://localhost:30300/d/af901k0wj05q8c/gitea-runner-autoscaling-simplified ✅ 可用
完整版(待修复) http://localhost:30300/d/bf8yuehshk6psb/gitea-runner-autoscaling-monitoring ⚠️ 部分数据缺失

默认凭证:

  • 用户名: admin
  • 密码: admin123

🎉 总结

已解决 ✅

  1. ✅ 创建简化版 Dashboard(使用 kube-state-metrics 指标)
  2. ✅ 修复 ServiceMonitor 配置(添加 release: monitoring 标签)
  3. ✅ 配置 Additional Scrape Configs
  4. ✅ 重启 Prometheus(重新加载配置)
  5. ✅ 10 个面板正常显示数据

待验证 🔄

  1. 🔄 Prometheus 采集 Exporter 指标(等待 2-3 分钟)
  2. 🔄 队列监控面板(Prometheus 采集成功后添加)

可选优化 ⚪

  1. ⚪ 启用 cAdvisor 指标(实时使用率监控)
  2. ⚪ 配置告警规则

报告生成时间: 2026-01-02 23:45 下次检查: 2 分钟后验证 Prometheus 采集状态 负责人: AI DevOps Assistant