ZipKin HTTP服务跟踪

项目结构:ZipKin HTTP服务跟踪_第1张图片

POM.xml



	4.0.0

	com.example
	demo
	0.0.1-SNAPSHOT
	jar

	demo
	Demo project for Spring Boot

	
		org.springframework.boot
		spring-boot-starter-parent
		2.0.1.RELEASE
		 
	
 
	
		UTF-8
		UTF-8
		1.8
		8.1.20.v20160902  
	    3.16.0  
	    0.6.9  
	

	
		
		
		
			org.springframework.boot
			spring-boot-starter-web
		
		
            org.springframework.boot
            spring-boot-starter-aop
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        

		
			mysql
			mysql-connector-java
			runtime
		
		
			org.springframework.boot
			spring-boot-starter-test
			test
		
		
		  
	        io.zipkin.brave  
	        brave-core-spring  
	        ${brave.version}  
	      
	      
	      io.zipkin.reporter  
	      zipkin-sender-okhttp3  
	      ${zipkin-reporter.version}  
	      
	      
	      io.zipkin.reporter  
	      zipkin-sender-libthrift  
	      ${zipkin-reporter.version}  
	      
	      
	      io.zipkin.reporter  
	      zipkin-sender-kafka08  
	      ${zipkin-reporter.version}  
	      
	      
	        io.zipkin.brave  
	        brave-spring-web-servlet-interceptor  
	        ${brave.version}  
	      
	      
	      io.zipkin.brave  
	      brave-spring-resttemplate-interceptors  
	      ${brave.version}  
	    
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	


相关代码:

package com.example.demo;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import zipkin.Span;
import zipkin.reporter.AsyncReporter;
import zipkin.reporter.Reporter;
import zipkin.reporter.Sender;
import zipkin.reporter.okhttp3.OkHttpSender;

import com.github.kristofa.brave.Brave;
import com.github.kristofa.brave.http.DefaultSpanNameProvider;
import com.github.kristofa.brave.http.SpanNameProvider;
import com.github.kristofa.brave.spring.BraveClientHttpRequestInterceptor;
import com.github.kristofa.brave.spring.ServletHandlerInterceptor;

/**
 * 服务配置
 * @author gaosiling
 *
 */
@Configuration
@Import({ BraveClientHttpRequestInterceptor.class,
		ServletHandlerInterceptor.class })
public class WebTracingConfiguration extends WebMvcConfigurerAdapter {

	/** 发送器配置 */
	@Bean
	Sender sender() {
		return OkHttpSender.create("http://127.0.0.1:9411/api/v1/spans");
		// return LibthriftSender.create("127.0.0.1");
		// return KafkaSender.create("127.0.0.1:9092");
	}

	/** 用什么方式显示span信息 */
	@Bean
	Reporter reporter() {
		// 取消注释,日志打印span信息
		// return new LoggingReporter();

		return AsyncReporter.builder(sender()).build();
	}

	@Bean
	Brave brave() {
		return new Brave.Builder("brave-webmvc").reporter(reporter())
				.build();
	}

	// span命名提供者,默认为http方法.
	@Bean
	SpanNameProvider spanNameProvider() {
		return new DefaultSpanNameProvider();
	}

	@Autowired
	private ServletHandlerInterceptor serverInterceptor;

	@Autowired
	private BraveClientHttpRequestInterceptor clientInterceptor;

	@Autowired
	private RestTemplate restTemplate;

	// 添加rest template拦截器
	@PostConstruct
	public void init() {
		List interceptors = new ArrayList(
				restTemplate.getInterceptors());
		interceptors.add(clientInterceptor);
		restTemplate.setInterceptors(interceptors);
	}

	// 添加Severlet拦截器
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(serverInterceptor);
	}
}

package com.example.demo;

import java.util.Random;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RestController;  
import org.springframework.web.client.RestTemplate;  
import org.springframework.web.servlet.config.annotation.EnableWebMvc;  
  
  
@RestController  
@EnableWebMvc  
@Configuration  
public class ExampleController {  
  
  
  @Bean RestTemplate template() {  
    return new RestTemplate();  
  }  
  
  
  @Autowired RestTemplate template;  
  
  
  @RequestMapping("/brave-webmvc/a")  
  public String a() throws InterruptedException {  
    Random random = new Random();  
    Thread.sleep(random.nextInt(1000));  
  
  
    return template.getForObject("http://localhost:8080/brave-webmvc/b", String.class);  
  }  
  
  
  @RequestMapping("/brave-webmvc/b")  
  public String b() throws InterruptedException {  
  
  
    Random random = new Random();  
    Thread.sleep(random.nextInt(1000));  
  
  
    return "b";  
  }  
}
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}

}

Zipkin监控信息:

ZipKin HTTP服务跟踪_第2张图片


你可能感兴趣的:(ZipKin HTTP服务跟踪)