链路追踪
本节主要介绍链路追踪及其相关构成的基本概念以及 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 使用范例
执行如下命令拉取 jaeger 镜像并启动 Jaeger UI:
docker run -d \ --rm \ --name jaeger \ -p6831:6831/udp \ -p16686:16686 \ jaegertracing/all-in-one:latest
打开浏览器访问
http://<设备 IP>:16686
。Jaeger UI 显示如下图:执行样例程序
docker run -d \ --rm \ --link jaeger \ -p8080-8083:8080-8083 \ jaegertracing/example-hotrod:latest \ all \ --jaeger-agent.host-port=jaeger:6831
打开浏览器访问
http://<设备 IP>:8080
,可看到如下界面。点击任意一名乘客姓名即发送一次请求。回到 Jaeger 界面,在 Service 中选择 frontend 并点击 Find Traces,可以得到一个跟踪数据。并点击
frontend: HTTP GET /dispatch
。查看追踪数据如下图。
说明:
本小节均使用 docker 标准镜像,详情请查阅 dockerhub。
VSOA 使用范例
同上一小节利用 docker 启动 Jaeger UI。
在 SylixOS 上运行链路追踪 VSOA 客户端和服务端用例。
在 Jaeger UI 上查看结果如下图。
说明:
如果您需要获取用例或者了解更多有关在 SylixOS 上使用链路追踪的信息请联系我们。