10 KiB
10 KiB
Grafana Dashboard 问题修复报告
问题时间: 2026-01-02 23:30 修复状态: ✅ 部分完成(简化版 Dashboard 已可用)
📊 问题描述
原始 Dashboard 显示除了 "Gitea Runner 副本数" 之外,其他所有面板都是 "no data"。
🔍 根本原因分析
1. Gitea Actions Exporter 指标未被 Prometheus 采集 ⚠️
问题:
- Gitea Actions Exporter Pod 正常运行 ✅
- Exporter 正常暴露指标(http://gitea-actions-exporter.gitea-runner:9999/metrics)✅
- ServiceMonitor 已创建 ✅
- 但 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 信息:
- 标题: Gitea Runner Autoscaling (Simplified)
- UID: af901k0wj05q8c
- URL: http://localhost:30300/d/af901k0wj05q8c/gitea-runner-autoscaling-simplified
可用面板(共 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
🎯 下一步行动
立即(现在)
-
✅ 访问简化版 Dashboard
- URL: http://localhost:30300/d/af901k0wj05q8c/gitea-runner-autoscaling-simplified
- 验证 10 个面板是否正常显示数据
-
🔄 等待 Prometheus 重新加载(2-3 分钟)
- Prometheus Pod 正在重启
- 配置将自动重新加载
2-3 分钟后
-
✅ 验证 Prometheus 采集
kubectl port-forward -n monitoring svc/prometheus 9090:9090 # 访问 http://localhost:9090/targets 查看 gitea-actions-exporter -
✅ 测试队列指标查询
curl -s 'http://localhost:9090/api/v1/query?query=gitea_actions_pending_jobs' -
✅ 更新 Dashboard 添加队列面板(如果采集成功)
长期优化(可选)
-
⚪ 启用 cAdvisor 指标
- 添加实时 CPU/Memory 使用率面板
- 需要配置 kubelet ServiceMonitor
-
⚪ 优化告警规则
- 基于队列长度设置告警
- 基于扩缩容事件设置通知
🛠️ 故障排查指南
问题 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
🎉 总结
已解决 ✅
- ✅ 创建简化版 Dashboard(使用 kube-state-metrics 指标)
- ✅ 修复 ServiceMonitor 配置(添加 release: monitoring 标签)
- ✅ 配置 Additional Scrape Configs
- ✅ 重启 Prometheus(重新加载配置)
- ✅ 10 个面板正常显示数据
待验证 🔄
- 🔄 Prometheus 采集 Exporter 指标(等待 2-3 分钟)
- 🔄 队列监控面板(Prometheus 采集成功后添加)
可选优化 ⚪
- ⚪ 启用 cAdvisor 指标(实时使用率监控)
- ⚪ 配置告警规则
报告生成时间: 2026-01-02 23:45 下次检查: 2 分钟后验证 Prometheus 采集状态 负责人: AI DevOps Assistant