Grafana · 可观测性统一展示层

Grafana 是集群可观测性的统一前端,把 Prometheus(指标)、Loki(日志)、Tempo(链路追踪)三个后端接成数据源,在一个界面里展示与下钻。它跑在 grafana 命名空间,单镜像 Deployment(grafana/grafana:12.3.6-security-04),调度到带 workload: infra 标签的节点上。

Grafana 做什么

可观测性的三大支柱(metrics / logs / traces)分别落在 Prometheus、Loki、Tempo 三套后端里,Grafana 是把它们汇到一处的展示层:定义数据源、渲染 dashboard、提供查询与告警面板入口。

三个数据源在 Grafana 里是联动的,不是各看各的。Loki 配了派生字段(derivedFields),从日志行里用正则提取 trace_id / traceID 并直接跳转到 Tempo;Tempo 又配了 tracesToLogs / tracesToMetrics / serviceMap,从一条 trace 反向跳回 Loki 日志、Prometheus 指标和服务拓扑图。于是一次排障可以在日志、指标、链路之间来回穿。

部署形态

  • Name
    命名空间
    Description
    grafana
  • Name
    工作负载
    Description
    Deployment,RollingUpdate(maxSurge 25% / maxUnavailable 25%),selector app: grafana
  • Name
    镜像
    Description
    grafana/grafana:12.3.6-security-04
  • Name
    副本数
    Description
    由 HPA 控制,minReplicas 1 / maxReplicas 3(CPU 平均利用率 75% 触发扩容)
  • Name
    调度
    Description
    nodeSelector: workload=infra
  • Name
    端口
    Description
    容器 http 3000
  • Name
    资源
    Description
    requests 200m CPU / 256Mi,limits 500m CPU / 512Mi
  • Name
    存储
    Description
    PVC grafana-datanfs-client storageClass,10Gi,ReadWriteMany,挂在 /var/lib/grafana

PVC 用 RWX(nfs-client)而非 RWO,配合 HPA 最多 3 副本——多个 Grafana Pod 可以同时挂同一份数据目录。命名空间还设了 ResourceQuota(limits 3 CPU / 3Gi、最多 8 pod、3 个 PVC)和 LimitRange(容器默认 / 上下限),约束整个 namespace 的用量。

数据源

数据源由 grafana-datasources ConfigMap 以 provisioning 方式预置(挂到 /etc/grafana/provisioning/datasources),三个都是集群内 svc.cluster.local 直连:

数据源类型URLuid说明
Prometheusprometheuskube-prometheus-prometheus.prometheus:9090prometheus-main默认数据源,timeInterval 15s
Lokilokiloki.loki:3100loki-mainmaxLines 1000,带 X-Scope-OrgID: default 头,配 derivedFields 跳 Tempo
Tempotempotempo.tempo:3200tempo-main配 tracesToLogs / tracesToMetrics / serviceMap / nodeGraph

预置 Dashboard

Dashboard 不靠界面手动导入,而是每块一个 ConfigMap,逐个以 subPath 挂进容器的 /var/lib/grafana/dashboards/<分组>/ 目录,再由 grafana-dashboards ConfigMap 定义的 file provider 按目录加载成 Grafana folder。分组覆盖:Infrastructure(node-exporter、k8s-global、k8s-pods、alertmanager、coredns、traefik、etcd)、Databases(mongodb、postgres、redis)、Messaging(rabbitmq、nats)、Storage(minio)、Platform(argocd、consul、cert-manager、vault、velero、flux、kyverno)、Logs 及 Logs / App、Logs / Platform 的逐服务日志面板,以及 Tracing(tempo、apm)。

Game 日志面板(boardserver / cardserver / pvpserver / rpgserver)在 deployment 里被注释掉了:2026-06-12 这些 game server 下线后停挂,ConfigMap 仍保留(休眠、未挂载),需要时取消注释即可恢复。

配置与认证

主配置在 grafana-config ConfigMap 的 grafana.ini(挂 subPath: grafana.ini):root_url = https://grafana.yldm.tech,SMTP、legacy alerting、unified_alerting 全部关闭。

登录走 Dex 的 generic OAuth([auth.generic_oauth],显示名 Google),不关闭自带登录表单:

  • Name
    client_id
    Description
    grafana
  • Name
    auth / token / api url
    Description
    https://dex.yldm.tech/auth/token/userinfo
  • Name
    scopes
    Description
    openid profile email
  • Name
    role 映射
    Description
    按邮箱判定:suzukaze.haduki@gmail.comevan@yldm.tech 映射为 Admin,其余为 Viewer

密钥全部来自 Vault,经 ExternalSecret(ClusterSecretStore vault-backend,refresh 1h)拉取:

  • Name
    grafana-admin-credentials
    Description
    remoteRef.key: monitoring/grafana(property admin-user / admin-password),注入容器 env GF_SECURITY_ADMIN_USER / GF_SECURITY_ADMIN_PASSWORD
  • Name
    grafana-oauth-credentials
    Description
    remoteRef.key: dex/clients/grafana(property secret),注入 env GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET,被 grafana.ini 的 $__env{...} 引用
  • Name
    grafana-admin-token
    Description
    remoteRef.key: secret/monitoring/grafana/admin-token(property token),生成 Secret grafana-admin-token(供编程访问)

访问与监控

Service grafana 是 ClusterIP,暴露 http 3000。Ingress(ingressClassName: traefik)把 grafana.yldm.tech/ 路由到 Service:3000,并带 external-dns 注解经 Cloudflare Tunnel(*.cfargotunnel.com,proxied)对外发布。

弹性与可用性:HPA grafana-hpa(1–3 副本,CPU 75%)、PDB grafanamaxUnavailable: 1)。

网络策略两条:allow-ingress 放行来自 kube-system(Traefik)和同命名空间的入站;allow-grafana-to-datasourcesprometheus 命名空间侧放行来自 app: grafana 和 ingress-nginx 的访问。本目录未见 ServiceMonitor / PrometheusRule。

备份

CronJob backup-grafana 每天凌晨 2 点(0 2 * * *)跑:用 alpine:3.24/var/lib/grafana/grafana.db 复制到共享 PVC monitoring-backup 下带时间戳的目录,保留最近 30 天(find ... -mtime +30 -delete)。它只读挂载 grafana-data,保留 3 条成功 / 3 条失败历史。

返回 observability 总览

评论