美文网首页
服务内链路追踪实践

服务内链路追踪实践

作者: robot_test_boy | 来源:发表于2022-11-07 00:03 被阅读0次
搭建链路追踪基础设施

为了能够展示链路追踪信息并将不同服务问的请求关联起来,需要为链路追踪搭建一套收集器和一个界面,同时还需要引入一些类库并将其配置到服务中。为了展示分布式链路追踪功能,将使用SimpleBank的profile服务和setting服务作为服务示例。

profile服务会调用一个外部服务的url http://ip.jsontest.com以检索IP信息,并且会从setting服务中获取用户设置的信息。将搭建一套链路追踪系统(Jaeger)并修改一些必要的代码来展示trace与span,并将这些span关联起来。将这些span关联起来能够帮助了解在profile服务的一次调用中每个操作的耗时及其相对整体执行时间的占比。

将Jaeger添加到docker-compose.yml文件

(…)

jaeger:

    container_name: jaeger

    image: jaegertracing/all-in-one:latest --- 使用包含所有必需组件的Jaeger镜像,因为它更加易于安装和配置。这个all-in-one镜像使用内存来存储span数据

    ports:

      - 5775:5775/udp ---传输span数据的端口

      - 6831:6831/udp

      - 6832:6832/udp

      - 5778:5778

      - 16686:16686---  访问Jaeger界面的端口

      - 14268:14268

      - 9411:9411 ---  另一款分布式链路追踪系统Zipkin所使用的端口——OpenTracing的一个优点是在不修改所有实现的情况下可使用另一套系统,否则会被绑定在特定的系统上

    environment:

      COLLECTOR_ZIPKIN_HTTP_PORT: "9411"

借助添加到docker-compose文件中的Docker镜像,在启动完所有SimpleBank基础设施后,也就拥有了一套分布式链路追踪系统。

现在需要确定SimpleBank的profile服务和setting服务都能够创建trace和span并将其传输到Jaeger服务。向setting服务和profile服务添加一些必要的类库并初始化链路追踪器。

SimpleBank的profile服务初始化了一个trace,这个trace会将不同的span组合起来。它分别为对http://ip.jsontest.com/调用以及对SimpleBank的settings服务调用创建span。

在从settings服务接收到的请求中提取出span上下文后,可以将其作为新创建的span的父span。将新创建的子span独立地进行可视化显示。但是也能够利用Jaeger,它能将该span作为SimpleBank settings服务上下文中独立的span来展示,也可作为profile服务上下文中的子span来展示。

链路追踪系统可视化

当请求到达profile端点时发生了什么。

1)profile服务创造了一个span A。

2)profile服务与外部服务交互以获取IP,并将其包装在一个新的span B中。

3)profile服务在新建的span C中与内部的SimpleBank settings服务交互以获取用户信息,并将父span的上下文传递给下游服务。

4)两个服务将span信息传递至Jaeger服务。

为了将追踪可视化,需要访问运行在16686端口的Jaeger界面。

在Service部分,可以看到有3个服务拥有追踪数据:2个SimpleBank服务还有1个被称为jaeger-query的服务。profile服务为执行外部服务调用和settings服务调用分别创建了span。在网页上选择simplebank-profile服务,单击底部的Find Traces按钮。下图展示了profile服务的链路追踪。

顶部导航菜单栏有一个Dependencies链接。单击该链接,然后在出现的页面中选择DAG(Direct Acyclic Graph)选项卡。

示例很简单,我想在业务触发的开始添加一个功能的job id(父 span id),当流程走到每个服务生成span(子 span id)时添加job id。只要涉及异步消息处理,可以生成孙子 span。这样子最终生成整个DAG图时更真实反馈请求流走向。

摘取自 摩根·布鲁斯和保罗·A.佩雷拉的《微服务实战》

相关文章

  • 服务内链路追踪实践

    搭建链路追踪基础设施 为了能够展示链路追踪信息并将不同服务问的请求关联起来,需要为链路追踪搭建一套收集器和一个界面...

  • go-kit 微服务 服务链路追踪(jaeger 实现)(2)

    go-kit 微服务 服务链路追踪(jaeger 实现)(2) 《go-kit 微服务 服务链路追踪(jaeger...

  • 分布式链路追踪实践(一) - 分布式链路追踪方案对比

    分布式链路追踪(全链路追踪)是分布式系统或者微服务架构中服务监控、性能优化的有效手段。分布式链路追踪有 Jaege...

  • Kubernetes深度实践(七)

    CICD搭建完成之后又迎来新的问题,链路追踪、日志、监控告警、在线调试、服务更新策略,先从链路追踪说起。 链路追踪...

  • 14. SpringCloud之Sleuth+Zipkin链路追

    1、链路追踪简介 其实链路追踪就是日志追踪,微服务下日志跟踪,微服务系统之间的调用变得非常复杂,往往一个功能的调用...

  • Spring Cloud进阶

    分布式链路追踪 场景 动态展示服务调用链路 分析服务调用链路的瓶颈 服务链路故障发现 核心思想 本质: 记录日志 ...

  • 12.Spring Cloud Alibaba 链路追踪

    1. 链路追踪概述 什么是链路追踪 微服务架构是通过业务来划分服务的,使用 REST 调用。对外暴露的一个接口,可...

  • 服务链路追踪

    一、简介 微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众...

  • 服务链路追踪

    学习完整课程请移步 互联网 Java 全栈工程师 本节视频 【视频】微服务框架-SpringCloud-服务链路追...

  • Spring Cloud Sleuth服务链路追踪(mysql存

    在Spring Cloud Sleuth服务链路追踪(Finchley版本)中,我们使用Spring Cloud ...

网友评论

      本文标题:服务内链路追踪实践

      本文链接:https://www.haomeiwen.com/subject/qpevtdtx.html