spring cloud sleuth 整合zipkin 把数据存储到mysql

在默认情况下,zipkin server会将跟踪信息存储在内存中,每次重启zipkin server 都会是之前收集的跟踪信息丢失。为了便于分析,我们一般将跟踪信息 放到外部存储

zipkin 的 storage组件默认提供了对mysql 的支持,所以我们可以很轻松地为zipkin-server增加mysql存储功能,

下面把代码演示一下

版本 spring boot 1.5.14

spring cloud version Edgware.SR4

注册中心

配置文件

server.port=1111
eureka.instance.hostname=localhost
#由于该应用为注册中心,所有设置为false,代表不向注册中心注册自己
eureka.client.register-with-eureka=false 
#由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

启动类

package springcloud.eurekaserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer // 注解启动一个服务注册中心
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}

pom 依赖

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

 

zipkin 服务器

先引入 zipkin-storage-mysql module,然后在该 包下 找到(zipkin\java\zipkin-storage-mysql\2.7.1\zipkin-storage-mysql-2.7.1.jar!\mysql.sql) mysql.sql 文件 ,然后运行它

mysql 版本 5.6

配置文件,对mysql 进行配置

spring.application.name=zipkin-server
server.port=9411
zipkin.storage.type=mysql
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.86.132:3306/zipkin
spring.datasource.username=root
spring.datasource.password=root

启动类

package springcloud.zipkin_server_mysql;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import zipkin.server.internal.EnableZipkinServer;
import zipkin.storage.mysql.MySQLStorage;

import javax.sql.DataSource;

@EnableZipkinServer
@SpringBootApplication
public class ZipkinServerMysqlApplication {

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

@Bean
@Primary
public MySQLStorage mySQLStorage(DataSource datasource) {
return MySQLStorage.builder().datasource(datasource).executor(Runnable::run).build();
}

}

pom 依赖

<dependencies>
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq</artifactId>
<version>3.8.0</version>
</dependency>

<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
</dependency>

<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-storage-mysql</artifactId>
<version>2.7.1</version>
</dependency>

<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

zipkin 应用一

配置文件

spring.application.name=sleuthone
server.port=9101
eureka.client.service-url.defaultZone=http://localhost:1111/eureka/

启动类

package springcloud.sleuth_one;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@EnableDiscoveryClient
@SpringBootApplication
public class SleuthOneApplication {


@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}

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

controller

package springcloud.sleuth_one;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class SleuthOneController {
private Logger logger = LoggerFactory.getLogger(getClass());

@Autowired
protected RestTemplate restTemplate;
@RequestMapping(value = "/trace-1",method = RequestMethod.GET)
public String trace(){
logger.info("=====call trace-1=======");
return restTemplate.getForEntity("http://sleuthtwo/trace-2",String.class).getBody();
}
}

pom 依赖

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

zipkin应用二

配置

spring.application.name=sleuthtwo
server.port=9102
eureka.client.service-url.defaultZone=http://localhost:1111/eureka/

启动类

package springcloud.sleuth_two;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class SleuthTwoApplication {

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

controller

package springcloud.sleuth_two;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SleuthTwoController {
private Logger logger = LoggerFactory.getLogger(getClass());
@RequestMapping(value = "/trace-2",method = RequestMethod.GET)
public String trace(){
logger.info("========<call trace-2>=======");


return "Trace";
}

}

pom 依赖

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>


<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

运行后 连续 访问 http://localhost:9101/trace-1 就可以 看到 ,mysql 出现数据

猜你喜欢

转载自blog.csdn.net/weixin_39639119/article/details/81637736