Jaeger链路追踪
Jaeger介绍
-
什么是链路追踪
随着微服务分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如分布式服务、分布式数据库、分布式缓存等,使得后台服务构成了一种复杂的分布式网络。在服务能力提升的同时,复杂的网络结构也使问题定位更加困难。在一个请求在经过诸多服务过程中,出现了某一个调用失败的情况,查询具体的异常由哪一个服务引起的就变得十分抓狂,问题定位和处理效率是也会非常低。
分布式链路追踪就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。
-
为什么要使用链路追踪
链路追踪为分布式应用的开发者提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等工具,可以帮助开发者快速分析和诊断分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效率。
-
Jaeger是一个端到端分布式跟踪的开源系统,可以监控复杂分布式系统中的事务并排除故障。
Jaeger案例快速体验
Docker安装Jaeger
docker run -d --name=jaeger \
-e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-p 9411:9411 \
jaegertracing/all-in-one:latest
Jaeger在spring boot下集成使用
- 添加依赖: 首先,在您的Spring Boot项目的
pom.xml
文件中添加以下依赖:
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-jaeger-cloud-starter</artifactId>
<version>VERSION_HERE</version>
</dependency>
请将VERSION_HERE
替换为适当的版本号。
- 配置应用程序: 在
application.properties
或application.yml
文件中添加Jaeger和OpenTracing的相关配置。以下是一个示例配置:
spring.application.name=your-application-name
# Jaeger Configuration
jaeger.service-name=your-service-name
jaeger.sender-type=udp
jaeger.udp-sender.host=localhost
jaeger.udp-sender.port=6831
替换your-application-name
和your-service-name
为您的应用程序和服务名称。
- 启用分布式跟踪: 在Spring Boot应用程序的入口类上添加
@EnableTracing
注解以启用分布式跟踪。(待定,好像不需要EnableTracing也行)
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import io.opentracing.contrib.spring.tracer.configuration.EnableTracing;
@SpringBootApplication
@EnableTracing
public class YourApplication {
public static void main(String[] args) {
SpringApplication.run(YourApplication.class, args);
}
}
- 编写代码: 在您的应用程序代码中,可以使用OpenTracing API来创建跟踪信息。例如:
import io.opentracing.Span;
import io.opentracing.Tracer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class YourController {
@Autowired
private Tracer tracer;
@GetMapping("/hello")
public String hello() {
Span span = tracer.buildSpan("helloSpan").start();
span.setTag("custom-tag", "hello-tag");
span.log("Hello, trace!");
span.finish();
return "Hello, world!";
}
}
在上面的代码中,通过tracer
对象创建了一个Span,并为Span添加了标签和日志。
- 启动应用程序: 启动您的Spring Boot应用程序,它将开始收集并显示与Jaeger关联的跟踪信息。
- 访问Jaeger UI: 打开浏览器,访问Jaeger UI。默认情况下,它通常位于
http://localhost:16686
。在UI中,您将能够查看应用程序的跟踪信息、依赖关系图等。
这些是一般的步骤,具体细节可能因版本、配置和需求而有所不同。请参考opentracing-spring-jaeger-cloud-starter
的文档和示例,以便更好地集成和使用Jaeger分布式跟踪。
其他类似方案
Zipkin