OTel
OpenTelemetry(OTel)是一个开源项目,旨在为分布式系统(例如微服务架构)中的遥测数据收集、处理和导出提供与供应商无关的标准。它可以帮助开发人员更轻松地分析软件的性能和行为,从而促进应用问题的诊断和解决。
术语
前提条件
-
确保存在可正常运行的 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或移除此 annotation 时,表示不收集或报告请求的 Trace 信息。
- nginx.ingress.kubernetes.io/enable-opentelemetry:设置为
-
在 Ingress 上启用或禁用 OTel 信任
OTel 信任用于确定 Ingress 是否信任并使用传入请求中的 Trace 信息(例如 trace ID)。
操作步骤
在 Ingress 的 metadata.annotations 字段下添加以下配置:
参数说明:
- nginx.ingress.kubernetes.io/opentelemetry-trust-incoming-span:设置为
true时,Ingress 会继续使用已有的 Trace 信息,有助于保持跨服务追踪的一致性,使整个请求链能够在分布式追踪系统中得到完整追踪和分析。设置为false时,将为请求生成新的追踪信息,这可能导致请求进入 Ingress 后被视为新追踪链的一部分,从而中断跨服务 Trace 的连续性。
- nginx.ingress.kubernetes.io/opentelemetry-trust-incoming-span:设置为
-
在 Ingress 上添加不同的 OTel 配置
此配置允许您为不同的 Ingress 资源自定义 OTel 的行为和数据导出方式,从而对每个服务的追踪策略或目标进行精细控制。
操作步骤
在 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 相关配置。
附加说明
采样策略
属性
-
资源属性
默认报告这些属性。
-
Span 属性
-
默认报告的属性:
-
默认报告的属性,但可以通过修改 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 访问地址,查看结果。


商标声明
NGINX® 是 F5, Inc. 在美国及其他国家/地区的注册商标。
Alauda 是独立供应商。本产品与 F5, Inc. 不存在关联,也未获得其认可或赞助。所有商标均归其各自所有者所有,此处仅用于标识目的。