3. Prometheus 数据源:安装与配置、指标抓取、PromQL 基础查询
Prometheus 是 Grafana 最核心的时序数据源之一,也是灰度发布准入面板中实时流量、错误率、延迟等指标的主要来源。本章将围绕 Prometheus 的本地安装、数据源配置、指标抓取机制以及 PromQL 基础查询展开,为后续面板开发打下数据基础。
3.1 Prometheus 安装与启动
在开发环境中,推荐使用 Docker 快速部署 Prometheus 实例。以下为标准的启动流程:
- 拉取镜像:
docker pull prom/prometheus:latest - 准备配置文件:创建
prometheus.yml,定义全局配置与抓取目标。 - 启动容器:将配置文件挂载至容器内
/etc/prometheus/目录。 - 验证运行:访问
http://localhost:9090确认 Prometheus UI 正常加载。
快速启动命令示例:
docker run -d \
--name prometheus \
-p 9090:9090 \
-v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus:latest
3.2 数据源配置(Grafana 侧)
Prometheus 运行后,需在 Grafana 中将其添加为数据源。配置路径为 Configuration → Data Sources → Add data source → Prometheus。关键配置项如下:
| 配置项 | 说明 | 推荐值 |
|---|---|---|
| Name | 数据源名称,用于面板中引用 | Prometheus |
| URL | Prometheus HTTP API 地址 | http://localhost:9090 |
| Access | 访问模式,Browser 或 Server | Server(推荐) |
| Scrape interval | Grafana 默认查询步长 | 15s |
| Timeout | 查询超时时间 | 30s |
提示: 若 Grafana 与 Prometheus 部署在同一 Docker 网络,URL 可使用容器名称代替 localhost,例如
http://prometheus:9090。
3.3 指标抓取机制
Prometheus 通过 Pull 模型 主动从目标端点抓取指标。每个目标需暴露 /metrics 端点,返回符合 Prometheus 格式的文本数据。抓取配置在 prometheus.yml 的 scrape_configs 块中定义。
以下为灰度发布场景中常见的抓取配置示例:
scrape_configs:
- job_name: 'gray-release-app'
scrape_interval: 10s
metrics_path: '/metrics'
static_configs:
- targets:
- 'app-canary:8080'
- 'app-stable:8080'
labels:
group: 'gray-release'
- job_name: 'envoy-stats'
scrape_interval: 15s
metrics_path: '/stats/prometheus'
static_configs:
- targets:
- 'envoy-admin:9901'
注意: 灰度发布场景中,务必为金丝雀(canary)和稳定(stable)实例添加区分标签(如
version、group),以便在 PromQL 中按版本聚合对比。
3.4 PromQL 基础查询
PromQL(Prometheus Query Language)是 Grafana 面板中查询时序数据的核心语言。以下为灰度发布面板中最常用的 PromQL 模式:
3.4.1 即时查询与范围查询
| 查询类型 | 语法示例 | 返回结果 |
|---|---|---|
| 即时向量 | http_requests_total{version="canary"} |
当前最新值 |
| 范围向量 | http_requests_total{version="canary"}[5m] |
过去 5 分钟所有样本 |
| 速率计算 | rate(http_requests_total{version="canary"}[1m]) |
每秒请求增长率 |
3.4.2 灰度发布常用 PromQL 模式
- 金丝雀 vs 稳定流量对比:
sum(rate(http_requests_total{version="canary"}[1m])) / sum(rate(http_requests_total{version="stable"}[1m])) - 错误率计算:
sum(rate(http_requests_total{status=~"5..", version="canary"}[1m])) / sum(rate(http_requests_total{version="canary"}[1m])) * 100 - P99 延迟:
histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket{version="canary"}[5m])) by (le))
关键概念: 在 Grafana 面板中,PromQL 查询通常配合 模板变量(如
$version、$app)使用,实现动态切换金丝雀/稳定版本。
3.5 数据源验证与调试
完成配置后,在 Grafana 数据源设置页点击 Save & Test,若返回绿色提示 "Data source is working" 则表示连接成功。常见问题排查:
- 连接超时:检查 Grafana 与 Prometheus 之间的网络连通性,确认 URL 协议(http/https)与端口正确。
- 无数据返回:在 Prometheus UI 的 Graph 页面手动执行
up查询,确认目标是否处于1(正常)状态。 - 标签不匹配:在 PromQL 中使用
{__name__=~".*"}列出所有指标,检查标签键名是否与面板模板变量一致。
调试技巧: 在 Grafana 面板的 Query 编辑器中,使用 Query Inspector 功能查看原始请求与响应,快速定位 PromQL 语法错误或数据格式问题。