1、下载镜像
>docker pull elasticsearch:7.5.1
>docker pull apache/skywalking-oap-server:6.6.0-es7
>docker pull apache/skywalking-ui:6.6.0
说明:使用最新版本的elasticsearch和skywalking-oap-server镜像,启动会有问题。
因此,必须使用上述版本才可以。
2、安装
2.1 安装elasticsearch
>docker run -d --name=es7 \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" elasticsearch:7.5.1
启动后
>mkdir -p /data/elasticsearch
>docker cp es7:/usr/share/elasticsearch/data /data/elasticsearch/
>docker cp es7:/usr/share/elasticsearch/logs /data/elasticsearch/
>docker rm -f es7
>docker run -d --name=es7 \
--restart=always \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-v /data/elasticsearch/data:/usr/share/elasticsearch/data \
-v /data/elasticsearch/logs:/usr/share/elasticsearch/logs \
elasticsearch:7.5.1
2.2 安装oap
>docker run --name oap --restart always -d \
--restart=always \
-e TZ=Asia/Shanghai \
-p 12800:12800 \
-p 11800:11800 \
--link elasticsearch:elasticsearch \
-e SW_STORAGE=elasticsearch \
-e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 \
apache/skywalking-oap-server:6.6.0-es7
这里指定elasticsearch 来存储数据
2.3 安装ui
>docker run -d --name skywalking-ui \
--restart=always \
-e TZ=Asia/Shanghai \
-p 8088:8080 \
--link oap:oap \
-e SW_OAP_ADDRESS=oap:12800 \
apache/skywalking-ui:6.6.0
8080是常用端口,这里映射的端口为8088,防止端口冲突。
访问地址:http://ip:8088
截图中数据是已存在的,刚安装好,第一次访问是空的。
注意:因为机制为懒加载,所以当只有你调用该java接口时,页面上才有显示。所以第一次访问时,数据是没有的。
包含模块
- 仪表盘:查看被监控服务的运行状态
- 拓扑图:以拓扑图的方式展现服务直接的关系,并以此为入口查看相关信息
- 追踪:以接口列表的方式展现,追踪接口内部调用过程
- 性能剖析:单独端点进行采样分析,并可查看堆栈信息
- 告警:触发告警的告警列表,包括实例,请求超时等。
- 自动刷新:刷新当前数据内容(可以设置x秒刷新一次)。
3、 ui指标
3.1 仪表盘
3.1.1 Global全局维度
- 第一栏:Global、Server、Instance、Endpoint不同展示面板,可以调整内部内容
- Services load:服务每分钟请求数
- Slow Services:慢响应服务,单位ms
- Un-Health services(Apdex):Apdex性能指标,1为满分。
- Global Response Latency:百分比响应延时,不同百分比的延时时间,单位ms
- Global Heatmap:服务响应时间热力分布图,根据时间段内不同响应时间的数量显示颜色深度
- 底部栏:展示数据的时间区间,点击可以调整。
3.1.2 Service服务维度
- Service Apdex(数字):当前服务的评分
- Service Apdex(折线图):不同时间的Apdex评分
- Successful Rate(数字):请求成功率
- Successful Rate(折线图):不同时间的请求成功率
- Servce Load(数字):每分钟请求数
- Servce Load(折线图):不同时间的每分钟请求数
- Service Avg Response Times:平均响应延时,单位ms
- Global Response Time Percentile:百分比响应延时
- Servce Instances Load:每个服务实例的每分钟请求数
- Show Service Instance:每个服务实例的最大延时
- Service Instance Successful Rate:每个服务实例的请求成功率
3.1.3 Instance实例维度
- Service Instance Load:当前实例的每分钟请求数
- Service Instance Successful Rate:当前实例的请求成功率
- Service Instance Latency:当前实例的响应延时
- JVM CPU:jvm占用CPU的百分比
- JVM Memory:JVM内存占用大小,单位m
- JVM GC Time:JVM垃圾回收时间,包含YGC和OGC
- JVM GC Count:JVM垃圾回收次数,包含YGC和OGC
- CLR XX:类似JVM虚拟机,这里用不上就不做解释了
3.1.4 Endpoint端点(API)维度
- Endpoint Load in Current Service:每个端点的每分钟请求数
- Slow Endpoints in Current Service:每个端点的最慢请求时间,单位ms
- Successful Rate in Current Service:每个端点的请求成功率
- Endpoint Load:当前端点每个时间段的请求数据
- Endpoint Avg Response Time:当前端点每个时间段的请求行响应时间
- Endpoint Response Time Percentile:当前端点每个时间段的响应时间占比
- Endpoint Successful Rate:当前端点每个时间段的请求成功率
3.2 拓扑图
- 1:选择不同的服务关联拓扑
- 2:查看单个服务相关内容
- 3:服务间连接情况
- 4:分组展示服务拓扑
- :服务告警信息
- :服务端点追踪信息
- :服务实例性能信息
- :api信息面板
3.3 追踪
- 左侧:api接口列表,红色-异常请求,蓝色-正常请求
- 右侧:api追踪列表,api请求连接各端点的先后顺序和时间
3.4 性能剖析
- 新建任务:新建需要分析的端点
- 左侧列表:任务及对应的采样请求
- 右侧:端点链路及每个端点的堆栈信息
3.4.1 新建任务
- 服务:需要分析的服务
- 端点:链路监控中端点的名称,可以再链路追踪中查看端点名称
- 监控时间:采集数据的开始时间
- 监控持续时间:监控采集多长时间
- 起始监控时间:多少秒后进行采集
- 监控间隔:多少秒采集一次
- 最大采集数:最大采集多少样本
3.5 告警
不同维度告警列表,可分为服务、端点和实例。
4、测试代码
https://gitee.com/xixingzhe2/learn/tree/master/skywalking
4.1 启动项目
下载skywalking源码
>wget https://archive.apache.org/dist/skywalking/6.6.0/apache-skywalking-apm-6.6.0.tar.gz
>tar zxvf apache-skywalking-apm-6.6.0.tar.gz #解压
>cd apache-skywalking-apm-bin/
>cp -r agent/ /root/project/skywalking/ #将agent复制到项目所在位置
将测试项目的两个jar放到/root/project/skywalking下
启动demo1
>java -javaagent:agent/skywalking-agent.jar -Dskywalking.agent.service_name=demo1 -Dskywalking.collector.backend_service=127.0.0.1:11800 -jar demo-1.0.0.jar
启动demo2
>java -javaagent:agent/skywalking-agent.jar -Dskywalking.agent.service_name=demo2 -Dskywalking.collector.backend_service=127.0.0.1:11800 -jar spring-boot-demo-0.0.1-SNAPSHOT.jar
说明:
- -javaagent 指定agent包位置,可以是相对路径或绝对路径。如:agent/skywalking-agent.jar或/root/project/skywalking/agent/skywalking-agent.jar
- -Dskywalking.agent.service_name 指定服务名。
- -Dskywalking.collector.backend_service 指定skywalking oap地址,由于在本机,地址为:127.0.0.1:11800
- -jar 指定jar包的路径。
4.2 测试
demo项目中HttpUtilsTest有两个测试方法。
4.2.1 普通调用
执行testUrl后,可以看到demo2和访问hello。
4.2.2 链路调用
执行testUrl2后,可以看到demo2和访问hello。
在“追踪”中可以看到调用关系
4.3.3 注意
每次调用完接口,要看最新的数据,可以选择最近15分钟,刷新页面。
5、问题
5.1 skywalking应用与springcloud-gateway时无法通过gateway发现路由的服务链路?
原因: Spring Cloud Gateway 是基于 WebFlux 实现,必须搭配上apm-spring-cloud-gateway-2.1.x-plugin 和 apm-spring-webflux-x.x-plugin 两个插件(备注:一般webflux已经包含在目标路径下)
方案:将agent/optional-plugins下的两个插件 复制到 agent/plugins目录下。
Java Agent是插件化、可插拔的。Skywalking的插件分为三种:
- 引导插件:在agent的
bootstrap-plugins
目录下 - 内置插件:在agent的
plugins
目录下 - 可选插件:在agent的
optional-plugins
目录下
Java Agent只会启用 plugins
目录下的所有插件,bootstrap-plugins
目录以及 optional-plugins
目录下的插件不会启用。如需启用引导插件或可选插件,只需将JAR包移到 plugins
目录下,如需禁用某款插件,只需从 plugins
目录中移除即可。
参考:
https://www.cnblogs.com/xiao987334176/p/13530575.html
https://www.cnblogs.com/kebibuluan/p/13151144.html
https://blog.csdn.net/lizz861109/article/details/107535100