目的
部署zipkin服務(wù),配合sleuth進(jìn)行調(diào)用分析
簡介
zipkin是Twitter的開源的分布式跟蹤系統(tǒng)脸狸,基于Dapper的論文設(shè)計而來最仑。主要功能就是收集系統(tǒng)的調(diào)用數(shù)據(jù),進(jìn)行分析.論文參考http://bigbully.github.io/Dapper-translation/,其實現(xiàn)框架如下:
工具名稱 | 提供商 | 類型 | 源碼地址 |
---|---|---|---|
Zipkin | 開源 | https://github.com/openzipkin/zipkin | |
pinpoint | naver | 開源 | https://github.com/naver/pinpoint |
appdash | sourcegraph | 開源 | https://github.com/sourcegraph/appdash |
cat | 大眾點評 | 開源 | https://github.com/dianping/cat |
hydra | 京東 | 開源 | https://github.com/odenny/hydra |
鷹眼 | 阿里 | 閉源 | - |
oneAPM | oneapm | 閉源 | - |
開工
- 各系統(tǒng)添加zipkin依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
- application.yml中添加zipkin配置
spring:
Jackson:
serialization:
indent-output: true
application:
name: udm-server
zipkin:
#我本地部署的zipkin服務(wù)用的9411端口
base-url: http://localhost:9411
sleuth:
sampler:
percentage: 1.0
- 新建zipkin-dog項目module炊甲,我們將采用mysql作為數(shù)據(jù)存儲(不配置盯仪,默認(rèn)會存儲到內(nèi)存中),本次未集成mq或kafka等異步組件蜜葱,有需要后續(xù)會介紹全景,依賴添加
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>open.template.work</groupId>
<artifactId>zipkin-dog</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>zipkin-dog</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Edgware.SR2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
</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.4.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
- 更新zipkin-dog到application.yml配置文件,我用的本地mysql數(shù)據(jù)庫
server:
port: 9411
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://local.p2.cn:3306/zipkin
username: root
password: yeepay.com
zipkin:
storage:
type: mysql
- 附加步,去掉udm-client中的當(dāng)時的自定義負(fù)載均衡配置牵囤,測試發(fā)現(xiàn)配置了自定義的負(fù)載后爸黄,再集成zipkin,feign有偶爾找不到服務(wù)的bug揭鳞,所以去掉
#udm-server:
# NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
---
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "open.template.work.udm.client.feign")
@EnableHystrix
public class UdmClientApplication {
public static void main(String[] args) {
SpringApplication.run(UdmClientApplication.class, args);
}
//
// @Bean
// public IRule ribbonRoundRobinRule() {
// return new RandomRule();
// }
}
6.啟動zipkin-dog炕贵,重啟其他各相應(yīng)服務(wù),切記所有需要zipkin記錄調(diào)用鏈的服務(wù)都要添加1野崇、2步的配置
-
驗收
zipkin展示
再次重啟zipkin-dog称开,數(shù)據(jù)依然存在,查看數(shù)據(jù)庫已有請求數(shù)據(jù)乓梨,但spanid可能和日志打印不太一樣鳖轰,因為日志打印未16進(jìn)制,數(shù)據(jù)庫存儲為bigint扶镀。
- 附蕴侣,為了提高性能可以集成mq或kafka等異步組件,本章暫未展示
完工臭觉!