使用现有 Prometheus
Docker Compose 快速入门会部署一个内置 Prometheus。如果你已经在运行 Prometheus,可以用外部部署替换内置实例。迁移后,控制台的 Monitoring 页面将查询外部 Prometheus。
网关指标如何到达 Prometheus
API7 网关指标可以通过两条独立路径到达 Prometheus。
| 路径 | 数据流 | 用途 |
|---|---|---|
| 远程写入 | 数据面 → DP Manager → Prometheus(/api/v1/write) | 控制台的 Monitoring 页面,其查询会发送到此 Prometheus。 |
| 抓取 | Prometheus → 数据面 :9091(参见监控指标) | 确认网关端点不会重复暴露指标族后,用于你自己的 Grafana 仪表板或告警系统。 |
内置 Prometheus 接收控制台所需的远程写入数据。当指标端点不会重复暴露指标族时,两条路径使用相同的指标名称和标签。只有抓取得到的序列会额外携带 Prometheus 添加的 job 和 instance 标签。控制台查询使用 sum(...) by (...) 聚合,并且不按 job 筛选,因此 Monitoring 页面可以查询通过任一路径传入的指标。
不要让同一个 Prometheus 同时保留两条路径
如果同一个 Prometheus 既抓取数据面,又接收远程写入,同一网关指标可能通过两条路径到达。控制台随后会重复计算请求和带宽序列。每个 Prometheus 实例只保留一条路径。
前置条件
迁移前,请确保外部实例和控制面配置文件均可用。
- 一个控制面容器可以访问的外部 Prometheus 实例。
- 包含
docker-compose.yaml、dashboard_conf/conf.yaml和dp_manager_conf/conf.yaml的控制面部署目录。在某些版本中,服务名称可能是api7-ee-dashboard和api7-ee-dp-manager。
选择迁移路径
对于当前公开发布版本,请使用远程写入。只有后续已修复版本,或 API7 支持团队确认包含修复的构建,才能使用直接抓取。
此版本无法直接抓取
此版本的数据面端点会重复暴露 apisix_nginx_metric_errors_total,Prometheus 会拒绝整个抓取。目前尚未发布修复版本。
比较两条路径所需的变更:
| 考量项 | 远程写入 | 直接抓取 |
|---|---|---|
| 可用性 | 当前公开发布版本可用 | 当前公开发布版本不可用;需要后续已修复版本或 API7 支持团队确认的构建 |
| 适用场景 | 外部 Prometheus 可以接收 DP Manager 的远程写入,包括此前已抓取数据面的情况 | 外部 Prometheus 已经抓取经验证不会重复暴露指标族的网关端点 |
| 外部 Prometheus 变更 | 添加 --web.enable-remote-write-receiver;控制面向其写入指标 | 无;抓取配置保持不变 |
| 所需权限 | 控制台需要读取权限;DP Manager 需要写入权限 | 读取权限 |
| 现有 Grafana 和告警 | 远程写入的序列不包含 job 和 instance;需要更新按这些标签筛选的查询 | 无需更改查询 |
完成其中一条路径的配置后,再继续完成通用的身份认证、移除、重启、验证和回滚步骤。
备份当前配置
创建一个可用于恢复原始 Prometheus 配置和 Docker Compose 服务的备份。
cd <control-plane-directory>
BAK="/var/tmp/api7-prom-backup-$(date +%F)"
mkdir -p "$BAK"
cp -a docker-compose.yaml dashboard_conf dp_manager_conf "$BAK"/
配置远程写入
DP Manager 将网关指标发送到外部 Prometheus,控制台则查询同一实例。