追踪 API 流量
追踪(Traces)与指标(Metrics)和日志(Logs)并称为可观测性的三大支柱。追踪记录了一个请求在系统各个部分中穿梭的过程。这是一种有效的机制,可帮助开发人员和管理员监控系统性能、识别瓶颈并改善用户体验。
本教程将指导你如何使用 opentelemetry 插件创建追踪。该插件对网关进行插桩,并基于 OpenTelemetry 规范,通 过 HTTP 将二进制编码的 OTLP 格式的追踪发送到 OpenTelemetry Collector。以下是一个交互式演示,为你提供实际操作介绍。
前置条件
安装 OpenTelemetry
虽然本节中的步骤使用了特定的 OpenTelemetry Collector,但你也可以使用其他发行版的 Collector,例如 SigNoz OpenTelemetry Collector。它们都能处理遥测数据,但在侧重点、功能和集成的灵活性上有所不同。
- Docker
- Kubernetes
启动一个 OpenTelemetry Collector 实例:
docker run -d --name otel-collector -p 4318:4318 otel/opentelemetry-collector-contrib
安装 cert-manager 作为依赖项:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.16.1/cert-manager.yaml
当 cert-manager 准备就绪后,安装 OpenTelemetry operator:
kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml
安装 OpenTelemetry 实例:
kubectl apply -f - <<EOF
apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector
metadata:
namespace: api7
name: simplest
spec:
config:
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
memory_limiter:
check_interval: 1s
limit_percentage: 75
spike_limit_percentage: 15
batch:
send_batch_size: 10000
timeout: 10s
exporters:
debug: {}
service:
pipelines:
traces:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [debug]
EOF
配置 OpenTelemetry 元数据
在本节中,你将配置 opentelemetry 插件的元数据,该元数据指定了连接接口和其他参数。
- Dashboard
- ADC
- Ingress Controller
-
从侧边导航栏中选择你网关组的 Plugin Settings(插件设置)。
-
选择 Plugin Metadata(插件元数据)选项卡,然后点击 Add Plugin Metadata(添加插件元数据)。
-
搜索
opentelemetry插件,然后点击 Add Metadata(添加元数据)。 -
在出现的对话框中,将以下配置添加到 JSON Editor 中,并将 collector 地址替换为你的 IP:
{"trace_id_source": "x-request-id","resource": {"service.name": "API7"},"collector": {"address": "192.168.2.106:4318","request_timeout": 3,"request_headers": {"Authorization": "token"}},"batch_span_processor": {"drop_on_queue_full": false,"max_queue_size": 1024,"batch_timeout": 2,"inactive_timeout": 1,"max_export_batch_size": 16},"set_ngx_var": true} -
点击 Save(保存)。
要使用 ADC 更新插件元数据,请创建以下配置:
plugin_metadata:
opentelemetry:
batch_span_processor:
batch_timeout: 2
drop_on_queue_full: false
inactive_timeout: 1
max_export_batch_size: 16
max_queue_size: 1024
collector:
address: 192.168.2.106:4318
request_headers:
Authorization: token
request_timeout: 3
resource:
service.name: API7
set_ngx_var: true
trace_id_source: x-request-id
将配置同步到 API7 企业版:
adc sync -f otel-metadata.yaml
- Gateway API
- APISIX CRD
更新你的 GatewayProxy 清单以包含 opentelemetry 插件元数据配置:
apiVersion: apisix.apache.org/v1alpha1
kind: GatewayProxy
metadata:
namespace: api7
name: apisix
spec:
provider:
type: ControlPlane
controlPlane:
# your control plane connection configuration
# ....
pluginMetadata:
opentelemetry: {
"trace_id_source": "x-request-id",
"resource": {
"service.name": "API7"
},
"collector": {
"address": "simplest-collector:4318",
"request_timeout": 3,
"request_headers": {
"Authorization": "token"
}
},
"batch_span_processor": {
"drop_on_queue_full": false,
"max_queue_size": 1024,
"batch_timeout": 2,
"inactive_timeout": 1,
"max_export_batch_size": 16
},
"set_ngx_var": true
}
将配置应用到你的集群:
kubectl apply -f global-rule-otel.yaml
进入控制台,在 Plugin Settings > Plugin Metadata 下,你应该会看到已更新了 opentelemetry 插件及其元数据。