跳转至

Grafana 可视化:Dashboard 设计与数据源配置

前言

Grafana 是世界上最流行的开源可视化平台。它不存储数据——它连接你的数据源(Prometheus、Loki、Elasticsearch……),让你在一个统一的界面中创建指标、日志和追踪的仪表盘。

一个好 Dashboard 的标准:30 秒内让任何人看懂系统当前是否健康


架构

flowchart LR
    GRAF[Grafana] --> PROM[(Prometheus<br>Metrics)]
    GRAF --> LOKI[(Loki<br>Logs)]
    GRAF --> TEMPO[(Tempo<br>Traces)]
    GRAF --> ES[(Elasticsearch)]
    GRAF --> MYSQL[(MySQL)]

    style GRAF fill:#e0e7ff,stroke:#4f46e5

数据源配置

Prometheus

# 基本配置
Name: Prometheus
URL: http://prometheus:9090
Access: Server (default)

# 自定义 HTTP Header(认证)
Header: X-Scope-OrgID
Value: tenant-1

Loki(日志)

Name: Loki
URL: http://loki:3100

配置完成后,在 Explore 中可通过 Label 筛选查看日志,并可从日志行直接跳转到 Tempo Trace(通过 traceID 关联)。

多数据源混合查询

Grafana 支持在同一个面板中混合多个数据源,例如:Metrics 曲线(Prometheus)上叠加 Annotation(Loki 日志事件标记)。


Dashboard 设计原则

分层设计法

flowchart TD
    L1[第 1 层:集群总览<br>节点状态、资源总览、核心服务] --> L2[第 2 层:服务详情<br>单个服务的 QPS/延迟/错误率]
    L2 --> L3[第 3 层:实例详情<br>单 Pod 的 CPU/内存/日志]
    L3 --> L4[第 4 层:调试面板<br>临时排查用的自定义查询]

    style L1 fill:#fee2e2,stroke:#dc2626
    style L2 fill:#fef3c7,stroke:#d97706
    style L3 fill:#dbeafe,stroke:#2563eb
    style L4 fill:#d1fae5,stroke:#059669

黄金信号原则

每个 Dashboard 至少覆盖这四类指标:

信号 含义 PromQL 示例
延迟(Latency) 请求花费多长时间? histogram_quantile(0.99, ...)
流量(Traffic) 有多少请求? rate(http_requests_total[5m])
错误(Errors) 有多少失败? rate(http_requests_total{status=~"5.."}[5m])
饱和度(Saturation) 资源有多满? node_cpu_utilization

变量(Variables)

变量让 Dashboard 具有交互性和可复用性:

# 查询型变量——从 Prometheus 动态获取
Name: namespace
Type: Query
Query: label_values(kube_namespace_created, namespace)

# 自定义变量
Name: environment
Type: Custom
Values: prod, staging, dev

# 使用变量
rate(http_requests_total{namespace="$namespace"}[5m])

核心面板类型

面板 适用场景 关键配置
Time Series 趋势图(CPU/内存/QPS) 推荐替代旧 Graph 面板
Stat 单一数值(当前 Pod 数) 设定阈值颜色
Gauge 百分比显示(磁盘使用率) 绿色/黄色/红色阈值
Table 结构化数据(Top 10 列表) 排序、分页
Bar Gauge 横向条形图(各节点资源) 同 Stat
Pie Chart 占比分布 状态码分布
Logs 日志查看(Loki 数据源) 关联 Trace

Provisioning:基础设施即代码

将 Dashboard 和数据源定义为 JSON/YAML 文件,纳入 Git 版本管理:

# /etc/grafana/provisioning/datasources/prometheus.yaml
apiVersion: 1
datasources:
  - name: Prometheus
    type: prometheus
    url: http://prometheus:9090
    access: proxy
    isDefault: true
# /etc/grafana/provisioning/dashboards/all.yaml
apiVersion: 1
providers:
  - name: 'default'
    folder: ''
    type: file
    options:
      path: /var/lib/grafana/dashboards

所有 Dashboard JSON 放在 /var/lib/grafana/dashboards/ 下即可自动加载。


Grafana 告警

Grafana 8+ 内置告警引擎,可直接在 Dashboard 上配置告警:

# 告警规则要素
- Condition:查询结果满足什么条件(如 > 80)
- Evaluation:多久评估一次
- No Data / Error:数据缺失时如何处理
- Notification:发送到哪些联系点(钉钉/Slack/PagerDuty)

比 Alertmanager 更适合「非 Prometheus 数据源」的告警场景(如 MySQL、Elasticsearch 直接告警)。


总结

  1. 分层 Dashboard:总览 → 服务 → 实例 → 调试
  2. 黄金信号:延迟、流量、错误、饱和度
  3. 变量:让 Dashboard 可交互、可复用
  4. Provisioning:GitOps 管理,拒绝手动导入 JSON

好 Dashboard 的标准:凌晨 3 点被电话叫醒,打开 Dashboard 30 秒内定位问题所在。 🚀