分布式追踪与服务网格
目录
构建支持追踪上下文传播的应用程序
虽然 Istio 代理可以自动发送 span,但需要额外的信息将这些 span 关联成单个追踪。应用程序必须在 HTTP 头中传播这些信息,以便代理发送 span 时,后端能够将它们合并成一个完整的追踪。
为此,每个应用程序必须收集每个传入请求的头信息,并将这些头信息转发到该传入请求触发的所有传出请求。要转发的头信息取决于配置的追踪后端。以下是总结:
所有应用程序都应转发以下头信息:
x-request-id:Envoy 特定的头,用于一致地采样日志和追踪。traceparent和tracestate:W3C 标准头
对于其他可观测性工具,请参考其文档。
使用服务网格配置分布式追踪平台
Alauda Service Mesh 通过集成以下组件支持分布式追踪:
-
Alauda Build of Jaeger:基于开源 Jaeger 项目的定制发行版。它提供对复杂分布式系统中请求的端到端可视化。
-
Alauda Build of OpenTelemetry:基于 OpenTelemetry 项目,该组件通过管理 OpenTelemetry Collector 和工作负载的自动化采集,简化了指标、日志和追踪的遥测数据收集。
OpenTelemetry Collector 作为遥测信号的中间层,支持多种数据格式,并提供标准化的管道,用于处理和导出遥测数据到如 Jaeger 等后端。
使用服务网格配置分布式追踪数据采集
您可以将 Alauda Service Mesh 与 OpenTelemetry 集成,以实现对 OpenTelemetry 追踪、指标和日志的自动化采集、生成、收集和导出,从而分析和理解软件的性能和行为。
前提条件
- 。
- 。
- 已创建 Istio 实例。
- 已创建 Istio CNI 实例。
操作步骤
在 istio-system 命名空间安装一个 Jaeger 实例。
参考 中的安装脚本,使用下面示例命令部署 Istio 专用的 Jaeger:
--jaeger-es-index-prefix 参数设置 Elasticsearch 中存储追踪数据的索引前缀。
- 对于单集群服务网格,建议索引前缀以集群名称结尾,例如
istio-tracing-cluster-1。 - 对于多集群服务网格,所有集群的追踪必须存储在同一个索引中,建议索引前缀以 meshID 结尾,例如
istio-tracing-mesh-1。
安装成功后,您可以通过 <platform-url>/clusters/<cluster>/istio/jaeger 访问 Jaeger UI 查询追踪。
在 OperatorHub 中找到 Alauda Build of OpenTelemetry,并在 istio-system 命名空间创建 OpenTelemetryCollector。
istio-system 命名空间中的 OpenTelemetry Collector 示例
endpoint字段指向istio-system命名空间中的Jaegercollector 服务。
更新 Istio 资源以启用追踪并定义 OpenTelemetry 追踪提供者:
示例:通过 meshConfig 启用追踪
service字段指向istio-system命名空间中的OpenTelemetrycollector 服务。
更新 Telemetry 资源以启用在 meshConfig 中定义的追踪提供者:
Istio Telemetry 资源示例
确认可以看到追踪后,请降低 randomSamplingPercentage 的值以减少请求数量。