链路追踪

更新时间:
2024-05-16
下载文档

链路追踪

本节主要介绍链路追踪及其相关构成的基本概念以及 Jaeger 这一分布式链路追踪系统的基本使用

基础概念

链路追踪是指在分布式系统中,将一次请求的处理过程进行记录并聚合展示的一种方法。它可以将一次分布式请求的调用情况统一集中展示,如各个服务节点上的耗时、请求具体到达哪台机器、每个服务节点的请求状态等。链路追踪的目的是为了轻松了解一个请求在系统中的完整生命周期,包括经过的服务、调用的操作以及每个操作的延迟等。

使用场景

在任务关键型云原生的环境中,大型系统通过微服务架构拆分成多个组件。每个组件承载着系统特定的业务逻辑和功能,以确保系统的高可用性和可扩展性。在这种架构下,一个业务请求可能需要在多个微服务间进行协同处理。 随着业务规模的迅速扩张和复杂性的增加,微服务间的交互和调用变得更加频繁和复杂。在任务关键型应用中,任何微小的故障或性能瓶颈都可能对业务产生重大影响。因此,任务关键型云原生架构依赖链路追踪技术。链路追踪不仅使得开发者能够迅速定位性能瓶颈和故障点,还能够帮助他们识别潜在的安全风险。通过实时监控和分析微服务间的调用链,系统可以自动触发警报、触发故障恢复机制,甚至进行自动化的系统优化。这种能力对于确保任务关键型系统的稳定性和可靠性至关重要。

重要组件

在链路追踪的典型应用场景中有三个重要组件: OTLP 、Collector、Jaeger。

  • OTLP 是一种开放标准,用于安全地传输和处理分布式跨服务的跟踪数据。在应用中需要使用 OTLP SDK 对 RPC 或 HTTP 的调用过程进行封装,确保数据的安全传输;

  • OpenTelemetry Collector(OTelCol) 又称收集器,用于收集封装 OTLP 的链路追踪信息;

  • Jaeger 等后端监控系统,又如 Zipkin 或 SkyWalking,用于分析和可视化收集到的跟踪和度量数据。

如下图所示,当一个 APP 将产生的数据进行发布的时候,先将数据通过 OTLP SDK 进行封装,由收集器 (Collector) 进行接收并发送给链路追踪系统 (Jaeger),最终通过 Jaeger 进行 UI 展示。

Jaeger 使用

本小节基于 docker 以及 VSOA 对 Jaeger 的使用作基本介绍。

docker 使用范例

  1. 执行如下命令拉取 jaeger 镜像并启动 Jaeger UI:

    docker run -d \
       --rm \
       --name jaeger \
       -p6831:6831/udp \
       -p16686:16686 \
       jaegertracing/all-in-one:latest
    
  2. 打开浏览器访问 http://<设备 IP>:16686。Jaeger UI 显示如下图:

  3. 执行样例程序

    docker run -d \
       --rm \
       --link jaeger \
       -p8080-8083:8080-8083 \
       jaegertracing/example-hotrod:latest \
       all \
       --jaeger-agent.host-port=jaeger:6831
    
  4. 打开浏览器访问 http://<设备 IP>:8080,可看到如下界面。点击任意一名乘客姓名即发送一次请求。

  5. 回到 Jaeger 界面,在 Service 中选择 frontend 并点击 Find Traces,可以得到一个跟踪数据。并点击 frontend: HTTP GET /dispatch

  6. 查看追踪数据如下图。

说明:

本小节均使用 docker 标准镜像,详情请查阅 dockerhubopen in new window

VSOA 使用范例

  1. 同上一小节利用 docker 启动 Jaeger UI。

  2. 在 SylixOS 上运行链路追踪 VSOA 客户端和服务端用例。

  3. 在 Jaeger UI 上查看结果如下图。

说明:

如果您需要获取用例或者了解更多有关在 SylixOS 上使用链路追踪的信息请联系我们open in new window

文档内容是否对您有所帮助?
有帮助
没帮助