4.5 KiB
4.5 KiB
Grafana Dashboard 问题修复指南
问题现状
Grafana Dashboard 除了 "Gitea Runner 副本数" 之外,其他面板都显示 "no data"。
问题原因
-
Gitea Actions Exporter 指标未被 Prometheus 采集
- ServiceMonitor 已创建,但 Prometheus 未识别到 target
- 导致
gitea_actions_pending_jobs等自定义指标不可用
-
Container 指标查询语句不正确
- Dashboard 中的 container CPU/Memory 查询可能使用了不存在的标签
快速修复方案
方案 1: 手动添加 Exporter 到 Prometheus(推荐)⭐⭐⭐⭐⭐
编辑 Prometheus ConfigMap,手动添加 scrape 配置:
# 1. 编辑 Prometheus ConfigMap
kubectl edit configmap prometheus-config -n monitoring
# 2. 在 scrape_configs 部分添加:
scrape_configs:
- job_name: 'gitea-actions-exporter'
static_configs:
- targets: ['gitea-actions-exporter.gitea-runner:9999']
scrape_interval: 30s
scrape_timeout: 10s
# 3. 重启 Prometheus
kubectl delete pod -n monitoring -l app.kubernetes.io/instance=monitoring-kube-prometheus-prometheus
方案 2: 使用 Prometheus Annotations
修改 Gitea Actions Exporter Service,添加 Prometheus 抓取注解:
apiVersion: v1
kind: Service
metadata:
name: gitea-actions-exporter
namespace: gitea-runner
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9999"
prometheus.io/path: "/metrics"
labels:
app: gitea-actions-exporter
spec:
# ... rest of the service spec
然后应用:
kubectl apply -f gitea-actions-exporter/k8s-manifests/deployment.yaml
方案 3: 创建 PodMonitor(替代 ServiceMonitor)
如果 ServiceMonitor 不工作,尝试使用 PodMonitor:
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: gitea-actions-exporter
namespace: observability
labels:
release: monitoring
spec:
namespaceSelector:
matchNames:
- gitea-runner
selector:
matchLabels:
app: gitea-actions-exporter
podMetricsEndpoints:
- port: metrics
interval: 30s
临时解决方案:简化的 Dashboard
在 Exporter 指标可用之前,使用简化版 Dashboard(只显示可用指标):
可用的面板
- ✅ Gitea Runner 副本数 - 使用 kube-state-metrics(已工作)
- ⚠️ CPU/内存使用率 - 需要修复查询语句
- ❌ 队列指标 - 需要 Exporter 正常工作
修复 CPU/内存查询
当前查询使用 container_cpu_usage_seconds_total,可能需要:
- 检查实际的 Pod 和 Container 标签
- 使用
pod和container标签而不是pod_name - 确认您的 Prometheus 是否有 cAdvisor 指标
测试正确的查询:
# CPU 使用率
rate(container_cpu_usage_seconds_total{
namespace="gitea-runner",
pod=~"gitea-runner-.*",
container="runner"
}[5m])
# 内存使用率
container_memory_working_set_bytes{
namespace="gitea-runner",
pod=~"gitea-runner-.*",
container="runner"
}
调试步骤
1. 验证 Exporter 是否正常暴露指标
kubectl exec -n gitea-runner $(kubectl get pod -n gitea-runner -l app=gitea-actions-exporter -o jsonpath='{.items[0].metadata.name}') -- \
python -c "import urllib.request; print(urllib.request.urlopen('http://localhost:9999/metrics').read().decode())" | grep gitea_actions
2. 检查 Prometheus Targets
访问 Prometheus UI:
kubectl port-forward -n monitoring svc/prometheus 9090:9090
打开 http://localhost:9090/targets,搜索 "gitea"
3. 测试 Prometheus 查询
在 Prometheus UI 的 Graph 页面测试:
gitea_actions_pending_jobs
如果没有结果,说明 Prometheus 没有抓取到指标。
4. 检查 ServiceMonitor 状态
# 查看 ServiceMonitor
kubectl get servicemonitor -n observability gitea-actions-exporter -o yaml
# 查看 Service 标签
kubectl get svc -n gitea-runner gitea-actions-exporter --show-labels
# 检查 Prometheus 日志
kubectl logs -n monitoring -l app.kubernetes.io/instance=monitoring-kube-prometheus-prometheus --tail=100
下一步行动
- 立即:应用方案 1(手动添加 scrape config)
- 验证:等待 2-3 分钟后检查 Prometheus targets
- 测试:在 Grafana Dashboard 查看数据是否显示
- 优化:数据正常后,调整 CPU/内存查询语句
备注
- ServiceMonitor 问题可能与 Prometheus Operator 配置有关
- 如果手动 scrape config 有效,可以暂时使用这个方案
- 长期应该修复 ServiceMonitor 自动发现机制