赞
踩
Spring Cloud Sleuth是Spring Cloud提供的一套完整的用于分布式系统中服务跟踪解决方案,常用于微服务项目的实时监控和快速定位错误异常
Span(跨度):链路跟踪的基本工作单元,通过一个64位的ID来唯一标识,包含摘要、时间戳事件、关键值注释和进度ID
Trace(跟踪):一系列Span组成一个树状结构,即一个Trace,通过一个64位的ID来唯一标识
Annotation(标注):用于及时记录一个事件
Zipkin用于提供链路追踪的可视化功能,其实现原理是,在服务调用的请求和响应中加入ID,表明上下游请求的关系,利用这些信息,可以可视化地分析服务调用链路和服务间的依赖关系
只需要从官网下载jar运行即可,浏览器地址栏输入https://zipkin.io/pages/quickstart
下载后,直接使用命令java -jar运行jia包即可
在浏览器输入地址http://localhost:9411/zipkin/
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
spring-cloud-starter-zipkin依赖包中已经包含了spring-cloud-starter-sleuth
server: port: 8841 spring: zipkin: enabled: true base-url: http://localhost:9411 sleuth: sampler: probability: 0 #采样率0~1;1表示全部采集 eureka: client: fetch-registry: true register-with-eureka: true service-url: defaultZone: http://localhost:8761/eureka instance: prefer-ip-address: true lease-renewal-interval-in-seconds: 30 #心跳间隔时间 lease-expiration-duration-in-seconds: 90 #超时剔除时间 ip-address: ${spring.cloud.client.ip-address} #实例IP地址 instance-id: ${spring.cloud.client.ip-address}:${server.port}
如果需要在日志中打印出服务名称,需要将服务名称配置在bootstrap.yml文件中
spring:
application:
name: cloud-zipkin-provider
<?xml version="1.0" encoding="UTF-8" ?> <configuration> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <springProperty scope="context" name="springAppName" source="spring.application.name"/> <!-- Example for logging into the build folder of your project --> <property name="LOG_FILE" value="${BUILD_FOLDER:-build}/${springAppName}"/> <!-- You can override this to have a custom pattern --> <property name="CONSOLE_LOG_PATTERN" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(%X{traceId:-}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/> <!-- Appender to log to console --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <!-- Minimum logging level to be presented in the console logs--> <level>DEBUG</level> </filter> <encoder> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender> <!-- Appender to log to file --> <appender name="flatfile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_FILE}</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.gz</fileNamePattern> <maxHistory>7</maxHistory> </rollingPolicy> <encoder> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender> <root level="INFO"> <appender-ref ref="console"/> <!--<appender-ref ref="flatfile"/>--> </root> </configuration>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>
server:
port: 8842
spring:
zipkin:
enabled: true
base-url: http://localhost:9411
sleuth:
sampler:
probability: 1
eureka:
client:
register-with-eureka: false
service-url:
defaultZone: http://localhost:8761/eureka
同样也需要在bootstrap.yml文件中配置服务名称
spring:
application:
name: cloud-zipkin-consumer
日志文件logback-spring.xml内容见上面生产类
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
}
@RestController @RequestMapping("/zipkin") public class ZipkinController { private static final Logger logger = LoggerFactory.getLogger(ZipkinController.class); @Autowired private RestTemplate restTemplate; @GetMapping("/getConsumerInfo") public String getZipkinConsumerInfo() { String result = restTemplate.getForObject("http://cloud-zipkin-provider/zipkin/getProviderInfo", String.class); logger.info("This is zipkin consumer info... The provider info is {}", result); return "Hello, This is zipkin consumer info, The provider info is " + result; } }
异常启动Eureka Server、zipkin-provider和zipkin-consumer三个微服务,浏览器地址栏输入http://localhost:8842/zipkin/getConsumerInfo访问消费者接口,查看zipkin控制台
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。