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看结果
可以定义定时调度,比如一小时执行一次,以查看最新的服务关系