调用链监控Skywalking与Zipkin

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

Zipkin安装部署简单,参考:Spring Cloud Sleuth + Zipkin 调用链监控
Skywalking安装部署复杂:http://skywalking.apache.org/github

# 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}

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

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

  • zipkin需要在代码中引入依赖,默认使用http向zipkin server发送数据,当调用量大时可以结合 rabbitmq ,java服务向rabbitmq发送调用链trace,zipkin采集rabbitmq里面的trace信息
  • 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、网络接口等

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

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

方法里面的mysql调用、redis调用,调用了几次,每次的耗时,都展示的很详情,very nice
在这里插入图片描述

比如,采集的这个接口,调用了2次mysql查询,每次耗时2670ms,就需要优化sql了在这里插入图片描述

skywalking之所以能采集到多种中间件(http、redis、mysql、mongodb)等等的信息,是因为它对每个中间件内置了处理程序,当我们启动应用使用skywalking时会自动对应用内的各种中间件添加拦截器
有http的、jdbc的在这里插入图片描述
zipkin只能采集到服务层,也就是那个控制器的那个方法,内部调用了什么不能采集,如需要采集需要自定义处理器,相当于给当前 traceId 手动添加 spanId
例如:SpringBoot应用,使用Zipkin则需要引入 brave 相关的包,然后自动注入http-interceptors拦截器,才能采集应用内对外的http请求
SpringCloud应用,使用sleuth会自动注入http的拦截器,在http请求头中添加spanId

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值