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

4.5 KiB
Raw Permalink Blame History

Grafana Dashboard 问题修复指南

问题现状

Grafana Dashboard 除了 "Gitea Runner 副本数" 之外,其他面板都显示 "no data"。

问题原因

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

    • ServiceMonitor 已创建,但 Prometheus 未识别到 target
    • 导致 gitea_actions_pending_jobs 等自定义指标不可用
  2. 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(只显示可用指标):

可用的面板

  1. ✅ Gitea Runner 副本数 - 使用 kube-state-metrics(已工作)
  2. ⚠️ CPU/内存使用率 - 需要修复查询语句
  3. ❌ 队列指标 - 需要 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. 立即:应用方案 1(手动添加 scrape config)
  2. 验证:等待 2-3 分钟后检查 Prometheus targets
  3. 测试:在 Grafana Dashboard 查看数据是否显示
  4. 优化:数据正常后,调整 CPU/内存查询语句

备注

  • ServiceMonitor 问题可能与 Prometheus Operator 配置有关
  • 如果手动 scrape config 有效,可以暂时使用这个方案
  • 长期应该修复 ServiceMonitor 自动发现机制