使用 Service Mesh 配置分布式追踪平台
Alauda Service Mesh 支持通过与以下组件集成来实现分布式追踪:
-
Alauda Build of Jaeger v2:基于开源 Jaeger 项目的定制发行版。它为跨复杂分布式系统的请求提供端到端可见性。在 v2 中,Jaeger 实例以
OpenTelemetryCollector自定义资源的形式部署,由 Alauda Build of OpenTelemetry v2 Operator 管理。 -
Alauda Build of OpenTelemetry v2:基于 OpenTelemetry 项目,此 Operator 管理 Jaeger v2 实例和作为其前端的 OpenTelemetry Collector 的生命周期。
OpenTelemetry Collector 充当遥测信号的中间层。它支持多种数据格式,并提供用于处理遥测数据以及将其导出到 Jaeger 等后端的标准化管道。
使用 Service Mesh 配置分布式追踪数据收集
您可以将 Alauda Service Mesh 与 Alauda Distributed Tracing 集成:部署 Jaeger v2 实例和 OpenTelemetry Collector,然后配置 Istio 通过它们导出追踪数据。
Jaeger v2 实例和 OpenTelemetry Collector 并非 Service Mesh 专用组件:一对 Jaeger v2 和 OpenTelemetry Collector(默认部署在 jaeger-system 命名空间中)可以同时为 Service Mesh 和集群中的其他工作负载提供服务。本节仅介绍 Service Mesh 特定的配置;有关底层安装步骤,请参阅 Alauda Distributed Tracing 文档。
前提条件
-
目标集群已安装 Alauda Container Platform Distributed Tracing(之前称为 Alauda Build of Jaeger v2)集群插件。请参阅 安装 Alauda Build of Jaeger v2 集群插件。该插件会将追踪组件的容器镜像发布到平台的 registry,并将其地址记录在
cpaas-system中的jaeger-cluster-plugin-manifestConfigMap 内,以下步骤将读取这些地址。 -
已安装 Alauda Container Platform Application Observability(之前称为 Alauda Build of OpenTelemetry v2)Operator。请参阅 安装 Alauda Build of OpenTelemetry v2 Operator。
-
已部署 Jaeger v2 实例。请参阅 使用 Elasticsearch 部署 Alauda Build of Jaeger v2 或 使用 OpenSearch 部署 Alauda Build of Jaeger v2。
INFO安装操作步骤中引用的
JAEGER_ES_INDEX_PREFIX变量控制用于存储追踪数据的 Elasticsearch 索引前缀。默认值acp-${CLUSTER_NAME}适用于单集群部署。对于 service mesh 部署,请根据 mesh 的拓扑选择前缀:- 对于单集群 service mesh,建议以前缀加集群名称结尾,例如
acp-cluster-1。 - 对于多集群 service mesh,所有集群的追踪数据必须存储在同一索引系列中;建议以前缀加 meshID 结尾,例如
acp-mesh-1。在 mesh 中的每个集群上运行安装操作步骤时使用相同的JAEGER_ES_INDEX_PREFIX,以便 Jaeger UI 能够关联跨集群的 span。
- 对于单集群 service mesh,建议以前缀加集群名称结尾,例如
-
已部署 OpenTelemetry Collector。请参阅 部署 OpenTelemetry Collector。
-
已创建 Istio 实例。
-
已创建 Istio CNI 实例。
操作步骤
当 mesh 使用 discovery selectors 时,为 jaeger-system 命名空间添加标签(可选)
如果 mesh 通过在 Istio 资源上设置 discoverySelectors 来限制控制平面监视的命名空间,则承载 OpenTelemetry Collector 的命名空间(默认为 jaeger-system 命名空间)也必须匹配其中一个 selector。否则,控制平面不会将 Collector Service 推送到 sidecar proxy,proxy 也无法向其导出 span。
将与您的 discoverySelectors 匹配的标签应用于 jaeger-system 命名空间。例如,如果 selector 匹配 istio-discovery=enabled 标签:
当 mesh 不使用 discoverySelectors 时,请跳过此步骤。默认情况下,控制平面会发现每个命名空间,因此 Collector 已可见,无需额外标签。在未使用 discovery selectors 时添加该标签不会产生任何影响。
有关 discovery selectors 的更多信息,请参阅 sidecar 模式下的 使用 DiscoverySelectors,以及 ambient 模式下的 ambient 模式中的 discovery selectors。
更新 Istio 资源以启用追踪并定义 OpenTelemetry 追踪 provider
示例:通过 meshConfig 启用追踪
service字段是 OpenTelemetry Collector Service 的 FQDN。默认值指向jaeger-system命名空间中部署的 Collector,如 部署 OpenTelemetry Collector 中所述。如果您将 Collector 部署在其他命名空间中,或使用了不同的实例名称,请将其替换为实际的 Collector 地址。- 使每个 proxy 都将其 span 导出到自身集群的 Collector。在单集群 mesh 中,此设置不会产生任何变化;当 mesh 跨越多个集群时,该设置可确保追踪完整。使用与上方
service字段相同的 host。
在跨越多个集群的 mesh 中,每个集群都会以相同的 Service 名称发布其 Collector,控制平面会将它们合并为一组 endpoint:如果没有 clusterLocal,proxy 会将其 span 分散到所有集群的 Collector。发送到其他集群的 span 会在集群位于不同网络时丢失;即使它们共享网络,也会无谓地跨越集群边界。
clusterLocal 会删除属于其他集群的 endpoint,因此仅当每个集群都运行自己的 Collector 时才应设置它,这也是前提条件中安装的方式。如果一个 Collector 为多个集群提供服务,请省略此项:没有 Collector 的集群中的 proxy 将完全没有 endpoint,并会丢弃所有 span。
要应用此配置,请修补 Istio 资源:
此命令使用 JSON merge patch,会替换整个 meshConfig.extensionProviders 和 meshConfig.serviceSettings 数组。如果 Istio 资源已定义其他 extension provider 或 service 设置,这些内容将被覆盖。若要保留这些内容,请使用 kubectl edit istio default 编辑资源并手动追加条目,或使用 JSON Patch(--type=json)追加到 /spec/values/meshConfig/extensionProviders/- 和 /spec/values/meshConfig/serviceSettings/-。
更新 Telemetry 资源,以启用 meshConfig 中定义的追踪 provider:
Istio Telemetry 资源示例
要应用此配置,请修补 Telemetry 资源:
确认可以看到追踪数据后,降低 randomSamplingPercentage 值,以减少请求数量。
卸载分布式追踪
如果不再需要与 Service Mesh 集成的分布式追踪,请按以下顺序移除配置。
移除 Service Mesh 追踪配置
在移除底层组件之前,将 mesh 与 OpenTelemetry Collector 分离,以便 Istio 停止发送 span。
-
编辑
Telemetry资源,并移除引用otelprovider 的tracingproviders 条目:或者,使用
kubectl patch以非交互方式移除tracing配置: -
编辑
Istio资源,并移除名为otel的meshConfig.extensionProviders条目以及针对 Collector 主机的meshConfig.serviceSettings条目,或者将meshConfig.enableTracing设置为false:或者,使用
kubectl patch以非交互方式将meshConfig.enableTracing设置为false:
卸载 OpenTelemetry Collector 和 Jaeger v2
如果集群中的其他工作负载仍依赖 OpenTelemetry Collector 或 Jaeger v2 实例,请跳过此步骤。
有关删除 OpenTelemetry Collector 实例、Jaeger v2 实例以及(可选)Alauda Container Platform Application Observability(之前称为 Alauda Build of OpenTelemetry v2)Operator 的操作说明,请参阅 Uninstalling Alauda Distributed Tracing。