目录
5.3 Spring Cloud整合Skywalking实战
1. Skywalking概述
Skywalking与2016年11月2日由国人吴晟在Github上传v1.0版本,用于提供分布式链路追踪功能,从5.x开始,成为一个功能较为完善的APM(Application Performance Management)系统,2019年4月17日从Apache孵化器毕业,正式成为Apache顶级项目。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。官方对自己介绍是专为微服务,云原生和基于容器(Docker,Kubernetes,Mesos)架构而设计。
2. Skywalking主要功能
-
服务,服务实例,端点指标分析
-
根本原因分析
-
服务拓扑图分析
-
服务,服务实例和端点依赖性分析
-
慢服务检测
-
性能优化
-
分布式跟踪和上下文传播
-
数据库访问指标、检测慢速数据库访问语句(包括SQL)
-
告警
3. Skywalking主要特性
-
多种监控手段,语言探针和service mesh
-
多语言自动探针,Java,.NET Core和Node.JS
-
多种后端存储支持
-
轻量高效
-
模块化,UI、存储、集群管理多种机制可选
-
支持告警
-
优秀的可视化方案
4. Skywalking架构简介
先看一下官方提供的架构图,如图:
Skywalking总体由四个部分agent
、collector
、webapp-ui
、storage
组成。图10-11从上到下是应用层接入,可以使用无入侵性的agent
探针接入,通过HTTP或者gRPC讲数据发送至Skywalking分析平台collector
,collector
对接受到的数据进行聚合分析,最后存储至storage
中,这里支持多种存储方式,比较常用的有H2和ElasticSearch,最后可以由webapp-ui
对所有的数据进行展示
5. Spring Cloud与Skywalking实战
5.1 Skywalking部署构建
5.1.1.ES安装
docker run --name es6 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -v /data/elasticsearch6/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/elasticsearch6/data:/usr/share/elasticsearch/data -v /data/elasticsearch6/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:6.7.2
访问ip:9200表示安装成功
5.1.2 Skywalking安装
到官网下载对应版本的包 我这边选择的6.5.0版本的
Index of /dist/skywalking (apache.org)
解压可以看到目录结构,如图:
-
agent:探针相关,后面会做更加详细的介绍。
-
bin:这里放的是oapService和webappService的启动脚本,当然也有执行两个脚本的合并脚本
startup.sh
。 -
config:这里主要存放的是collector的配置信息,我们需要修改这里的application.yml中的有关ElasticSearch的配置,如下图:
修改storage.elasticsearch.nameSpace
为我们前面构建ElasticSearch设置的cluster.name
,笔者这里的值为CollectorDBCluster
,同时修改storage.elasticsearch.clusterNodes
为我们当前构建的ElasticSearch的地址。
-
logs:存放collector和webapp-ui生成的日志。
-
webapp:这里存放的是Skywalking展示UI的jar和配置文件。
Skywalking中默认使用的端口有8080、11800、12800,请保证这些端口未被占用,如需修改,可以修改config
目录中的application.yml
和webapp
目录中的webapp.yml
。
接下来启动collector和webapp-ui,进入bin目录中,执行命令./startup.sh
,如:
打开浏览器访问http://192.168.60.34:8080/,可以看到webapp-ui的仪表盘,如图:
5.3 Spring Cloud整合Skywalking实战
在idea中使用需要修改启动配置,点击右上角的Edit Configurations...
,在打开的窗口中选择Environment->VM Options
,配置如下脚本:
-javaagent:D:\Development\SpringCloudLearning\chapter15\skywalking\agent\skywalking-agent.jar -Dskywalking.agent.service_name=test-service -Dskywalking.collector.backend_service=192.168.60.34:11800
还可以使用java -jar的方式来加载agent探针,我们将整个maven项目打包,使用java -jar的方式来启动,启动命令中增加启动参数,如下:
-javaagent:/mnt/skywalking/agent/skywalking-agent.jar -Dskywalking.agent.service_name=test-service -Dskywalking.collector.backend_service=192.168.60.34:11800 -jar test-0.0.1-SNAPSHOT.jar
:http://localhost:8080/client/hello?name=spring,多刷新几次后,我们再使用浏览器访问http://192.168.60.34:8080/,如:
还可以使用java -jar的方式来加载agent探针,我们将整个maven项目打包,运行mvn install的命令,使用java -jar的方式来启动,启动命令中增加启动参数,如下:
-javaagent:D:\Development\SpringCloudLearning\chapter15\skywalking\agent\skywalking-agent.jar -Dskywalking.agent.service_name=consumer-service -Dskywalking.collector.backend_service=192.168.44.128:11800 -jar zuul-0.0.1-SNAPSHOT.jar
顺次启动四个工程后,使用浏览器访问:http://localhost:8080/client/hello?name=spring,多刷新几次后,我们再使用浏览器访问http://192.168.44.128:8080/,如:
顺次启动四个工程后,使用浏览器访问:http://localhost:8080/client/hello?name=spring,多刷新几次后,我们再使用浏览器访问http://192.168.44.128:8080/,如:
-
all_heatmap:所有服务响应时间的热点图
-
all_p99:所有服务响应时间的 p99 值
点击上边栏的拓扑图,可以看到当前我们工程的一个依赖拓扑关系,如:
点击上边栏的追踪,可以看到左边是当前所有的访问请求,随便点击一个,可以在右边看到一个详细的链路追踪过程,如:
点击链路,可以看到一些标记信息,包含端点、跨度类型、成功还是失败,以及一些Exception信息,如图:
点击仪表盘页面的Service,可以看到一些服务相关的信息,如平均响应时间、平均吞吐量、平均时延统计,如图:
-
service_instance_sla:服务实例的成功率
-
service_instance_resp_time:服务实例的平均响应时间
-
service_instance_cpm:服务实例每分钟调用次数
点击仪表盘页面的Endpoint,可以看到一些端点相关的信息,如图:
-
endpoint_cpm:端点每分钟调用次数
-
endpoint_avg:端点平均响应时间
-
endpoint_sla:端点成功率
-
endpoint_p99:端点响应时间的 p99 值
点击仪表盘页面的Instance,可以看到一些JVM相关的信息,如图:
5.4 Skywalking 添加tid
pom中引入以下依赖
- <dependency>
- <groupId>org.apache.skywalking</groupId>
- <artifactId>apm-toolkit-logback-1.x</artifactId>
- <version>6.2.0</version>
- </dependency>
- springboot logback 日志依赖,使用的是spring-boot-starter-logging
-
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
-
- 替换logback.xml中配置
-
- <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
- <pattern>%d{ISO8601} | %thread | %-5level | %msg%n</pattern>
- </encoder>
-
- <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
- <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
- <pattern>%d{ISO8601} | %tid | %thread | %-5level | %msg%n</pattern>
- </layout>
- </encoder>
启动项目请求http://localhost:9000/api/user/login查看控制台日志
找到tid到skywalking上查找 可以查找到对应的请求,查看对应的链路