Istio的分布式追踪Jaeger

本文介绍了在微服务架构下,分布式追踪的重要性,特别是针对Istio环境中,Jaeger作为分布式追踪系统如何运作。Jaeger是Uber开源的系统,它记录完整的请求执行过程,通过Envoy Sidecar收集并上报追踪信息。文章详细阐述了Jaeger的主要组件,包括Client、Agent、Collector、Database和Query UI,并提供了运行Jaeger及查看链路跟踪、服务依赖和请求差异的步骤。

一、认识分布式追踪
  相比传统的"巨石"应用,微服务的一个主要变化是将应用中的不同模块拆分为了独立的进程。在微服务架构下,原来进程内的方法调用成为了跨进程的远程方法调用。相对于单一进程内的方法调用而言,跨进程调用的调试和故障分析是非常困难的,难以适应传统的代码调试程序或者日志打印来对分布式的调用过程进行查看和分析。
  在这里插入图片描述
  如上图右边所示,微服务架构中系统各个微服务之间存在复杂的调用关系。一个来自客户端的请求在其业务处理中经过了多个微服务进程。我们如果想要对该请求的端到端调用过程进行完整的分析,则必须将该请求经过的所有进程的相关信息都收集起来并关联在一起,这就是"分布式追踪"。

二、认识Jaeger
  Jaeger是由Uber开源的分布式追踪系统,它采用Go语言编写,主要借鉴了Google Dapper论文和Zipkin的设计,兼容OpenTracing以及Zipkin追踪格式,目前已经成为CNCF基金会的开源项目。
  Jaeger的相关术语:
  Span:是Jaeger的逻辑工作单元,具有请求名称、请求开始时间、请求持续时间。Span会被嵌套并排序以展示服务间的关系。
  在这里插入图片描述
  Trace:是Jaeger在微服务系统中记录的完整的请求执行过程,并显示为Trace,Trace是系统的数据/执行路径,一个端到端的Trace由一个或者多个Span组成。
  Envoy原生支持Jaeger,追踪所需x-b3开头的Header和x-request-id在不同的服务之间由业务逻辑进行传递,并由Envoy上报给Jaeger,最终Jaeger生成完整的追踪信息。
  在Istio中,Envoy和Jaeger的关系如下:
  在这里插入图片描述
  图中Front Envoy是指第一个接收到请求的Envoy Sidecar,它会负责创建Root Span并追加到请求Header内,请求到达不同的服务时,Envoy Sidecar会将追踪信息进行上报处理。
  Jaeger的内部组件与ELK日志系统架构有一定的相似性:
  在这里插入图片描述
  Jaeger主要由以下几个组件构成:
  Client:Jaeger客户端,是OpenTracing API的具体语言实现,可以为各种开源框架提供分布式追踪工具。
  Agent:监听在UDP端口的守护进程,以DaemonSet的方式部署在宿主机或以Sidecar方式注入容器内,屏蔽了Client和Collector之间的细节以及服务发现。用于接收Client发送过来的追踪数据,并将数据批量发送至Collector。
  Collector:用来接收Agent发送的数据,验证追踪数据,并建立索引,最后异步地写入到后端存储,Collector是无状态的。
  DataBase:后端存储组件,支持内存、Cassandra、Elasticsearch、Kafka的存储方式
  Query:用于接收查询请求,从数据库检索并通过UI展示
  UI:使用React编写,用于UI界面展示

三、运行Jaeger
1)运行Jaeger

➜  ~ istioctl dashboard jaeger       
http://localhost:16686

在这里插入图片描述

2)查看链路跟踪数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3)查看服务依赖
在这里插入图片描述

4)对比不同请求的差异
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值