4. Grafana 平台快速入门:安装部署、数据源配置与 Dashboard 基础操作

Grafana 是支付订单系统可观测性栈中的统一可视化层。本章将带你从零搭建 Grafana 实例,完成 Prometheus 与 Loki 数据源接入,并创建第一个订单监控面板。所有操作均以生产环境最佳实践为基准,兼顾快速验证与长期运维。

4.1 安装部署:Docker 与二进制两种方式

Grafana 支持多种部署方式。在支付系统场景中,Docker Compose 适用于开发/测试环境快速搭建,二进制部署 适用于生产环境独立主机或容器化改造前的过渡期。下表对比两种方式的核心差异:

对比维度 Docker 部署 二进制部署
启动速度 秒级(镜像已缓存) 分钟级(需解压、配置 systemd)
版本管理 通过镜像标签切换,回滚方便 手动下载替换二进制,回滚需保留旧版本
持久化存储 需挂载 volume 或绑定目录 直接使用本地文件系统
资源隔离 依赖容器运行时 cgroup 依赖操作系统进程管理
适用场景 CI/CD、本地开发、快速原型 物理机/VM 生产环境、安全合规要求高

4.1.1 Docker Compose 快速部署

在支付订单系统的开发环境中,推荐使用 Docker Compose 一键拉起 Grafana 及其依赖数据源。以下 docker-compose.yml 片段同时启动了 Grafana、Prometheus 和 Loki:

version: '3.8'
services:
  grafana:
    image: grafana/grafana:10.4.2
    container_name: payment-grafana
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin123
      - GF_INSTALL_PLUGINS=grafana-piechart-panel
    volumes:
      - grafana-data:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
    restart: unless-stopped

  prometheus:
    image: prom/prometheus:v2.52.0
    container_name: payment-prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus-data:/prometheus

  loki:
    image: grafana/loki:2.9.6
    container_name: payment-loki
    ports:
      - "3100:3100"
    volumes:
      - loki-data:/loki
      - ./loki/loki-config.yaml:/etc/loki/loki-config.yaml

volumes:
  grafana-data:
  prometheus-data:
  loki-data:
生产建议: 生产环境务必修改 GF_SECURITY_ADMIN_PASSWORD 为强密码,或通过环境变量文件注入。同时建议挂载 provisioning 目录实现数据源和 Dashboard 的自动化配置,避免手动重复操作。

4.1.2 二进制部署(Linux 环境)

对于无法使用容器或需要更细粒度资源控制的场景,二进制部署是可靠选择。以下是标准安装步骤:

  1. 下载并解压:从 Grafana 官方仓库获取最新稳定版二进制包。
  2. 创建运行用户:为安全考虑,使用专用系统用户 grafana 运行。
  3. 配置 systemd 服务:实现开机自启和进程守护。
  4. 初始化数据目录:设置正确的权限和路径。
# 1. 下载并解压
wget https://dl.grafana.com/oss/release/grafana-10.4.2.linux-amd64.tar.gz
tar -zxvf grafana-10.4.2.linux-amd64.tar.gz -C /opt/
mv /opt/grafana-10.4.2 /opt/grafana

# 2. 创建用户
useradd --no-create-home --shell /bin/false grafana

# 3. 创建 systemd 服务文件 /etc/systemd/system/grafana.service
cat <<EOF > /etc/systemd/system/grafana.service
[Unit]
Description=Grafana
After=network.target

[Service]
User=grafana
Group=grafana
Type=simple
ExecStart=/opt/grafana/bin/grafana server \
  --config=/opt/grafana/conf/defaults.ini \
  --homepath=/opt/grafana
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

# 4. 设置权限并启动
chown -R grafana:grafana /opt/grafana
systemctl daemon-reload
systemctl enable grafana
systemctl start grafana
注意: 二进制部署默认使用 SQLite 作为配置数据库,生产环境建议切换为 MySQL 或 PostgreSQL,以支持高并发和备份恢复。修改 defaults.ini 中的 [database] 节即可。

4.2 数据源配置:接入 Prometheus 与 Loki

Grafana 本身不存储监控数据,它通过数据源连接后端存储。在支付订单系统中,最核心的两个数据源是 Prometheus(指标)和 Loki(日志)。

4.2.1 添加 Prometheus 数据源

Prometheus 负责采集订单系统的业务指标(如订单创建速率、支付成功率、响应延迟分位数)。配置步骤如下:

  1. 登录 Grafana Web UI(默认 http://localhost:3000,用户名 admin,密码为部署时设置的值)。
  2. 进入 Configuration > Data Sources > Add data source。
  3. 选择 Prometheus。
  4. 在 HTTP 区域填写 URL:http://payment-prometheus:9090(Docker 环境使用服务名,二进制环境使用实际 IP)。
  5. 点击 Save & Test,确认返回绿色提示 "Data source is working"。

以下是通过 provisioning 文件自动配置 Prometheus 数据源的 YAML 示例:

# /etc/grafana/provisioning/datasources/prometheus.yaml
apiVersion: 1

datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
    url: http://payment-prometheus:9090
    isDefault: true
    editable: false
    jsonData:
      timeInterval: "15s"
      queryTimeout: "30s"
      httpMethod: "POST"

4.2.2 添加 Loki 数据源

Loki 用于存储和查询订单系统的应用日志,帮助定位异常订单的上下文。配置方式与 Prometheus 类似:

  1. 在 Data Sources 页面选择 Loki。
  2. 填写 URL:http://payment-loki:3100。
  3. 在 Derived fields 中可以配置从日志中提取 Trace ID 并链接到 Tempo(分布式追踪),实现指标-日志-追踪的联动。
  4. 点击 Save & Test 验证连通性。
关键配置: 在 Loki 数据源的 Derived fields 中,添加一个正则表达式 traceID=(\w+),并关联到 Tempo 数据源。这样在日志面板中点击 Trace ID 即可跳转到对应的调用链详情,极大提升排障效率。

4.3 Dashboard 基础操作:创建第一个订单监控面板

Dashboard 是 Grafana 的核心交互界面。我们将创建一个名为 "支付订单实时监控" 的面板,包含订单速率、错误率和 P99 延迟三个核心指标。

4.3.1 创建 Dashboard 与 Panel

  1. 点击左侧菜单 + > Create Dashboard。
  2. 点击 Add visualization 创建一个新的 Panel。
  3. 在 Query 编辑器中,选择数据源 Prometheus,输入以下 PromQL 查询:
# 订单创建速率(每分钟)
rate(order_created_total[1m])

# 支付失败率(百分比)
(sum(rate(order_payment_failed_total[5m])) / sum(rate(order_created_total[5m]))) * 100

# P99 订单处理延迟(毫秒)
histogram_quantile(0.99, sum(rate(order_processing_duration_seconds_bucket[5m])) by (le)) * 1000
  1. 在右侧 Panel options 中,设置标题为 "订单创建速率",选择图表类型为 Time series。
  2. 点击右上角 Apply 保存 Panel,然后点击 Save dashboard 输入名称 "支付订单实时监控"。

4.3.2 面板布局与变量

为了提升 Dashboard 的复用性,建议添加 变量 来动态切换环境(生产/预发)或订单类型:

  1. 进入 Dashboard 设置(齿轮图标)> Variables > Add variable。
  2. 创建变量 env,类型为 Query,数据源选择 Prometheus,查询语句为 label_values(env)。
  3. 在 Panel 的查询中,将硬编码的环境标签替换为 $env,例如:rate(order_created_total{env="$env"}[1m])。
  4. 在 Dashboard 顶部会出现下拉选择框,方便快速切换环境。
效率技巧: 使用 Row 对 Panel 进行分组,例如 "业务指标"、"系统资源"、"日志分析" 各占一行。每个 Row 可以折叠,便于在演示或排障时聚焦特定模块。

4.4 核心架构:Grafana 在支付可观测性中的位置

下图展示了 Grafana 作为统一可视化层,如何串联 Prometheus(指标)、Loki(日志)和 Tempo(追踪)三大数据源,形成支付订单系统的完整可观测性视图。

Grafana 统一可观测性架构 Grafana 统一可观测性架构(支付订单系统) Prometheus 订单指标 速率 / 延迟 / 错误率 Loki 应用日志 异常堆栈 / 业务日志 Tempo 分布式追踪 调用链 / 耗时分布 Grafana 可视化层 Dashboard / Alerting / Explore SRE / 研发 / 运维人员 统一查询入口,快速排障 说明:Grafana 通过数据源插件连接 Prometheus、Loki、Tempo,提供指标-日志-追踪三位一体的可观测性体验

4.5 快速排障:Dashboard 使用技巧

在支付订单系统的日常运维中,以下三个 Dashboard 操作能显著提升排障效率:

  • Explore 模式:当收到告警时,直接进入左侧 Explore 面板,输入临时 PromQL 或 LogQL 查询,无需创建永久 Panel。适合快速验证假设。
  • Panel 联动:在 Dashboard 设置中开启 Crosshair 和 Shared tooltip,鼠标悬停在一个图表上时,同一时间点的其他图表也会显示十字线和数值,便于对比关联指标。
  • Annotations:在 Dashboard 中添加 Annotations,将部署事件、配置变更等标记为时间轴上的竖线。这样在查看指标异常时,可以直观判断是否由变更引起。
实战案例: 某次支付成功率突降,通过 Grafana Dashboard 的 Shared tooltip 发现,在相同时间点,数据库连接池使用率飙升到 95%,同时订单处理延迟 P99 从 200ms 暴涨到 5s。结合 Annotations 确认是刚上线了一个慢 SQL 版本,立即回滚后指标恢复正常。整个过程从发现到定位不到 3 分钟。