调用链监控Skywalking与Zipkin

Skywalking与Zipkin的区别

  • 颗粒度:Skywalking方法级(展示的更详细),方法中所有的调用都展示出来了,如数据库调用、redis调用,第三方网络调用,而Zipkin只能展示接口级
  • UI界面:Skywalking完胜,国产开源,更适合国人眼球
  • 代码侵入性:Skywalking无代码侵入,使用字节码增强技术,在启动服务时使用javaagent指向skywalking服务即可收集调用链span信息
  • Zipkin:简单、轻量级

安装部署对比

Zipkin安装部署简单,Skywalking安装部署复杂:http://skywalking.apache.org/
Github:https://github.com/apache/skywalking/tree/master/docs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# Skywalking安装步骤如下:

# 1.docker 安装elasticsearch
docker run -d -it --name=elasticsearch --net=esnetwork \
--restart=always \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms2g -Xmx2g" \
-e TZ='Asia/Shanghai' \
-e LANG="en_US.UTF-8" \
-v /root/elasticsearch/config/:/usr/share/elasticsearch/config/ \
-v /root/elasticsearch/data/:/usr/share/elasticsearch/data/ \
-v /root/elasticsearch/logs/:/usr/share/elasticsearch/logs/ \
-v /root/elasticsearch/plugins/:/usr/share/elasticsearch/plugins/ \
-v /etc/localtime:/etc/localtime \
-v /etc/timezone:/etc/timezone \
elasticsearch:7.4.2

# 2.安装 IK 分词器(进入docker容器安装插件)
docker exec -it elasticsearch bash
cd bin/
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip

# 3.下载skywalking:wget http://mirror.bit.edu.cn/apache/skywalking/7.0.0/apache-skywalking-apm-7.0.0.tar.gz

# 4.解压,进入目录,修改配置
vi config/application.yml ,配置storage为elasticsearch7,默认h2
storage:
selector: ${SW_STORAGE:elasticsearch7}

# 5.启动 SkyWalking OAP 服务
sh bin/oapService.sh , 查看启动日志:tail -f logs/skywalking-oap-server.log

# 6.启动 SkyWalking UI 服务
sh bin/webappService.sh,查看日志:tail -f logs/web.log

# 7.复制 skywalking 软件里面的 agent 目录到 java 应用服务器上

# 8.复制后,修改agent\config\agent.config 里面的collector.backend_service参数,
值为:skywalking OAP服务的IP地址,端口默认为11800
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.10.1:11800}

# 9.启动java服务,指向复制后的agent目录中的skywalking-agent.jar
nohup java -javaagent:/skywalking/agent/skywalking-agent.jar -jar xxxx-1.0.0.jar &

界面对比

Zipkin

启动zipkin与对应微服务,访问服务,产生数据,查看zipkin ui界面

zipkin需要在代码中引入依赖,默认使用http向zipkin server发送数据,当调用量大时可以结合 rabbitmq,java服务向rabbitmq发送调用链trace,zipkin采集rabbitmq里面的trace信息

1
nohup java -jar zipkin-server-2.12.9-exec.jar --zipkin.collector.rabbitmq.addresses=localhost --zipkin.collector.rabbitmq.username=admin --zipkin.collector.rabbitmq.password=admin &

zipkin 只能看到调用了那些服务,服务耗时多长,没法查看服务中的方法调用了redis、网络接口等

Zipkin-UI使用01

Zipkin-UI使用02

Zipkin-UI使用03

Zipkin-UI使用04

Skywalking

启动Skywalking与对应微服务,访问服务,产生数据,查看skywalking ui界面

Skywalking-UI使用01

Skywalking-UI使用02

Skywalking-UI使用03

方法里面的mysql调用、redis调用,调用了几次,每次的耗时,都展示的很详情,very nice

Skywalking-UI使用04

比如,采集的这个接口,调用了2次mysql查询,每次耗时2670ms,就需要优化sql了

Skywalking-UI使用05

skywalking之所以能采集到多种中间件(http、redis、mysql、mongodb)等等的信息,是因为它对每个中间件内置了处理程序,当我们启动应用使用skywalking时会自动对应用内的各种中间件添加拦截器有http的、jdbc的

Skywalking-UI使用06

zipkin只能采集到服务层,也就是那个控制器的那个方法,内部调用了什么不能采集,如需要采集需要自定义处理器,相当于给当前 traceId 手动添加 spanId

例如:SpringBoot应用,使用Zipkin则需要引入 brave 相关的包,然后自动注入http-interceptors拦截器,才能采集应用内对外的http请求
SpringCloud应用,使用sleuth会自动注入http的拦截器,在http请求头中添加spanId

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2021 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :