OTel
OpenTelemetry(OTel)是一个开源项目,旨在为在分布式系统(如微服务架构)中收集、处理和导出遥测数据提供一个供所有供应商使用的中立标准。它帮助开发者更轻松地分析软件的性能和行为,从而促进应用程序问题的诊断和解决。
目录
术语
先决条件
-
确保操作性的 ALB 存在:创建或使用现有的 ALB,本文件中 ALB 的名称用
<otel-alb>替换。有关创建 ALB 的说明,请参考 Creating Load Balancer。 -
确保存在 OTel 数据报告服务器地址:该地址在此后称为
<jaeger-server>。
步骤
更新 ALB 配置
-
在集群的主节点上,使用 CLI 工具执行以下命令以编辑 ALB 配置。
-
在
spec.config部分下添加以下字段。完成后的示例配置:
-
执行以下命令以保存更新。更新后,ALB 将默认启用 OpenTelemetry,所有请求 Trace 信息将被报告到 Jaeger 服务器。
相关操作
在 Ingress 中配置 OTel
-
启用或禁用 Ingress 上的 OTel
通过配置是否在 Ingress 上启用 OTel,可以更好地监控和调试应用程序的请求流动,通过追踪请求在不同服务之间的传播来识别性能瓶颈或错误。
步骤
在 Ingress 的 metadata.annotations 字段下添加以下配置:
参数说明:
- nginx.ingress.kubernetes.io/enable-opentelemetry:当设置为
true时,表示 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 信息,帮助保持跨服务追踪的一致性,允许在分布式追踪系统中完整地追踪和分析整个请求链。当设置为false时,将为请求生成新的追踪信息,这可能导致请求在进入 Ingress 后被视为新的追踪链的一部分,从而中断跨服务的追踪连续性。
- nginx.ingress.kubernetes.io/opentelemetry-trust-incoming-span:当设置为
-
在 Ingress 上添加不同的 OTel 配置
此配置允许您自定义 OTel 的行为和数据导出方法,以便对不同的 Ingress 资源进行细粒度的追踪策略或目标控制。
步骤
在 Ingress 的 metadata.annotations 字段下添加以下配置:
参数说明:
- exporter:指定收集的 Trace 数据如何发送到 OTel 收集器(OTel 数据报告服务器)。
- address:指定 OTel 收集器的地址。
- request_timeout:指定请求超时时间。
在应用程序中使用 OTel
以下配置展示了完整的 OTel 配置结构,可用于定义如何在应用程序中启用和使用 OTel 功能。
在集群主节点上,使用 CLI 工具执行以下命令以获取完整的 OTel 配置结构。
输出结果:
参数说明:
继承
默认情况下,如果 ALB 配置了某些 OTel 参数且 FT 未配置,则 FT 将从 ALB 继承参数作为其配置;即 FT 继承 ALB 的配置,Rules 可以从 ALB 和 FT 两者继承配置。
-
ALB:ALB 上的配置通常是全局的和默认的。在此可以配置例如 Collector 地址等全局参数,这些参数将被下级 FT 和 Rules 继承。
-
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 服务器,并以 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 访问地址以查看结果。

