使用 Service Mesh 配置分布式追踪平台
Alauda Service Mesh 通过与以下组件集成支持分布式追踪:
-
Alauda Build of Jaeger v2:基于开源 Jaeger 项目的定制发行版。它可为复杂分布式系统中的请求提供端到端可见性。在 v2 中,Jaeger 实例作为由 Alauda Build of OpenTelemetry v2 Operator 管理的
OpenTelemetryCollector自定义资源进行部署。 -
Alauda Build of OpenTelemetry v2:基于 OpenTelemetry 项目构建,该 Operator 负责管理 Jaeger v2 实例以及位于其前端的 OpenTelemetry Collector 的生命周期。
OpenTelemetry Collector 作为 telemetry 信号的中介。它支持多种数据格式,并提供标准化的处理与导出 pipeline,可将 telemetry 发送到 Jaeger 等后端。
目录
使用 Service Mesh 配置分布式追踪数据采集卸载分布式追踪移除 Service Mesh tracing 配置卸载 OpenTelemetry Collector 和 Jaeger v2使用 Service Mesh 配置分布式追踪数据采集
你可以通过部署一个 Jaeger v2 实例和一个 OpenTelemetry Collector,然后配置 Istio 通过它们导出 trace 数据,从而将 Alauda Service Mesh 与 Alauda Distributed Tracing 集成起来。
Jaeger v2 实例和 OpenTelemetry Collector 并不属于 Service Mesh 专属组件:一对 Jaeger v2 和 OpenTelemetry Collector(默认部署在 jaeger-system namespace 中)可以同时服务于 Service Mesh 和集群中的其他 workload。本节仅介绍 Service Mesh 相关配置;底层安装步骤请参考 Alauda Distributed Tracing 文档。
前提条件
-
已安装 Alauda Build of OpenTelemetry v2 Operator。请参见 安装 Alauda Build of OpenTelemetry v2 Operator。
-
已部署 Jaeger v2 实例。请参见 部署 Alauda Build of Jaeger v2。
INFO安装操作步骤中引用的
JAEGER_ES_INDEX_PREFIX变量用于控制存储 trace 数据的 Elasticsearch 索引前缀。默认值acp-${CLUSTER_NAME}适用于单集群部署。对于 service mesh 部署,请根据 mesh 的拓扑选择前缀:- 对于单集群 service mesh,建议以前缀结尾包含集群名称,例如
acp-cluster-1。 - 对于多集群 service mesh,所有集群的 trace 必须存储在同一个索引 family 中;建议以前缀结尾包含 meshID,例如
acp-mesh-1。在 mesh 中每个集群上执行安装操作步骤时,请使用相同的JAEGER_ES_INDEX_PREFIX,以便 Jaeger UI 能够跨集群关联 span。
- 对于单集群 service mesh,建议以前缀结尾包含集群名称,例如
-
已部署 OpenTelemetry Collector。请参见 部署 OpenTelemetry Collector。
-
已创建 Istio 实例。
-
已创建 Istio CNI 实例。
操作步骤
更新 Istio 资源以启用 tracing 并定义 OpenTelemetry tracing provider
示例:通过 meshConfig 启用 tracing
service字段是 OpenTelemetry Collector Service 的 FQDN。默认值指向部署在jaeger-systemnamespace 中的 Collector,如 部署 OpenTelemetry Collector 所述。如果你将 Collector 部署在其他 namespace 中,或使用了不同的实例名称,请将其替换为实际的 Collector 地址。
要应用此配置,请 patch Istio 资源:
此命令使用 JSON merge patch,它会替换整个 meshConfig.extensionProviders 数组。如果 Istio 资源已经定义了其他 extension provider,它们将被覆盖。若要保留这些配置,请使用 kubectl edit istio default 手动编辑资源并追加 otel 条目,或者使用 JSON Patch(--type=json)向 /spec/values/meshConfig/extensionProviders/- 追加内容。
更新 Telemetry 资源以启用在 meshConfig 中定义的 tracing provider:
Istio Telemetry 资源示例
要应用此配置,请 patch Telemetry 资源:
在确认能够看到 traces 之后,请降低 randomSamplingPercentage 值以减少请求数量。
卸载分布式追踪
如果你不再需要与 Service Mesh 的分布式追踪集成,请按以下顺序移除配置。
移除 Service Mesh tracing 配置
在移除底层组件之前,请先将 mesh 与 OpenTelemetry Collector 解除关联,以便 Istio 停止发送 span。
-
编辑
Telemetry资源,并删除引用otelprovider 的tracingproviders 条目:另外,也可以使用
kubectl patch以非交互方式移除tracing配置: -
编辑
Istio资源,删除名为otel的meshConfig.extensionProviders条目,或者将meshConfig.enableTracing设置为false:另外,也可以使用
kubectl patch以非交互方式将meshConfig.enableTracing设置为false:
卸载 OpenTelemetry Collector 和 Jaeger v2
如果集群中的其他 workload 仍然依赖 OpenTelemetry Collector 或 Jaeger v2 实例,则跳过此步骤。
有关删除 OpenTelemetry Collector 实例、Jaeger v2 实例,以及(可选)Alauda Build of OpenTelemetry v2 Operator 的说明,请参见 卸载 Alauda Distributed Tracing。