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 环境)
对于无法使用容器或需要更细粒度资源控制的场景,二进制部署是可靠选择。以下是标准安装步骤:
- 下载并解压:从 Grafana 官方仓库获取最新稳定版二进制包。
- 创建运行用户:为安全考虑,使用专用系统用户
grafana运行。 - 配置 systemd 服务:实现开机自启和进程守护。
- 初始化数据目录:设置正确的权限和路径。
# 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
defaults.ini 中的 [database] 节即可。
4.2 数据源配置:接入 Prometheus 与 Loki
Grafana 本身不存储监控数据,它通过数据源连接后端存储。在支付订单系统中,最核心的两个数据源是 Prometheus(指标)和 Loki(日志)。
4.2.1 添加 Prometheus 数据源
Prometheus 负责采集订单系统的业务指标(如订单创建速率、支付成功率、响应延迟分位数)。配置步骤如下:
- 登录 Grafana Web UI(默认
http://localhost:3000,用户名admin,密码为部署时设置的值)。 - 进入 Configuration > Data Sources > Add data source。
- 选择 Prometheus。
- 在 HTTP 区域填写 URL:
http://payment-prometheus:9090(Docker 环境使用服务名,二进制环境使用实际 IP)。 - 点击 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 类似:
- 在 Data Sources 页面选择 Loki。
- 填写 URL:
http://payment-loki:3100。 - 在 Derived fields 中可以配置从日志中提取 Trace ID 并链接到 Tempo(分布式追踪),实现指标-日志-追踪的联动。
- 点击 Save & Test 验证连通性。
traceID=(\w+),并关联到 Tempo 数据源。这样在日志面板中点击 Trace ID 即可跳转到对应的调用链详情,极大提升排障效率。
4.3 Dashboard 基础操作:创建第一个订单监控面板
Dashboard 是 Grafana 的核心交互界面。我们将创建一个名为 "支付订单实时监控" 的面板,包含订单速率、错误率和 P99 延迟三个核心指标。
4.3.1 创建 Dashboard 与 Panel
- 点击左侧菜单 + > Create Dashboard。
- 点击 Add visualization 创建一个新的 Panel。
- 在 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
- 在右侧 Panel options 中,设置标题为 "订单创建速率",选择图表类型为 Time series。
- 点击右上角 Apply 保存 Panel,然后点击 Save dashboard 输入名称 "支付订单实时监控"。
4.3.2 面板布局与变量
为了提升 Dashboard 的复用性,建议添加 变量 来动态切换环境(生产/预发)或订单类型:
- 进入 Dashboard 设置(齿轮图标)> Variables > Add variable。
- 创建变量
env,类型为 Query,数据源选择 Prometheus,查询语句为label_values(env)。 - 在 Panel 的查询中,将硬编码的环境标签替换为
$env,例如:rate(order_created_total{env="$env"}[1m])。 - 在 Dashboard 顶部会出现下拉选择框,方便快速切换环境。
4.4 核心架构:Grafana 在支付可观测性中的位置
下图展示了 Grafana 作为统一可视化层,如何串联 Prometheus(指标)、Loki(日志)和 Tempo(追踪)三大数据源,形成支付订单系统的完整可观测性视图。
4.5 快速排障:Dashboard 使用技巧
在支付订单系统的日常运维中,以下三个 Dashboard 操作能显著提升排障效率:
- Explore 模式:当收到告警时,直接进入左侧 Explore 面板,输入临时 PromQL 或 LogQL 查询,无需创建永久 Panel。适合快速验证假设。
- Panel 联动:在 Dashboard 设置中开启 Crosshair 和 Shared tooltip,鼠标悬停在一个图表上时,同一时间点的其他图表也会显示十字线和数值,便于对比关联指标。
- Annotations:在 Dashboard 中添加 Annotations,将部署事件、配置变更等标记为时间轴上的竖线。这样在查看指标异常时,可以直观判断是否由变更引起。