1 Skywalking应用
相关术语:
skywalking-collector:链路数据归集器,数据可以落地ElasticSearch/H2 skywalking-ui:web可视化平台,用来展示落地的数据 skywalking-agent:探针,用来收集和发送数据到归集器
2 agent下载
Skywalking-agent,它简称探针,用来收集和发送数据到归集器,我们先来学习下探针使用,探针对应的jar包在Skywalking源码中,我们需要先下载源码。
Skywalking源码下载地址: https://archive.apache.org/dist/skywalking/ ,我们当前使用的版本是8.3.0
,选择下载对应版本。
agent目录结构如下:
agent ├── activations │ ├── apm-toolkit-kafka-activation-8.3.0.jar │ ├── ... │ └── apm-toolkit-trace-activation-8.3.0.jar ├── config # Agent 配置文件 │ └── agent.config ├── logs # 日志文件 ├── optional-plugins # 可选插件 │ ├── apm-customize-enhance-plugin-8.3.0.jar │ ├── apm-gson-2.x-plugin-8.3.0.jar │ └── ... ... ├── bootstrap-plugins # jdk插件 │ ├── apm-jdk-http-plugin-8.3.0.jar │ └── apm-jdk-threading-plugin-8.3.0.jar ├── plugins # 当前生效插件 │ ├── apm-activemq-5.x-plugin-8.3.0.jar │ ├── apm-armeria-0.84.x-plugin-8.3.0.jar │ ├── apm-armeria-0.85.x-plugin-8.3.0.jar │ └── ... ... ├── optional-reporter-plugins │ └── kafka-reporter-plugin-8.3.0.jar └── skywalking-agent.jar【应用的jar包】
目录结构说明:
activations 当前skywalking正在使用的功能组件。 agent.config 文件是 SkyWalking Agent 的唯一配置文件。 plugins 目录存储了当前 Agent 生效的插件。 optional-plugins 目录存储了一些可选的插件(这些插件可能会影响整个系统的性能或是有版权问题),如果需要使用这些插件,需将相应 jar 包移动到 plugins 目录下。 skywalking-agent.jar 是 Agent 的核心 jar 包,由它负责读取 agent.config 配置文件,加载上述插件 jar 包,运行时收集到 的 Trace 和 Metrics 数据也是由它发送到 OAP 集群的。
我们在使用Skywalking的时候,整个过程中都会用到skywalking-agent.jar
,而无论是RPC还是HTTP开发的项目,用法都一样,因此我们讲解当前主流的SpringBoot项目对agent的使用即可。
3 agent应用
项目使用agent,如果是开发环境,可以使用IDEA集成,如果是生产环境,需要将项目打包上传到服务器。为了使用agent,我们同时需要将下载的apache-skywalking-apm-bin文件包上传到服务器上去。不过无论是开发环境还是生产环境使用agent,对项目都是无侵入式的。
3.1 应用名配置
我们需要用到agent,此时需要将agent/config/agent.config配置文件拷贝到每个需要集成Skywalking工程的resource目录下,我们将agent.config拷贝到工程\hailtaxi-parent的每个子工程目录下,并修改其中的 agent.service_name,修改如下:
hailtaxi-gateway: agent.service_name=${SW_AGENT_NAME:hailtaxi-gateway} hailtaxi-driver: agent.service_name=${SW_AGENT_NAME:hailtaxi-driver} hailtaxi-order: agent.service_name=${SW_AGENT_NAME:hailtaxi-order}
agent.config 是一个 KV 结构的配置文件,类似于 properties 文件,value 部分使用 “${}” 包裹,其中使用冒号(":")分为两部分,前半部分是可以覆盖该配置项的系统环境变量名称,后半部分为默认值。例如这里的 agent.service_name 配置项,如果系统环境变量中指定了 SW_AGENT_NAME 值(注意,全是大写),则优先使用环境变量中指定的值,如果环境变量未指定,则使用 hailtaxi-driver 这个默认值。
直接把配置修改好后放到项目的resource目录下(或者其他路径)是最不容易才出错的一种方式,同时我们可以采用其他方式覆盖默认值:
1)JVM覆盖配置
例如这里的 agent.service_name 配置项,如果在 JVM 启动之前,明确中指定了下面的 JVM 配置:
# "skywalking."是 Skywalking环境变量的默认前缀 -Dskywalking.agent.service_name = hailtaxi-driver
2)探针配置覆盖
将 Java Agent 配置为如下:
# 默认格式是 -javaagent:agent.jar=[option1]=[value1],[option2]=[value2] -javaagent:/path/skywalking-agent.jar=agent.service_name=hailtaxi-driver
此时会使用该 Java Agent 配置值覆盖 agent.config 配置文件中 agent.service_name 默认值。
但是这些配置都有不同优先级,优先级如下:
探针配置 > JVM配置 > 系统环境变量配置 > agent.config文件默认值
3.2 IDEA集成使用agent
1、修改agent中数据收集服务的地址:agent/config/agent.confg
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.200.129:11800}
当然也可以同构JVM参数配置
2、使用探针配置为3个项目分别配置agent:
1)hailtaxi-driver:
-javaagent:C:\developer\skywalking\apache-skywalking-apm-bin\agent\skywalking-agent.jar -Dskywalking.agent.service_name=hailtaxi-driver
将上面配置赋值到IDEA中:
2)hailtaxi-order
-javaagent:C:\developer\skywalking\apache-skywalking-apm-bin\agent\skywalking-agent.jar -Dskywalking.agent.service_name=hailtaxi-order
将上面配置赋值到IDEA中:
3)hailtaxi-gateway
-javaagent:C:\developer\skywalking\apache-skywalking-apm-bin\agent\skywalking-agent.jar -Dskywalking.agent.service_name=hailtaxi-gateway
将上面配置赋值到IDEA中:
此时启动IDEA,并访问:http://192.168.200.129:8080 效果如下:
如果你要追踪Gateway的话,你会发现:无法通过gateway发现路由的服务链路?
原因: Spring Cloud Gateway 是基于 WebFlux 实现,必须搭配上apm-spring-cloud-gateway-2.1.x-plugin 和 apm-spring-webflux-x.x-plugin 两个插件
方案:将agent/optional-plugins下的两个插件 复制到 agent/plugins目录下
3.3 生产环境使用agent
生产环境使用,因此我们需要将agent和每个项目的jar包上传到服务器上,上传apache-skywalking-apm-bin
至/usr/local/server/skywalking
,再将工程\hailtaxi-parent
中的项目打包,并分别上传到服务器上,如下三个工程:
hailtaxi-order-1.0-SNAPSHOT.jar hailtaxi-gateway-1.0-SNAPSHOT.jar hailtaxi-driver-1.0-SNAPSHOT.jar
1)启动hailtaxi-gateway
java -javaagent:/usr/local/server/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=hailtaxi-gateway -jar hailtaxi-gateway-1.0-SNAPSHOT.jar &
2)启动hailtaxi-driver
java -javaagent:/usr/local/server/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=hailtaxi-driver -jar hailtaxi-driver-1.0-SNAPSHOT.jar &
3)启动hailtaxi-order
java -javaagent:/usr/local/server/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=hailtaxi-order -jar hailtaxi-order-1.0-SNAPSHOT.jar &
4. Rocketbot
前面我们已经完成了SkyWalking环境搭建和项目应用agent使用,我们来看如何使用 SkyWalking 提供的 UI 界面—— Skywalking Rocketbot。
OAP服务和Rocket(其实就是个web项目)均已启动
4.1 Rocketbot-仪表盘
具体细则可参考资料:Skywalking仪表盘使用
Rocketbot从多个方面展示了服务信息,我们分别从多个方面进行讲解。
上图中的【仪表盘】、【拓扑图】、【追踪】、【性能剖析】、【日志】、【警告】属于功能菜单。
仪表盘属于数据统计功能,分别从服务热度、响应水平、服务个数、节点信息等展示统计数据。
Global Heatmap 面板:热力图,从全局展示了某段时间请求的热度。
Global Percent Response 面板 :展示了全局请求响应时间的 P99、P95、P75 等分位数。
Global Brief 面板:展示了 SkyWalking 能感知到的 Service、Endpoint 的个数。
Global Top Troughput 面板:展示了吞吐量前几名的服务。
Global Top Slow Endpoint 面板:展示了耗时前几名的 Endpoint。
Service (Avg) ResponseTime 面板:展示了指定服务的(平均)耗时。
Service (Avg) Throughput 面板:展示了指定服务的(平均)吞吐量。
Service (Avg) SLA 面板:展示了指定服务的(平均)SLA(Service Level Agreement,服务等级协议)。
Service Percent Response 面板:展示了指定服务响应时间的分位数。
Service Slow Endpoint 面板:展示了指定服务中耗时比较长的 Endpoint 信息。
Running ServiceInstance 面板:展示了指定服务下的实例信息。
除了 SkyWalking Rocketbot 默认提供的这些面板,我们还可以点击锁型按钮,自定义 Global 面板。在 ServiceInstance 面板中展示了很多 ServiceInstance 相关的监控信息,例如,JVM 内存使用情况、GC 次数、GC 耗时、CPU 使用率、ServiceInstance SLA 等等信息。