您的位置:首页 > 编程语言 > Java开发

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

2018-08-13 21:44 721 查看

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

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

下面把代码演示一下

 

版本 spring boot 1.5.14

spring cloud version Edgware.SR4

 

注册中心

配置文件

[code]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/

启动类

[code]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 依赖

[code]<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 进行配置

[code]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

启动类

[code]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 依赖

[code]<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 应用一

 

配置文件

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

启动类

[code]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

[code]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 依赖

[code]<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应用二

 

配置

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

启动类

[code]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

[code]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 依赖

[code]<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 出现数据

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: