zoukankan      html  css  js  c++  java
  • zipkin使用mysql保存数据

    zipkin和mysql结合保存zipkin在项目监控中得到的所有数据。

              <dependency>
    			<groupId>io.zipkin.java</groupId>
    			<artifactId>zipkin-server</artifactId>
    		</dependency>
    		<!-- 我的zipkin版本是1.19.0,所以zipkin-storage-mysql也是1.19.0.前面改到版本比较高的,1.26.0就一直报错。所以版本要匹配好 -->
    		<dependency>
    			<groupId>io.zipkin.java</groupId>
    		    <artifactId>zipkin-storage-mysql</artifactId>
    		    <version>1.19.0</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    		    <artifactId>spring-boot-starter-jdbc</artifactId>
    		</dependency>
    		<!-- 这是mysql驱动,如果自己配置也行,加这个依赖也行 -->
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    		</dependency>
    

      bootstrap.yml 省略部分配置,放到配置中心也行,

    schema: classpath:/mysql.sql配置在数据库创建完以后,可以删除,不然每次都会寻找这个sql,耗费时间。
    spring:
      rabbitmq:
        host: ${RABBIT_HOST:localhost}
      datasource:
        schema: classpath:/mysql.sql
        url: jdbc:mysql://${MYSQL_HOST:localhost}/test
        username: root
        password: root
    # Switch this on to create the schema on startup:
        initialize: true
        continueOnError: true
    sleuth:
        enabled: false
    zipkin:
      storage:
        type: mysql
    

      zipkin启动类

    import javax.sql.DataSource;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.context.annotation.Bean;
    
    import zipkin.server.EnableZipkinServer;
    import zipkin.storage.mysql.MySQLStorage;
    
    @EnableDiscoveryClient
    @EnableZipkinServer
    @SpringBootApplication
    public class ZipkinService {
    
    	public static void main(String[] args) {
    		SpringApplication.run(ZipkinService.class, args);
    	}
    
    	@Bean
    	public MySQLStorage mySQLStorage(DataSource datasource) {
    		return MySQLStorage.builder().datasource(datasource).executor(Runnable::run).build();
    	}
    }
    

      mysql.sql

    CREATE TABLE IF NOT EXISTS zipkin_spans (
      `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
      `trace_id` BIGINT NOT NULL,
      `id` BIGINT NOT NULL,
      `name` VARCHAR(255) NOT NULL,
      `parent_id` BIGINT,
      `debug` BIT(1),
      `start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs query and to implement TTL',
      `duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration and maxDuration query'
    ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;
    
    ALTER TABLE zipkin_spans ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `id`) COMMENT 'ignore insert on duplicate';
    ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`, `id`) COMMENT 'for joining with zipkin_annotations';
    ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTracesByIds';
    ALTER TABLE zipkin_spans ADD INDEX(`name`) COMMENT 'for getTraces and getSpanNames';
    ALTER TABLE zipkin_spans ADD INDEX(`start_ts`) COMMENT 'for getTraces ordering and range';
    
    CREATE TABLE IF NOT EXISTS zipkin_annotations (
      `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
      `trace_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.trace_id',
      `span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',
      `a_key` VARCHAR(255) NOT NULL COMMENT 'BinaryAnnotation.key or Annotation.value if type == -1',
      `a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller than 64KB',
      `a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if Annotation',
      `a_timestamp` BIGINT COMMENT 'Used to implement TTL; Annotation.timestamp or zipkin_spans.timestamp',
      `endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is null',
      `endpoint_ipv6` BINARY(16) COMMENT 'Null when Binary/Annotation.endpoint is null, or no IPv6 address',
      `endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint is null',
      `endpoint_service_name` VARCHAR(255) COMMENT 'Null when Binary/Annotation.endpoint is null'
    ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;
    
    ALTER TABLE zipkin_annotations ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp`) COMMENT 'Ignore insert on duplicate';
    ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`, `span_id`) COMMENT 'for joining with zipkin_spans';
    ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTraces/ByIds';
    ALTER TABLE zipkin_annotations ADD INDEX(`endpoint_service_name`) COMMENT 'for getTraces and getServiceNames';
    ALTER TABLE zipkin_annotations ADD INDEX(`a_type`) COMMENT 'for getTraces';
    ALTER TABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT 'for getTraces';
    
    CREATE TABLE IF NOT EXISTS zipkin_dependencies (
      `day` DATE NOT NULL,
      `parent` VARCHAR(255) NOT NULL,
      `child` VARCHAR(255) NOT NULL,
      `call_count` BIGINT
    ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;
    
    ALTER TABLE zipkin_dependencies ADD UNIQUE KEY(`day`, `parent`, `child`);
    

      

  • 相关阅读:
    魔法阵
    求和
    罗马数字
    「NOIP2005P」循环
    【Windows批处理III】实现删除含自定字符串的文件和文件夹(搜索子目录)
    扩展欧几里得算法
    埃氏筛法(素数筛)
    python学习之argparse模块
    51Nod1364 最大字典序排列
    51Nod1537 分解
  • 原文地址:https://www.cnblogs.com/tietazhan/p/6873784.html
Copyright © 2011-2022 走看看