使用 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 配置分布式追踪数据采集卸载分布式追踪移除 Service Mesh tracing 配置卸载 OpenTelemetry Collector 和 Jaeger v2使用 Service Mesh 配置分布式追踪数据采集
你可以通过部署 Jaeger v2 实例和 OpenTelemetry Collector,然后配置 Istio 通过它们导出追踪数据,从而将 Alauda Service Mesh 与 Alauda Distributed Tracing 集成。
Jaeger v2 实例和 OpenTelemetry Collector 并非 Service Mesh 专用:一个 Jaeger v2 与 OpenTelemetry Collector 配对(默认部署在 jaeger-system 命名空间中)即可同时服务于 Service Mesh 和集群中的其他工作负载。本节仅介绍 Service Mesh 相关配置;底层安装步骤请参阅 Alauda Distributed Tracing 文档。
前提条件
-
已安装 Alauda Build of OpenTelemetry v2 Operator。请参见 Installing the Alauda Build of OpenTelemetry v2 Operator。
-
已部署 Jaeger v2 实例。请参见 Deploying the Alauda Build of Jaeger v2 with Elasticsearch 或 Deploying the Alauda Build of Jaeger v2 with OpenSearch。
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 能够关联跨集群的 spans。
- 对于单集群 Service Mesh,我们建议以前缀结尾包含集群名称,例如
-
已部署 OpenTelemetry Collector。请参见 Deploying the OpenTelemetry Collector。
-
已创建 Istio 实例。
-
已创建 Istio CNI 实例。
操作步骤
(可选)当 mesh 使用 discovery selectors 时,为 jaeger-system 命名空间添加标签
如果 mesh 通过在 Istio 资源上设置 discoverySelectors 来限制控制平面监视的命名空间,则承载 OpenTelemetry Collector 的命名空间(默认是 jaeger-system 命名空间)也必须匹配这些 selector 之一。否则,控制平面不会将 Collector Service 下发给 sidecar proxies,proxy 也就无法向其导出 spans。
将与你的 discoverySelectors 匹配的标签应用到 jaeger-system 命名空间。例如,如果 selector 匹配 istio-discovery=enabled 标签:
当 mesh 不使用 discoverySelectors 时,跳过此步骤。默认情况下,控制平面会发现每个命名空间,因此 Collector 已经可见,无需额外标签。若未使用 discovery selectors,此时添加标签不会产生任何影响。
有关 discovery selectors 的更多信息,请参见 sidecar 模式下的 使用 DiscoverySelectors,以及 ambient 模式下的 ambient 模式中的 discovery selectors。
更新 Istio 资源以启用 tracing 并定义 OpenTelemetry tracing provider
示例:通过 meshConfig 启用 tracing
service字段是 OpenTelemetry Collector Service 的 FQDN。默认值指向部署在jaeger-system命名空间中的 Collector,如 Deploying the OpenTelemetry Collector 所述。如果你将 Collector 部署在不同的命名空间中,或使用不同的实例名称,请将其替换为实际的 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 停止发送 spans。
-
编辑
Telemetry资源,并移除引用otelprovider 的tracingproviders 条目:另外,也可以使用
kubectl patch非交互式地移除tracing配置: -
编辑
Istio资源,并移除名为otel的meshConfig.extensionProviders条目,或者将meshConfig.enableTracing设置为false:另外,也可以使用
kubectl patch非交互式地将meshConfig.enableTracing设置为false:
卸载 OpenTelemetry Collector 和 Jaeger v2
如果集群中的其他工作负载仍依赖 OpenTelemetry Collector 或 Jaeger v2 实例,请跳过此步骤。
有关删除 OpenTelemetry Collector 实例、Jaeger v2 实例以及(可选)Alauda Build of OpenTelemetry v2 Operator 的操作说明,请参见 Uninstalling Alauda Distributed Tracing。