OTel
OpenTelemetry (OTel) 是一个开源项目,旨在为分布式系统(例如微服务架构)中的 telemetry 数据采集、处理和导出提供一个供应商无关的标准。它可以帮助开发者更轻松地分析软件的性能和行为,从而便于诊断和解决应用问题。
术语
前提条件
-
确保存在可用的 ALB:创建或使用现有的 ALB。以下示例中使用
<otel-alb>作为 ALB 名称。有关创建 ALB 的说明,请参见 配置 ALB。 -
确保存在 OTel 数据上报服务器地址:此地址后文将称为
<jaeger-server>。
操作步骤
更新 ALB 配置
-
在集群的主节点上,使用 CLI 工具执行以下命令以编辑 ALB 配置。
-
在
spec.config部分下添加以下字段。完成后的示例配置:
-
执行以下命令保存更新。更新后,ALB 默认启用 OpenTelemetry,且所有请求的 Trace 信息都会上报到 Jaeger Server。
相关操作
在 Ingress 中配置 OTel
-
在 Ingress 上启用或禁用 OTel
通过配置是否在 Ingress 上启用 OTel,可以更好地监控和调试应用的请求流,通过跟踪请求在不同服务之间的传播来识别性能瓶颈或错误。
操作步骤
在 Ingress 的 metadata.annotations 字段下添加以下配置:
参数说明:
- nginx.ingress.kubernetes.io/enable-opentelemetry:设置为
true时,表示 Ingress controller 在处理经过此 Ingress 的请求时启用 OpenTelemetry 功能,即会采集并上报请求的 Trace 信息。设置为false或删除该注解时,表示不会采集或上报请求的 Trace 信息。
- nginx.ingress.kubernetes.io/enable-opentelemetry:设置为
-
在 Ingress 上启用或禁用 OTel Trust
OTel Trust 决定 Ingress 是否信任并使用入站请求中的 Trace 信息(例如 trace ID)。
操作步骤
在 Ingress 的 metadata.annotations 字段下添加以下配置:
参数说明:
- nginx.ingress.kubernetes.io/opentelemetry-trust-incoming-span:设置为
true时,Ingress 会继续使用已存在的 Trace 信息,有助于保持跨服务 tracing 的一致性,使整个请求链路能够在分布式 tracing 系统中被完整追踪和分析。设置为false时,将为请求生成新的 tracing 信息,这可能会导致请求在进入 Ingress 后被视为新的 tracing 链路的一部分,从而中断跨服务 trace 的连续性。
- nginx.ingress.kubernetes.io/opentelemetry-trust-incoming-span:设置为
-
在 Ingress 上添加不同的 OTel 配置
此配置允许您针对不同的 Ingress 资源自定义 OTel 的行为和数据导出方式,从而对每个服务的 tracing 策略或目标进行精细化控制。
操作步骤
在 Ingress 的 metadata.annotations 字段下添加以下配置:
参数说明:
- exporter:指定如何将采集到的 Trace 数据发送到 OTel Collector(OTel 数据上报服务器)。
- address:指定 OTel Collector 的地址。
- request_timeout:指定请求超时时间。
在应用中使用 OTel
以下配置展示了完整的 OTel 配置结构,可用于定义如何在应用中启用和使用 OTel 功能。
在集群主节点上,使用 CLI 工具执行以下命令以获取完整的 OTel 配置结构。
回显结果:
参数说明:
继承
默认情况下,如果 ALB 配置了某些 OTel 参数而 FT 未配置,则 FT 会继承 ALB 的参数作为自身配置;也就是说,FT 继承 ALB 的配置,而 Rule 可以同时继承 ALB 和 FT 的配置。
-
ALB:ALB 上的配置通常是全局和默认配置。您可以在这里配置诸如 Collector 地址之类的全局参数,这些参数会被下层的 FT 和 Rule 继承。
-
FT:FT 可以继承 ALB 的配置,这意味着 FT 上未配置的某些 OTel 参数将使用 ALB 中的配置。不过,FT 也可以进一步细化;例如,您可以选择仅在 FT 上有选择地启用或禁用 OTel,而不影响其他 FT 或 ALB 的全局设置。
-
Rule:Rule 可以继承 ALB 和 FT 的配置。不过,Rule 也可以进一步细化;例如,某个特定 Rule 可以选择不信任传入的 OTel Trace 信息,或者调整采样策略。
操作步骤
通过在 ALB、FT 和 Rule 的 YAML 文件中配置 spec.config.otel 字段,您可以添加与 OTel 相关的配置。
补充说明
Sampling Strategies
Attributes
-
Resource Attributes
这些属性默认会上报。
-
Span Attributes
-
默认上报的属性:
-
默认上报,但可通过修改 flag.hide_upstream_attrs 字段排除的属性:
-
默认不报告,但可通过修改 flag.report_http_request_header 字段进行上报的属性:
-
默认不报告,但可通过修改 flag.report_http_response_header 字段进行上报的属性:
-
配置示例
以下 YAML 配置会部署一个 ALB,并使用 Jaeger 作为 OTel server,使用 Hotrod-proxy 作为演示后端。通过配置 Ingress 规则,当客户端请求 ALB 时,流量将被转发到 HotROD。此外,HotROD 内部微服务之间的通信也会通过 ALB 进行路由。
-
将以下 YAML 保存为名为 all.yaml 的文件。
-
在 CLI 工具中执行以下命令,部署 Jaeger、ALB、HotROD 以及所有测试所需的 CR。
-
执行以下命令以获取 Jaeger 的访问地址。
-
执行以下命令以获取 otel-alb 的访问地址。
-
执行以下命令通过 ALB 向 HotROD 发送请求。此时,ALB 会将 Trace 上报到 Jaeger。
-
打开在 步骤 3 中获取的 Jaeger 访问地址以查看结果。

