使用 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 通过它们导出 trace 数据,将 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。请参见 安装 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变量用于控制存储 trace 数据的 Elasticsearch 索引前缀。默认值acp-${CLUSTER_NAME}适用于单集群部署。对于 Service Mesh 部署,请根据 mesh 的拓扑选择前缀:- 对于单集群 Service Mesh,我们建议以前缀结尾使用集群名称,例如
acp-cluster-1。 - 对于多集群 Service Mesh,所有集群的 trace 必须存储在同一个索引系列中;我们建议以前缀结尾使用 meshID,例如
acp-mesh-1。在 mesh 中每个集群上运行安装操作步骤时,请使用相同的JAEGER_ES_INDEX_PREFIX,以便 Jaeger UI 可以关联跨集群的 span。
- 对于单集群 Service Mesh,我们建议以前缀结尾使用集群名称,例如
-
已部署 OpenTelemetry Collector。请参见 部署 OpenTelemetry Collector。
-
已创建 Istio 实例。
-
已创建 Istio CNI 实例。
操作步骤
(可选)当 mesh 使用 discoverySelectors 时,为 jaeger-system 命名空间添加标签
如果 mesh 通过在 Istio 资源上设置 discoverySelectors 来限制控制平面监视的命名空间,则承载 OpenTelemetry Collector 的命名空间(默认是 jaeger-system 命名空间)也必须匹配这些 selector 之一。否则,控制平面不会将 Collector Service 下发到 sidecar 代理,代理也就无法向其导出 span。
将你的 discoverySelectors 所匹配的标签应用到 jaeger-system 命名空间。例如,如果 selector 匹配 istio-discovery=enabled 标签:
如果 mesh 未使用 discoverySelectors,请跳过此步骤。默认情况下,控制平面会发现每个命名空间,因此 Collector 已经可见,不需要额外标签。在未使用 discovery selectors 时添加该标签不会产生任何影响。
有关 discovery selectors 的更多信息,请参见 sidecar 模式下的 Using DiscoverySelectors,以及 ambient 模式下的 Discovery selectors in ambient mode。
更新 Istio 资源以启用 tracing 并定义 OpenTelemetry tracing provider
示例:通过 meshConfig 启用 tracing
service字段是 OpenTelemetry Collector Service 的 FQDN。默认值指向部署在jaeger-system命名空间中的 Collector,如 部署 OpenTelemetry Collector 中所述。如果你将 Collector 部署在其他命名空间,或使用了不同的实例名称,请将其替换为实际的 Collector 地址。
要应用此配置,请 patch Istio 资源:
此命令使用 JSON merge patch,它会替换整个 meshConfig.extensionProviders 数组。如果 Istio 资源已经定义了其他 extension provider,它们将被覆盖。若要保留它们,请使用 kubectl edit istio default 手动编辑该资源,并手动追加 otel 条目,或者使用会追加到 /spec/values/meshConfig/extensionProviders/- 的 JSON Patch(--type=json)。
更新 Telemetry 资源以启用在 meshConfig 中定义的 tracing provider:
Istio Telemetry 资源示例
要应用此配置,请 patch Telemetry 资源:
在确认你可以看到 trace 之后,降低 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
如果集群中的其他工作负载仍依赖 OpenTelemetry Collector 或 Jaeger v2 实例,请跳过此步骤。
有关删除 OpenTelemetry Collector 实例、Jaeger v2 实例以及(可选)Alauda Build of OpenTelemetry v2 Operator 的说明,请参见 卸载 Alauda Distributed Tracing。