背景
- 最近在使用opentracing来监控整个系统服务的调用链路。
- 本文的前提是假设就已经部署好了jaeger服务(这个服务用docker部署是比较简单的)。
- 最后配置mongo访问调用上报,需要在每个mongo client中注册上对应的listener对象,此举相对入侵性较中, 因此只在压测的时候使用!
代码
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-web-autoconfigure</artifactId>
<version>0.0.4</version>
</dependency>
<dependency>
<groupId>com.uber.jaeger</groupId>
<artifactId>jaeger-core</artifactId>
<version>0.18.0</version>
</dependency>
- service配置。在项目的service类注册opentracing的bean即可。
//opentracing服务端ip
@Value("${opentracing.report.host}")
private String agentHost;
//opentracing服务端port
@Value("${opentracing.report.port}")
private Integer agentPort;
//采样率(0.01表示只采集1%)
@Value("${opentracing.sampler.percent}")
private double percent;
@Bean
public io.opentracing.Tracer jaegerTracer() {
//1000表示队列的长度
Configuration.ReporterConfiguration reporterConfiguration = new Configuration.ReporterConfiguration(null, agentHost, agentPort, null, 1000);
//spring-boot是显示在jaeger上的应用名字
return new Configuration("spring-boot", new Configuration.SamplerConfiguration(ProbabilisticSampler.TYPE, percent),
reporterConfiguration).getTracer();
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@RequestMapping("/tracing")
public String tracing() throws InterruptedException {
Thread.sleep(100);
return "tracing";
}
@RequestMapping("/open")
public String open() throws InterruptedException {
String url = "http://localhost:8080/demo/tracing";
ResponseEntity<String> response =
restTemplate.getForEntity(url, String.class);
Thread.sleep(200);
return "open " + response.getBody();
}
网友评论