API7 网关 AI Agent Skill:zipkin 插件
概览
zipkin 插件会将分布式追踪数据发送到兼容 Zipkin 的采集器,并使用 Zipkin v2 HTTP API。它支持通过 B3 传播请求头跨服务传递链路上下文。兼容的后端包括 Zipkin、Jaeger 和 SkyWalking(通过 Zipkin 接收器)。
适用场景
- 使用 Zipkin、Jaeger 或兼容的采集器进行分布式追踪。
- 通过 B3 请求头在微服务之间传播追踪信息。
- 通过请求头控制单个请求的采样。
- 将 Trace ID 注入访问日志。
插件配置参考
| 字段 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
endpoint | string | 是 | — | Zipkin 采集器 URL(例如 http://zipkin:9411/api/v2/spans) |
sample_ratio | number | 是 | — | 采样率,范围为 0.00001 至 1 |
service_name | string | 否 | "APISIX" | Zipkin UI 中显示的服务名称 |
server_addr | string | 否 | $server_addr | 用于上报 span 的 IPv4 地址 |
span_version | integer | 否 | 2 | Span 格式:1(旧版)或 2(默认) |
B3 传播请求头
该插件使用 B3 传播格式:
注入到上游
| 请求头 | 说明 |
|---|---|
x-b3-traceid | Trace ID(16 或 32 个十六进制字符) |
x-b3-spanid | Span ID(16 个十六进制字符) |
x-b3-parentspanid | 父 span ID |
x-b3-sampled | 采样决策(1 或 0) |
从客户端提取
| 请求头 | 说明 |
|---|---|
b3 | 单请求头格式:{traceid}-{spanid}-{sampled}-{parentspanid} |
x-b3-sampled | 1 = 强制采样,0 = 跳过,d = 调试 |
x-b3-flags | 1 = 强制调试采样 |
客户端可以通过设置 x-b3-sampled: 1 覆盖单个请求的采样设置。
分步指南:启用 Zipkin 链路追踪
1. 使用 zipkin 创建路由
在网关组 default 中启用追踪:
a7 route create --gateway-group default -f - <<'EOF'
{
"id": "traced-api",
"uri": "/api/*",
"plugins": {
"zipkin": {
"endpoint": "http://zipkin:9411/api/v2/spans",
"sample_ratio": 1,
"service_name": "my-gateway",
"span_version": 2
}
},
"upstream": {
"type": "roundrobin",
"nodes": [{"host": "backend", "port": 8080, "weight": 1}]
}
}
EOF
2. 发送请求
curl http://localhost:9080/api/hello
3. 在 Zipkin UI 中查看追踪
打开 Zipkin UI,并搜索服务 my-gateway。
常见模式
将追踪发送到 Jaeger
Jaeger 支持 Zipkin v2 API:
{
"plugins": {
"zipkin": {
"endpoint": "http://jaeger-collector:9411/api/v2/spans",
"sample_ratio": 1,
"service_name": "my-gateway"
}
}
}
生产环境采样(10%)
{
"plugins": {
"zipkin": {
"endpoint": "http://zipkin:9411/api/v2/spans",
"sample_ratio": 0.1,
"service_name": "production-gateway"
}
}
}