一,概述
SkyWalking是一个分布式追踪、服务网格和应用程序性能管理系统,它可以帮助用户深入了解应用程序的性能瓶颈,并提供了性能指标。SkyWalking支持多种语言,包括Java、.NET、NodeJS、Go等。通过SkyWalking,您可以监控微服务架构中的服务间调用,并提供性能指标。
1.1 特点
SkyWalking具有以下特点:
- 分布式应用程序追踪:SkyWalking可以跟踪分布式应用程序中的请求链,以了解请求的流动路径和延迟时间。
- 应用程序性能度量:SkyWalking可以对应用程序进行性能度量,并向用户提供性能指标。
- 服务网格追踪:SkyWalking可以在服务网格中跟踪服务间通信,并提供有关服务间通信的性能指标。
- 跨语言支持:SkyWalking支持多种语言,包括Java、.NET、NodeJS、Go等。
1.2 使用场景
SkyWalking适用于以下场景:
- 微服务架构:SkyWalking可以帮助用户监控微服务架构中的服务间调用。
- 分布式应用程序:SkyWalking可以帮助用户跟踪分布式应用程序中的请求链,并了解请求的流动路径和延迟时间。
- 服务网格:SkyWalking可以帮助用户在服务网格中跟踪服务间通信,并提供有关服务间通信的性能指标。
1.3 功能
- 服务、服务实例和端点(如:单个HTTP URI)的性能指标分析
- 根本原因分析
- 服务拓扑图分析
- 服务和端点依赖分析
- 慢服务和慢端点检测
- 分布式追踪和上下文传播
- 总体架构
1.4 总体架构
- collector:链路数据归集器,数据可以落地MySQL、ElasticSearch、TiDB、H2等
- agent:探针,使用Javaagent做字节码植入,无侵入式的收集,并通过HTTP或者gRPC方式发送数据collector
- web:web可视化平台,用来展示落地的数据
二、安装与配置
本文就以v8.7.0为例部署使用,存储我们用的是Elasticsearch 7.x的版本
环境搭建
$ mkdir skywalking
$ cd skywalking
下载应用安装包
wget https://archive.apache.org/dist/skywalking/8.7.0/apache-skywalking-apm
-es7- 8.7.0.tar.gz
解压缩至当前目录
tar -zxvf apache-skywalking-apm-es7-8.7.0.tar.gz
cd apache-skywalking-apm-bin-es7
具体文件目录结构如下
- agent目录将来要拷贝到各服务所在机器上用作探针
- bin目录是服务启动脚本
- config目录是配置文件
- oap-libs目录是oap服务运行所需的jar包
- webapp目录是web服务运行所需的jar包
- 其中SkyWalking OAP 服务的配置文件位置是config/application.yml
- SkyWalking UI服务的配置文件位置:webapp/webapp.yml。
- 部署之前首先需要准备好Elasticsearch 服务,如果项目中已经有现成的,直接拿来用即可。部署流程如下:
2.1 搭建SkyWalking
修改配置:
<1>、设置 cluster.name
修改collector的配置文件config\application.yml,其中配置namespace与es-cluster.name值保持一致;es-cluster.name查看方式curl ip:9200如下所示:
cd /data/skywalking/apache-skywalking-apm-bin-es7
vi config/application.yml
2.2 搭建SkyWalking OAP服务
先修改OAP的配置文件,以设置Elasticsearch作为存储的数据库
cd /data/skywalking/apache-skywalking-apm-bin-es7
vi config/application.yml
配置文件中默认选择的是H2数据源,切换成elasticsearch7,把elasticsearch7配置成自己安装的信息
重点修改 storage 配置项,通过 storage.selector 配置项来设置具体使用的存储器。
可以主要修改nameSpace、clusterNodes两个配置即可,设置使用的Elasticsearch的集群和命名空间。
storage.elasticsearch7配置项,设置使用Elasticsearch7.X 版本作为存储器。
这里面storage.selector配置项用来设置具体的存储器,默认为{SW_STORAGE:elasticsearch7}。然后storage.elasticsearch7配置项中修改nameSpace、clusterNodes,如果eleasticsearch开启了认证,需要修改user、password
启动 SkyWalking服务
启动skywalking oap服务
bin/oapServiceInit.sh
返回
SkyWalking OAP started successfully!
打开logs/skywalking-oap-server.log日志文件,查看是否有错误日志,是否真正启动成功。首次启动时,因为 SkyWalking OAP 会创建大量的 Elasticsearch 的索引,所以可能会比较慢。SkyWalking后端支持多个存储实现器。它们中的大多数可以在后端启动时自动初始化存储,例如Elasticsearch 、Database。
2.3 SkyWalking UI 搭建
1.由于SkyWalking UI的默认地址是8080,与很多中间件有冲突,可以修改一下
修改webapp/webapp.yml
server:
port: 18080
2.启动 SkyWalking UI 服务
$ bin/webappService.sh
SkyWalking Web Application started successfully!
打开 logs/logs/webapp.log 日志文件,查看是否有错误日志,是否真正启动成功。如果需要修改 SkyWalking UI 服务的参数,可以编辑 webapp/webapp.yml 配置文件。例如说:
server.port:SkyWalking UI 服务端口。
spring.cloud.discovery.client.simple.instances.oap-service:SkyWalking OAP 服务地址数组,因为 SkyWalking UI 界面的数据,是通过请求 SkyWalking OAP 服务来获得的。注意的是,8.7.0版本的UI后台由于引入了zuul对静态资源的代理,所以OAP地址不再是通过collector.ribbon.listOfServers来设置的。
2.4 skywalking-oap-server端口介绍
直接启动:
也可使用直接启动方法:bin/startup.sh启动skywalking服务
启动成功后会启动两个服务,一个是skywalking-oap-server,一个是skywalking-web-ui
skywalking-oap-server服务启动后会暴露11800 和 12800 两个端口,分别为收集监控数据的端口11800和接受前端请求的端口12800,修改端口可以修改config/applicaiton.yml
访问UI界面:
浏览器打开http://IP:18080,如下图
页面的右下角可以中英文切换,可以切换选择要展示的时间区间的跟踪数据
2.5 SkyWalking Agent
agent探针可以让我们不修改代码的情况下,对java应用上使用到的组件进行动态监控,获取运行数据发送到OAP上进行统计和存储
agent探针在java中是使用java agent技术实现的,不需要更改任何代码,java agent会通过虚拟机(VM)接口来在运行期更改代码
agent探针所有的文件在Skywalking的agent文件夹下。
1> 修改探针默认配置
vi agent/config/agent.config
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.ip:11800}
agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:1}
2> 采样率修改
agent.sample_n_per_3_secs配置说明:
在访问量较少时,链路全量收集不会对系统带来太大负担,能够完整的观测到系统的运行状况。但是在访问量较大时,全量的链路收集,对链路收集的客户端(agent探针)、服务端(SkyWalking OAP)、存储器(例如说 Elastcsearch)都会带来较大的性能开销,甚至会影响应用的正常运行。在访问量级较大的情况下,往往会选择抽样采样,只收集部分链路信息。SkyWalking Agent 在 agent/config/agent.config 配置文件中,定义了 agent.sample_n_per_3_secs 配置项,设置每 3 秒可收集的链路数据的数量。
3> 放置探针:
我们需要将 agent 目录,拷贝到 Java 应用所在的服务器上。这样,Java 应用才可以配置使用该 SkyWalking Agent。通过设置启动参数的方式检测系统,没有代码侵入。
在服务的启动命令中添加参数javaagent、Dskywalking.agent.service_name
nohup java -javaagent:agent/skywalking-agent.jar -Dskywalking.agent.service_name=app_name -jar app.jar > app.log 2>&1 &
以track-et-ext应用为例
nohup /data/ppm/opt/jdk1.8/bin/java \
-javaagent:/data/skywalking/agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=springboot -Dskywalking.collector.backend_service=192.168.136.123:11800
-jar springboot > springboot.log 2>&1 &0
#在同一主机下无须添加Dskywalking.collector.backend_service参数;但在不同主机下部署应用时必须添加该参数
#服务启动成功后访问skywalking查看
#仪表盘:可以查看服务性能,接口总体耗时,数据库sql执行耗时排行等等
拓扑图:可以查看已经检测的服务及服务之间的关系
#追踪:可以看到整个链路中每一个步骤的耗时情况,其中可以看到方法中各个sql执行耗时及对应的sql,可以有针对的优化sql
2.6 skywalking-tomcat
#对于使用tomcat部署的应用服务配置如下
在不同服务器配置tomcat启动项目时将skywalking下的agent目录打包到目标服务器
并且在配置参数时要指明Dskywalking.collector.backend_service,具体配置如下
vi tomcat/webapps/bin/catalina.sh
#在首行添加,和jar启动配置意义相同
CATALINA_OPTS="$CATALINA_OPTS \
-javaagent:/data/skywalking/agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=Tomcat \
-Dskywalking.collector.backend_service=192.168.136.123:11800"; export CATALINA_OPTS
版权归原作者 001号妙蛙种子 所有, 如有侵权,请联系我们删除。