spring cloud 学习(8) - sleuth & zipkin 调用链跟踪

业务复杂的微服务架构中,往往服务之间的调用关系比较难梳理,一次http请求中,可能涉及到多个服务的调用(eg: service A -> service B -> service C...),如果想分析各服务间的调用关系,以及各服务的响应耗时,找出有性能瓶颈的服务,这时zipkin就派上用场,它是Twitter公司开源的一个tracing系统,官网地址为: http://zipkin.io/ , spring cloud可以跟它无疑集成。

使用步骤:

一、微服务方

1.1 添加依赖jar包

    compile 'org.springframework.cloud:spring-cloud-starter-bus-kafka'
    compile 'org.springframework.cloud:spring-cloud-starter-sleuth'
    compile 'org.springframework.cloud:spring-cloud-sleuth-stream'  

注:为了实现tracing数据埋点与采集的解耦,spring cloud引入了message bus(消息总线)的概念,微服务无需关心tracing系统在哪,长什么样,只要向bus总线上扔消息就行,所以引入了bus-kafka以及sleuth-stream。

1.2 application.yml配置

spring:
  ...
  cloud:
    bus:
      enabled: true
    stream:
      default-binder: kafka
      kafka:
        binder:
          brokers: 10.0.1.2,10.0.1.3,10.0.1.4 //kafaka的服务器集群列表
          zkNodes: 10.0.1.5,10.0.1.6,10.0.1.7 //zk的服务器集群列表
          defaultZkPort: 2181 //zk的端口
          defaultBrokerPort: 9092 //kafka的broker端口
  ...
  sleuth:
    sampler:
      percentage: 0.2 //采样率 0.2为20%  

上面2项配置好就行了,代码不用任何修改,真正的代码零侵入

二、zipkin-server

zipkin从kafka上接收过来数据后,有4种保存方式:in-memory(保存在内存中)、mysql、cassandra、elasticsearch

个人开发调试的话,推荐用in-memory模式,其它环境不要使用!(注:因为随着收集的数据越来越多,都放在内存中 很容易造成OOM)

2.1 mysql 存储

2.1.1 主要jar包依赖

dependencies {
    ... 关键是下面几个
    compile 'org.springframework.cloud:spring-cloud-starter-sleuth'
    compile 'org.springframework.cloud:spring-cloud-sleuth-zipkin-stream'
    compile 'org.springframework.cloud:spring-cloud-starter-bus-kafka'
    compile 'io.zipkin.java:zipkin-server'
    compile 'io.zipkin.java:zipkin-autoconfigure-ui'
    compile 'io.zipkin.java:zipkin-autoconfigure-storage-mysql' #mysql的存储

    ... 下面几个是spring-boot/cloud的常规项
    compile 'org.springframework.boot:spring-boot-starter-actuator'
    compile 'org.springframework.boot:spring-boot-starter-web'
    compile 'org.springframework.boot:spring-boot-starter-security'
    compile 'log4j:log4j:1.2.17' //zipkin的storage jar包,依赖低版本的log4j
    compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.8.2'
    compile 'mysql:mysql-connector-java:6.0.5'   
}

2.1.2 application.yml配置

spring:
  application:
    name: zipkin-server
  datasource: //指定mysql数据源
    schema: classpath:/mysql.sql
    url: jdbc:mysql://192.168.1.2:3306/zipkin?autoReconnect=true&useSSL=false
    username: root
    password: ***
    driver-class-name: com.mysql.cj.jdbc.Driver
    initialize: true
    continue-on-error: true
  sleuth:
    enabled: false
  cloud:
    bus:
      enabled: true
    ...
    stream:
      default-binder: kafka
      kafka:
        binder:
          brokers: ${kafka.brokers}
          zkNodes: ${kafka.zkNodes}
          defaultZkPort: ${kafka.zkPort}
          defaultBrokerPort: ${kafka.brokerPort}

zipkin:
  storage:
    type: mysql //配置成mysql存储

2.1.3 main入口代码

@SpringBootApplication(exclude = { 
        MybatisAutoConfiguration.class,
        RedisAutoConfiguration.class,
        RedisRepositoriesAutoConfiguration.class})
@EnableZipkinStreamServer
public class ZipkinServer {

    public static void main(String[] args) {
        SpringApplication.run(ZipkinServer.class, args);
    }
}

 注:如果你的项目中依赖了redis,mybatis等其它包,可以参考上面的写法,排除掉这些自动配置,否则的话,不用加那一堆exclude。

2.2 cassandra

2.2.1 依赖jar包

注:cassandra和elasticsearch下,可能会遇到zipkin中的dependencies面板无数据,详情见github上的讨论:https://github.com/openzipkin/zipkin-dependencies/issues/22

    compile 'org.springframework.boot:spring-boot-starter-data-cassandra'
    compile('io.zipkin.java:zipkin-autoconfigure-storage-cassandra3:1.29.3') {
        exclude group: "com.datastax.cassandra", module: "cassandra-driver-core"
    }
    compile 'com.datastax.cassandra:cassandra-driver-core:3.1.1'
    compile 'com.datastax.cassandra:cassandra-driver-mapping:3.1.1'

2.2.2 application.yml

spring:
  data:
    cassandra:
      contact-points: localhost
      port: 9042
      keyspace-name: zipkin3
  ...

zipkin:
  storage:
    type: cassandra3

2.3 elasticsearch

2.3.1 依赖jar包

compile 'io.zipkin.dependencies:zipkin-dependencies-elasticsearch:1.7.2'
compile 'io.zipkin.java:zipkin-autoconfigure-storage-elasticsearch-http:1.29.2'

2.3.2 application.yml

zipkin:
  storage:
    type: elasticsearch
    elasticsearch:
      cluster: elasticsearch
      hosts: http://localhost:9200
      index: zipkin
      index-shards: 5
      index-replicas: 1

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在CentOS 7上使用OTRS设置帮助台系统

OTRS是一个开源的票证请求系统。它为用户,客户,IT人员,IT服务和任何外部组织提供单点联系。该程序是用Perl编写的,支持各种数据库(MySQL,Postg...

9334
来自专栏IMWeb前端团队

Nativescript跨终端应用程序开发方案研究

1.环境准备 安装nodejs 安装nativescript $npm install -g nativescript 或者下载github上项目代码进行构建(...

2635
来自专栏腾讯移动品质中心TMQ的专栏

JAVA代码覆盖率工具JaCoCo-实践篇

上周 JAVA代码覆盖率工具JaCoCo-原理篇 简单介绍了JaCoCo其生成覆盖率的基本原理,这周的实践篇的主要内容就是将原理应用到实践中,本篇内容全部都是具...

9899
来自专栏Python攻城狮

Django教程(一)- Django视图与网址1.简介2.环境搭建3.安装pycharm4.Ubuntu下 正确安装VMware Tools5.Django主要模块6.Django基本命令7. Dj

Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站!

1552
来自专栏FreeBuf

小米范系列渗透测试工具介绍

*本文原创作者:shentouceshi,本文属FreeBuf原创奖励计划,未经许可禁止转载 为了提高工作效率,最近写了几款渗透测试类的工具,在这里给大家分享一...

3655
来自专栏PHP实战技术

一个查看框架源码,一个查找错误的小工具,你用了吗?

日常开发中还在一直var_dump?exit()?,是不是很不便捷,很不方便?今天小梦就给大家讲讲在PHP开发中(划重点:PHP开发,当然其他语言开发也是有类似...

1514
来自专栏从流域到海域

在CentOS 7上安装Magento

在这篇教程中,您将学习如何在CentOS 7上安装Magent。Magento Community Edition(CE,即社区版)是一个免费的开源电子商务平台...

6506
来自专栏数据和云

1024 程序员节:给 DBA 们的福音

通过 rpm 安装包,支持 yum 安装,这基本上将单实例的企业版数据库安装简化为一条命令:

1672
来自专栏dotnet & java

这可能是最low的发布dotnet core站点到centos7教程

不得不说:我在chrome上写了好长一段,贴了23张图,然后一个crash。。我想说我电脑上的chrome已经crash太多次了 以后一定要搞离线编辑的。

923
来自专栏慎独

如何在Github上给别人的项目贡献代码

1404

扫码关注云+社区

领取腾讯云代金券