skywalking分布式链路追踪实践

1.skywalking,zipkin,cat等多款产品对比 https://blog.csdn.net/u012394095/article/details/79700200

skywalking提高的分布式链路追踪较springcloud sleuth+zipkin那套方案相比,初体验有不少优点:1.中文,更优雅的界面;2.集成更简单(探针方式,项目甚至不用新增依赖及配置,侵入更少,更容易插拔)3;功能更丰富:增加了多中间件mysql,kafka等和jvm监控支持。

2.下载地址http://skywalking.apache.org/downloads/ 

wget https://archive.apache.org/dist/skywalking/6.3.0/apache-skywalking-apm-6.3.0.tar.gz

3.目录介绍(配置与启动)

①agent:探针客户端,Java -jar启动时参数指向agent里面的skywalking探针jar包。类似zipkin-server.

②config:配置文件,主要修改application.yml里的agent采集的信息要存存储到哪里,默认H2,现改为ES。修改namespace为ES集群名,clusterNodes为ES集群各节点URL即可,其他暂时默认即可。

③webapp:将ES里的数据展示出来的UI项目基本配置,修改一下webapp.yml的server.port端口,默认8080,这里改为8101

④bin启动脚本,startup.sh同时启动oap(主要是将探针采集的数据上传到ES)和webapp(相当于zipkin-ui)两个服务,也可单独启动。访问ip:8101即可看到效果。

也可以使用docker安装部署skywalking,这里不使用docker-compose部署了,因为之前装了elasticsearch,单独docker安装oap和webapp:

docker run --name skywalking-oap -d -p 1234:1234 -p 11800:11800 -p 12800:12800 --restart always  -e SW_STORAGE=elasticsearch -e SW_STORAGE_ES_CLUSTER_NODES=localhost:9200 apache/skywalking-oap-server

docker run --name skywalking-ui -d -p 8080:8080 --link skywalking-oap:skywalking-oap  -e SW_OAP_ADDRESS=skywalking:12800 --restart always apache/skywalking-ui

4.非docker部署项目链路数据采集

只需要在启动脚本如自己写的启动脚本restart.sh或catalina.sh等添加两个jvm参数即可.

-javaagent:/home/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar

-Dskywalking.agent.application_code=vehicle-payment 

JAVA_OPTS=' -javaagent:/home/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.application_code=vehicle-payment  -server -Xmx500m -Xms500m -Xmn350m -Xss256k   -XX:CMSInitiatingOccupancyFraction=80  -XX:MetaspaceSize=80m -XX:MaxMetaspaceSize=100m -XX:+DisableExplicitGC  -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly  -Duser.timezone=GMT+8'

再次刷新页面可看到调用链信息,如下:各个SQL耗用时间,如下发现调用另一个服务接口严重耗时。

skywalking分布式链路追踪实践_第1张图片

5.docker项目链路数据的采集

由于容器隔离,宿主机上的探针agent目录挂载(创建微服务容器时-v挂载)或添加到镜像内。这里以添加到镜像为例。

思路是将skywalking的探针打入一个基础镜像,然后每个微服务实例都依赖它,然后使用Java -jar 制定探针路径启动

基础镜像Dockerfile:构建docker build -t skywalking.base:0.0.1 .

#基础镜像Java8
FROM java:8
#指定工作目录
WORKDIR /app
#下载并将skywalking的tar包放到工作目录,然后解压重命名,可以删掉几个不要的大文件减少镜像大小
ADD https://archive.apache.org/dist/skywalking/6.3.0/apache-skywalking-apm-6.3.0.tar.gz /app
RUN tar -xf apache-skywalking-apm-6.3.0.tar.gz &&  mv apache-skywalking-apm-bin skywalking  

RUN ls /app

微服务镜像Dockerfile:

#依赖自制基础镜像skywalking.base
FROM skywalking.base:0.0.1
#需要暴露出去的端口,也就是我项目的端口 ,远程debug端口等,使用--net=host与主机共享ip就不用暴露了
#EXPOSE 9990
#环境变量
ENV jarName v-payment.jar
ENV JAVA_OPTS -server -Xmx800m -Xms800m -Xmn250m -Xss256k   -XX:CMSInitiatingOccupancyFraction=80  -XX:MetaspaceSize=150m -XX:MaxMetaspaceSize=200m -XX:+DisableExplicitGC  -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly  -Duser.timezone=GMT+8
ENV REMOTE_DEBUG -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8989
ENV SKYWALKING_OPTS -javaagent:/app/skywalking/agent/skywalking-agent.jar -Dskywalking.agent.service_name=vehicle-payment
ENV TZ GMT+8
#添加jar包到工作目录/app下(基础镜像skywalking.base定义了)
ADD /target/$jarName /app/$jarName
RUN echo "准备启动!"
#启动容器之后,默认的运行命令
#ENTRYPOINT ["sh","-c","java -jar  $REMOTE_DEBUG $JAVA_OPTS  $jarName"]
ENTRYPOINT java $SKYWALKING_OPTS   $REMOTE_DEBUG $JAVA_OPTS -jar $jarName

启动容器并进入可见有tar包及解压包,这里应该是只需要探针jar包,是可以优化镜像大小的

skywalking分布式链路追踪实践_第2张图片

6.插曲——镜像优化,基础镜像较大,去除不必要的文件

方式1:  RUN tar -xf apache-skywalking-apm-6.3.0.tar.gz &&  mv apache-skywalking-apm-bin skywalking 

追加删除操作删掉较大文件&& rm -rf apache-skywalking-apm-6.3.0.tar.gz &&rm -rf skywalking/webapp skywalking/oap-libs

方式2:只修改基础镜像:构建docker build -t skywalking.base:0.0.1 .

只把基础镜像Dockerfile(Dockerfile在skywalking的tar包解压目录),将apache-skywalking-apm-bin/agent整个目录(不仅仅是探针jar包!!!否则docker启动失败,应该是还需要agent里的配置文件,配置文件配置了探针采集数据上传目的地)的东西 COPY到工作目录/app下的skywalking/agent/里。注意docker的ADD指令添加宿主机文件或文件夹必须是相对Dockerfile文件的相对路径

FROM java:8
WORKDIR /app #默认工作目录为/
ADD  ./apache-skywalking-apm-bin/agent /app/skywalking/agent/
RUN ls /app

删除已退出的容器及none镜像

docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm

docker images |grep none |awk '{print $3}'|xargs docker rmi

其他参考:https://www.cnblogs.com/swave/p/11347711.html

 

 

你可能感兴趣的:(springcloud)