Springcloud 集成Zipkin 实现链路追踪

Zipkin

zipkin是Twitter的一个开源项目,它基于Google Dapper实现。我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的REST API接口来辅助我们查询跟踪数据以实现对分布式系统的监控程序,从而及时地发现系统中出现的延迟升高问题并找出系统性能瓶颈的根源。除了面向开发的API接口之外,它也提供了方便的UI组件来帮助我们直观的搜索跟踪信息和分析请求链路明细,比如:可以查询某段时间内各用户请求的处理时间等。(转)

简而言之:可以记录服务的实际调用情况,展示服务的状态。能够帮助我们分析服务的具体调用情况,为维护工作带来一定帮助。

建立Zipkin服务

使用docker直接建立Zipkin服务,很快就能启用。
但是先要了解,Zipkin服务默认提供三种存储数据的方式
1、内存方式:数据就在内存中。重启了Zipkin服务,数据自然就没了。
2、数据库方式:配置数据库存储数据
3、elasticsearch存储

我这边选择了elasticsearch,鉴于其使用方便和检索快的优势。
所以在此之前准备好一个elasticsearch的环境。
在这里插入图片描述
我这里已经准备好了这个环境
附上我的构建:

version: '3'
services:
  es:
    image: docker.io/elasticsearch:7.6.1
    privileged: true
    environment:
      - SET_CONTAINER_TIMEZONE=true
      - CONTAINER_TIMEZONE=Asia/Shanghai
    volumes:
      - /usr/local/workspace/elasticsearch/plugin:/usr/share/elasticsearch/plugins
      - /usr/local/workspace/elasticsearch/data:/usr/share/elasticsearch/data
      - /usr/local/workspace/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    container_name: es
    ports:
      - "9200:9200"
      - "9300:9300"
    networks:
      - custom_net
  es-head:
    image: docker.io/tobias74/elasticsearch-head:latest
    privileged: true
    container_name: es-head
    ports:
      - "9100:9100"
    networks:
      - custom_net
networks:
  custom_net:
   external:
      name: app_net

请先创建docker的网络组app_net。再构建相关环境,要不然会出错。

启动elasticsearch 和 elasticsearch-head,启动好了之后通过ip:9100访问,能够看到es的管理界面。

好了继续说Zipkin服务搭建
准备Zipkin:

version: '3'
services:
  zipkin:
    image: openzipkin/zipkin
    environment:
      - STORAGE_TYPE=elasticsearch
      - ES_HOSTS=es:9200    
    privileged: true
    container_name: zipkin
    ports:
      - "9411:9411"
    networks:
      - custom_net
networks:
  custom_net:
   external:
      name: app_net

主要是关注STORAGE_TYPE 和ES_HOSTS 这两个参数,配置了存储类型为es和es的地址。

完成了直接启动Zipkin服务就可以了
在这里插入图片描述
通过日志判断启动成功,可以通过ip:9411访问zipkin的主页。
在这里插入图片描述

服务配置zipkin

1、 先添加依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>

2、application.yml

spring:
  zipkin:
    base-url: http://ilove:9411  #zipkin服务的地址
  sleuth:
    sampler:
      percentage: 1 #这个参数是一个百分数。值是0-1之间,表示监控的度。1表示所有的请求都会传输到zipkin服务进行记录。不推荐设置太大,并发量大的时候性能损耗厉害

需要监控的服务进行上面的两个配置就可以了。

启动服务进行一些服务调用。再观察zipkin。
在这里插入图片描述

另一方面也可以上es-head看看
在这里插入图片描述

Zipkin-dependencies

从上面我们看到了一些请求调用的信息。但是看不到服务之间的关系。也就是没有一个清晰全局视图。想看这个视图,要借助zipkin-dependencies。

其实启动Zipkin-dependencies很简单:
通过下载jar 或者 docker 镜像 都能启动

按照官方的意思

$ curl -sSL https://zipkin.io/quickstart.sh | bash -s io.zipkin.dependencies:zipkin-dependencies:LATEST zipkin-dependencies.jar
$ STORAGE_TYPE=cassandra3 java -jar zipkin-dependencies.jar

这样直接拉取jar启动即可,当然参数必须对应elasticsearch类型的参数。
但是第一步拉取jar包我就失败了。网速告急…

通过docker获取

 docker run --env STORAGE_TYPE=elasticsearch --env ES_HOSTS=es:9200 --network app_net  --env ES_INDEX=zipkin --rm=true -e JAVA_OPTS="-Xmx999m -Xms999m"  openzipkin/zipkin-dependencies

docker run
–env STORAGE_TYPE=elasticsearch 存储类型 与前面的zipkin一样
–env ES_HOSTS=es:9200 es的地址
–network app_net 网络组分配 这个很重要
–rm=true 清理
-e JAVA_OPTS="-Xmx999m -Xms999m" 保证内存足够
openzipkin/zipkin-dependencies

因为我这边使用docker-compose启动一直表示配分的内存不够,所以就指定了jvm内存
在这里插入图片描述

启动一会,这个任务自己会停止的。
在这里插入图片描述
这个过程是:zipkin-dependencies从es中获取数据,进行计算并将结果存到es中。完成这一次任务es中就有了新的微服务调度关系。

此时上ip:9411看结果
在这里插入图片描述
可以定义定时调度,比如一小时执行一次,以查看最新的服务关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值