旧版API v1现状分析:接口列表、调用量、错误率、延迟基线数据采集方法
在制定弃用迁移方案之前,必须对旧版API v1进行全面的现状分析。本章将系统梳理v1接口清单、核心指标基线(调用量、错误率、延迟)以及数据采集方法,为后续的迁移策略和监控联动升级提供数据支撑。
1. v1接口列表与功能分类
旧版API v1共包含12个公开接口,按业务功能划分为以下四类:
| 分类 | 接口路径 | HTTP方法 | 功能描述 | 调用占比 |
|---|---|---|---|---|
| 用户管理 | /v1/users |
GET | 获取用户列表 | 18% |
/v1/users/{id} |
GET | 获取单个用户详情 | 22% | |
/v1/users |
POST | 创建新用户 | 8% | |
| 订单服务 | /v1/orders |
GET | 查询订单列表 | 15% |
/v1/orders/{id} |
GET | 查询订单详情 | 12% | |
/v1/orders |
POST | 创建订单 | 7% | |
| 商品库存 | /v1/products |
GET | 商品列表 | 10% |
/v1/products/{id} |
GET | 商品详情 | 5% | |
/v1/products/{id}/stock |
PATCH | 更新库存 | 2% | |
| 通知推送 | /v1/notifications |
POST | 发送通知 | 1% |
/v1/notifications/template |
GET | 获取通知模板 | 0.5% | |
/v1/notifications/history |
GET | 通知历史查询 | 0.5% |
关键发现:用户管理类接口占总调用量的48%,是本次迁移的核心关注点。通知推送类接口调用量极低(合计2%),可优先完成迁移以降低风险。
2. 核心指标基线:调用量、错误率、延迟
基线数据采集周期为过去30天(生产环境),采样粒度为1分钟。以下为各接口的聚合基线:
| 接口路径 | 日均调用量 | P99延迟(ms) | P50延迟(ms) | 错误率(5xx) | 错误率(4xx) |
|---|---|---|---|---|---|
/v1/users GET |
86,400 | 320 | 45 | 0.02% | 1.2% |
/v1/users/{id} GET |
105,600 | 180 | 22 | 0.01% | 0.8% |
/v1/users POST |
38,400 | 450 | 88 | 0.15% | 3.5% |
/v1/orders GET |
72,000 | 550 | 120 | 0.08% | 2.1% |
/v1/orders/{id} GET |
57,600 | 280 | 55 | 0.03% | 1.5% |
/v1/orders POST |
33,600 | 780 | 210 | 0.25% | 4.2% |
/v1/products GET |
48,000 | 200 | 38 | 0.01% | 0.5% |
/v1/products/{id} GET |
24,000 | 150 | 25 | 0.01% | 0.3% |
/v1/products/{id}/stock PATCH |
9,600 | 620 | 180 | 0.18% | 2.8% |
/v1/notifications POST |
4,800 | 890 | 310 | 0.45% | 5.1% |
风险提示:
/v1/notifications POST接口的P99延迟接近900ms,且错误率最高(0.45% 5xx + 5.1% 4xx),该接口在迁移前需要优先优化或重新设计。
3. 数据采集方法:Prometheus + 自定义Exporter
基线数据通过Prometheus监控体系自动采集,无需人工统计。采集架构如下:
采集链路: API Gateway (Nginx) → Prometheus → Grafana仪表盘 → 基线报告
具体采集方案分为三个层次:
- API Gateway层(Nginx): 通过nginx-lua-prometheus模块暴露指标,采集每个v1接口的请求总数、状态码分布、响应时间直方图。
- 应用层(Java/Python): 使用Micrometer或Prometheus客户端库,在业务代码中埋点,采集业务错误码、数据库查询耗时、外部依赖调用延迟。
- 基础设施层: 采集Pod/容器级别的CPU、内存、网络IO,用于关联分析延迟和错误是否由资源瓶颈引起。
核心Prometheus指标定义示例:
# HELP api_v1_requests_total Total number of v1 API requests
# TYPE api_v1_requests_total counter
api_v1_requests_total{method="GET",path="/v1/users",status="200"} 86400
# HELP api_v1_request_duration_seconds Request latency histogram for v1 APIs
# TYPE api_v1_request_duration_seconds histogram
api_v1_request_duration_seconds_bucket{method="GET",path="/v1/users",le="0.1"} 72000
api_v1_request_duration_seconds_bucket{method="GET",path="/v1/users",le="0.3"} 84000
api_v1_request_duration_seconds_bucket{method="GET",path="/v1/users",le="1.0"} 86300
api_v1_request_duration_seconds_bucket{method="GET",path="/v1/users",le="+Inf"} 86400
# HELP api_v1_errors_total Total number of v1 API errors by error type
# TYPE api_v1_errors_total counter
api_v1_errors_total{method="POST",path="/v1/orders",error_type="5xx"} 84
api_v1_errors_total{method="POST",path="/v1/orders",error_type="4xx"} 1411
4. 基线数据采集架构图
下图展示了从API请求到Prometheus指标存储的完整采集链路:
5. 基线数据采集步骤
以下为生产环境基线数据采集的标准操作流程:
| 步骤 | 操作内容 | 工具/命令 | 预期产出 |
|---|---|---|---|
| 1 | 确认Prometheus已配置v1接口的抓取任务 | promtool check config |
配置无报错 |
| 2 | 验证指标是否正常上报 | curl http://prometheus:9090/api/v1/query?query=api_v1_requests_total |
返回JSON格式指标数据 |
| 3 | 导出30天历史数据 | PromQL + Grafana CSV导出 | 每个接口的调用量/延迟/错误率CSV文件 |
| 4 | 计算基线统计值 | Python脚本 + numpy | 日均值、P50/P99、峰值、谷值 |
| 5 | 生成基线报告 | Grafana仪表盘截图 + 表格 | 本章所示的基线数据表 |
PromQL查询示例: 获取
/v1/users GET接口过去30天的P99延迟histogram_quantile(0.99, sum(rate(api_v1_request_duration_seconds_bucket{method="GET",path="/v1/users"}[30d])) by (le))
6. 基线数据质量保障
为确保基线数据的准确性和完整性,需执行以下校验:
- 数据完整性: 检查30天内是否有采集断点(Prometheus target up/down事件),缺失时段超过1%需标记并说明原因。
- 异常值过滤: 排除因部署、回滚、故障演练等非正常流量产生的数据点,避免基线被污染。
- 多维度交叉验证: 将Prometheus指标与API Gateway访问日志(ELK)中的请求数、状态码进行比对,误差应小于2%。
- 延迟基线校准: 确认P99延迟计算使用的histogram bucket边界设置合理(如0.1s、0.3s、1.0s、3.0s),避免因bucket过少导致精度失真。
常见陷阱: 如果API Gateway启用了请求合并(如Nginx合并多个子请求为一条日志),Prometheus采集的请求数可能低于实际值。务必在采集前确认Gateway的日志与指标配置一致。