04 分布式追踪
分布式追踪是 Service Mesh 中实现可观测性的重要组成部分之一,是一种用于对应用程序进行概要分析和监视的方法,尤其是针对使用微服务架构构建的应用程序。在微服务架构中,服务之间的通信是通过网络进行的,因此需要采用分布式追踪技术来对服务之间的调用关系进行跟踪和监控。在 Istio 中,可以使用 Jaeger、Zipkin 等分布式追踪工具来实现这个功能。在分布式追踪里,存在 Trace 和 Span 两个重要概念:
- Span:分布式追踪的基本组成单元,表示一个分布式系统中的单独的工作单元,每一个 Span 可以包含其它 Span 的引用。多个 Span 在一起构成了 Trace。
- Trace:微服务中记录的完整的请求执行过程,一个完整的 Trace 由一个或多个 Span 组成。
虽然 Istio 代理能够自动发送 Span 信息,但是应用程序仍然需要传播适当的 HTTP 标头,以便在代理发送 Span 时,可以将 Span 正确地关联到单个跟踪中。为此,应用程序需要收集以下标头并将其从传入请求传播到任何传出请求:
- x-request-id
- x-b3-traceid
- x-b3-spanid
- x-b3-parentspanid
- x-b3-sampled
- x-b3-flags
- x-ot-span-context
追踪数据生成规则配置
基于 Telemetry CRD,阿里云服务网格 ASM 提供了如下图所示的图形化界面,简化用户定义分布式链路追踪数据的生成规则配置。
对应地, 生成的定义内容如下:
tracing: - customTags: mytag1: literal: value: fixedvalue mytag2: header: defaultValue: value1 name: myheader1 mytag3: environment: defaultValue: value1 name: myenv1 providers: - name: zipkin randomSamplingPercentage: 90
追踪采集配置
需要将采集到的数据发送到云托管服务或者自建服务中。在云托管服务中,可以使用云原生应用管理服务来实现数据的收集和分析。
在自建服务中,可以使用开源的数据收集和分析工具(如 Zipkin、Jaeger 等)来实现数据的收集和分析。
05 总结
在 Service Mesh 中,不同的服务可能需要采集不同的可观测性数据,因此需要支持针对网格代理与网关 Pod 分别定义采集配置规则,并统一标准化采集配置规则,以便更好地支持云原生应用的可观测性。
总的来说,可观测性在云原生应用中扮演着非常重要的角色,它可以帮助我们实时监控服务的运行情况和性能指标,发现并解决服务故障和瓶颈,从而提高应用的可靠性和性能。因此,借助于 Service Mesh 的无侵入式可观测性的实现,基于标准的统一化的可观测数据生成与采集配置,一定可以更好地支持云原生应用的发展。