Skip to content

Commit 78ee39c

Browse files
committed
分布式跟踪(入门)
1 parent d292529 commit 78ee39c

File tree

7 files changed

+333
-0
lines changed

7 files changed

+333
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
6+
<groupId>com.didispace</groupId>
7+
<artifactId>trace-1</artifactId>
8+
<version>0.0.1-SNAPSHOT</version>
9+
<packaging>jar</packaging>
10+
11+
<name>trace-1</name>
12+
<description>Demo project for Spring Boot</description>
13+
14+
<parent>
15+
<groupId>org.springframework.boot</groupId>
16+
<artifactId>spring-boot-starter-parent</artifactId>
17+
<version>1.5.10.RELEASE</version>
18+
<relativePath/> <!-- lookup parent from repository -->
19+
</parent>
20+
21+
<properties>
22+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
23+
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
24+
<java.version>1.8</java.version>
25+
</properties>
26+
27+
<dependencies>
28+
<dependency>
29+
<groupId>org.springframework.boot</groupId>
30+
<artifactId>spring-boot-starter-web</artifactId>
31+
</dependency>
32+
33+
<dependency>
34+
<groupId>org.springframework.cloud</groupId>
35+
<artifactId>spring-cloud-starter-eureka</artifactId>
36+
</dependency>
37+
38+
<dependency>
39+
<groupId>org.springframework.cloud</groupId>
40+
<artifactId>spring-cloud-starter-sleuth</artifactId>
41+
</dependency>
42+
43+
<dependency>
44+
<groupId>org.springframework.cloud</groupId>
45+
<artifactId>spring-cloud-starter-ribbon</artifactId>
46+
</dependency>
47+
48+
<dependency>
49+
<groupId>org.springframework.cloud</groupId>
50+
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
51+
</dependency>
52+
53+
<dependency>
54+
<groupId>net.logstash.logback</groupId>
55+
<artifactId>logstash-logback-encoder</artifactId>
56+
<version>4.6</version>
57+
</dependency>
58+
59+
</dependencies>
60+
61+
<dependencyManagement>
62+
<dependencies>
63+
<dependency>
64+
<groupId>org.springframework.cloud</groupId>
65+
<artifactId>spring-cloud-dependencies</artifactId>
66+
<version>Dalston.SR5</version>
67+
<type>pom</type>
68+
<scope>import</scope>
69+
</dependency>
70+
</dependencies>
71+
</dependencyManagement>
72+
73+
<build>
74+
<plugins>
75+
<plugin>
76+
<groupId>org.springframework.boot</groupId>
77+
<artifactId>spring-boot-maven-plugin</artifactId>
78+
</plugin>
79+
</plugins>
80+
</build>
81+
82+
</project>
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.didispace;
2+
3+
import org.apache.log4j.Logger;
4+
import org.springframework.boot.SpringApplication;
5+
import org.springframework.boot.autoconfigure.SpringBootApplication;
6+
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
7+
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
8+
import org.springframework.context.annotation.Bean;
9+
import org.springframework.web.bind.annotation.RequestMapping;
10+
import org.springframework.web.bind.annotation.RequestMethod;
11+
import org.springframework.web.bind.annotation.RestController;
12+
import org.springframework.web.client.RestTemplate;
13+
14+
@RestController
15+
@EnableDiscoveryClient
16+
@SpringBootApplication
17+
public class TraceApplication {
18+
19+
private final Logger logger = Logger.getLogger(getClass());
20+
21+
// @Bean
22+
// public AlwaysSampler defaultSampler() {
23+
// return new AlwaysSampler();
24+
// }
25+
26+
@Bean
27+
@LoadBalanced
28+
RestTemplate restTemplate() {
29+
return new RestTemplate();
30+
}
31+
32+
@RequestMapping(value = "/trace-1", method = RequestMethod.GET)
33+
public String trace() {
34+
logger.info("===<call trace-1>===");
35+
return restTemplate().getForEntity("http://trace-2/trace-2", String.class).getBody();
36+
}
37+
38+
public static void main(String[] args) {
39+
SpringApplication.run(TraceApplication.class, args);
40+
}
41+
42+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
spring.application.name=trace-1
2+
server.port=9101
3+
4+
eureka.client.serviceUrl.defaultZone=http://eureka.didispace.com/eureka/
5+
6+
#spring.zipkin.base-url=http://localhost:9411
7+
8+
#spring.sleuth.sampler.percentage=0.1
9+
10+
# log trace detail
11+
#logging.level.org.springframework.web.servlet.DispatcherServlet=DEBUG
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
6+
<groupId>com.didispace</groupId>
7+
<artifactId>trace-2</artifactId>
8+
<version>0.0.1-SNAPSHOT</version>
9+
<packaging>jar</packaging>
10+
11+
<name>trace-2</name>
12+
<description>Demo project for Spring Boot</description>
13+
14+
<parent>
15+
<groupId>org.springframework.boot</groupId>
16+
<artifactId>spring-boot-starter-parent</artifactId>
17+
<version>1.5.10.RELEASE</version>
18+
<relativePath/> <!-- lookup parent from repository -->
19+
</parent>
20+
21+
<properties>
22+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
23+
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
24+
<java.version>1.8</java.version>
25+
</properties>
26+
27+
<dependencies>
28+
<dependency>
29+
<groupId>org.springframework.boot</groupId>
30+
<artifactId>spring-boot-starter-web</artifactId>
31+
</dependency>
32+
33+
<dependency>
34+
<groupId>org.springframework.cloud</groupId>
35+
<artifactId>spring-cloud-starter-eureka</artifactId>
36+
</dependency>
37+
38+
<dependency>
39+
<groupId>org.springframework.cloud</groupId>
40+
<artifactId>spring-cloud-starter-ribbon</artifactId>
41+
</dependency>
42+
43+
<dependency>
44+
<groupId>org.springframework.cloud</groupId>
45+
<artifactId>spring-cloud-starter-sleuth</artifactId>
46+
</dependency>
47+
48+
<dependency>
49+
<groupId>net.logstash.logback</groupId>
50+
<artifactId>logstash-logback-encoder</artifactId>
51+
<version>4.6</version>
52+
</dependency>
53+
54+
<dependency>
55+
<groupId>org.springframework.cloud</groupId>
56+
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
57+
</dependency>
58+
59+
</dependencies>
60+
61+
<dependencyManagement>
62+
<dependencies>
63+
<dependency>
64+
<groupId>org.springframework.cloud</groupId>
65+
<artifactId>spring-cloud-dependencies</artifactId>
66+
<version>Dalston.SR5</version>
67+
<type>pom</type>
68+
<scope>import</scope>
69+
</dependency>
70+
</dependencies>
71+
</dependencyManagement>
72+
73+
<build>
74+
<plugins>
75+
<plugin>
76+
<groupId>org.springframework.boot</groupId>
77+
<artifactId>spring-boot-maven-plugin</artifactId>
78+
</plugin>
79+
</plugins>
80+
</build>
81+
82+
</project>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.didispace;
2+
3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
import org.springframework.boot.SpringApplication;
6+
import org.springframework.boot.autoconfigure.SpringBootApplication;
7+
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
8+
import org.springframework.web.bind.annotation.RequestMapping;
9+
import org.springframework.web.bind.annotation.RequestMethod;
10+
import org.springframework.web.bind.annotation.RestController;
11+
12+
import javax.servlet.http.HttpServletRequest;
13+
14+
@RestController
15+
@EnableDiscoveryClient
16+
@SpringBootApplication
17+
public class TraceApplication {
18+
19+
private final Logger logger = LoggerFactory.getLogger(getClass());
20+
21+
@RequestMapping(value = "/trace-2", method = RequestMethod.GET)
22+
public String trace(HttpServletRequest request) {
23+
logger.info("===<call trace-2, TraceId={}, SpanId={}>===",
24+
request.getHeader("X-B3-TraceId"), request.getHeader("X-B3-SpanId"));
25+
return "Trace";
26+
}
27+
28+
public static void main(String[] args) {
29+
SpringApplication.run(TraceApplication.class, args);
30+
}
31+
32+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
spring.application.name=trace-2
2+
server.port=9102
3+
4+
eureka.client.serviceUrl.defaultZone=http://eureka.didispace.com/eureka/
5+
6+
#spring.zipkin.base-url=http://localhost:9411
7+
#
8+
#spring.sleuth.sampler.percentage=0.5
9+
#
10+
## log trace detail
11+
#logging.level.org.springframework.web.servlet.DispatcherServlet=DEBUG
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<configuration>
3+
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
4+
5+
<springProperty scope="context" name="springAppName" source="spring.application.name"/>
6+
<!-- Example for logging into the build folder of your project -->
7+
<property name="LOG_FILE" value="${BUILD_FOLDER:-build}/${springAppName}"/>​
8+
9+
<property name="CONSOLE_LOG_PATTERN"
10+
value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr([${springAppName:-},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}]){yellow} %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
11+
12+
<!-- Appender to log to console -->
13+
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
14+
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
15+
<!-- Minimum logging level to be presented in the console logs-->
16+
<level>INFO</level>
17+
</filter>
18+
<encoder>
19+
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
20+
<charset>utf8</charset>
21+
</encoder>
22+
</appender>
23+
24+
<!-- Appender to log to file -->
25+
<!--<appender name="flatfile" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
26+
<!--<file>${LOG_FILE}</file>-->
27+
<!--<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
28+
<!--<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.gz</fileNamePattern>-->
29+
<!--<maxHistory>7</maxHistory>-->
30+
<!--</rollingPolicy>-->
31+
<!--<encoder>-->
32+
<!--<pattern>${CONSOLE_LOG_PATTERN}</pattern>-->
33+
<!--<charset>utf8</charset>-->
34+
<!--</encoder>-->
35+
<!--</appender>-->
36+
37+
<!-- Appender to log to file in a JSON format -->
38+
<appender name="logstash" class="ch.qos.logback.core.rolling.RollingFileAppender">
39+
<file>${LOG_FILE}.json</file>
40+
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
41+
<fileNamePattern>${LOG_FILE}.json.%d{yyyy-MM-dd}.gz</fileNamePattern>
42+
<maxHistory>7</maxHistory>
43+
</rollingPolicy>
44+
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
45+
<providers>
46+
<timestamp>
47+
<timeZone>UTC</timeZone>
48+
</timestamp>
49+
<pattern>
50+
<pattern>
51+
{
52+
"severity": "%level",
53+
"service": "${springAppName:-}",
54+
"trace": "%X{X-B3-TraceId:-}",
55+
"span": "%X{X-B3-SpanId:-}",
56+
"exportable": "%X{X-Span-Export:-}",
57+
"pid": "${PID:-}",
58+
"thread": "%thread",
59+
"class": "%logger{40}",
60+
"rest": "%message"
61+
}
62+
</pattern>
63+
</pattern>
64+
</providers>
65+
</encoder>
66+
</appender>
67+
68+
<root level="INFO">
69+
<appender-ref ref="console"/>
70+
<appender-ref ref="logstash"/>
71+
<!--<appender-ref ref="flatfile"/>-->
72+
</root>
73+
</configuration>

0 commit comments

Comments
 (0)