什么是Skywalking
Skywalking是一个适用于分布式系统的性能监控工具
文档地址:https://skyapm.github.io/document-cn-translation-of-skywalking/
功能:
- 服务,服务实例,端点指标分析
- 根本原因分析
- 服务拓扑图分析
- 服务,服务实例和端点依赖性分析
- 检测到慢速服务和端点
- 性能优化
- 分布式跟踪和上下文传播
- 数据库访问指标
- 告警
安装单机版Skywalking
下载
- 前往https://archive.apache.org/dist/skywalking/6.6.0/,根据自己的操作系统,下载即可。
建议使用和我一致的版本,目前Skywalking还在处于比较活跃的开发状态中,不同的版本它的表现是不一样的,所以最好和我保持一致,避免踩到不必要的坑。
环境需求
- JDK版本在JDK8-JDK12之间
- 注意如果使用ElasticSearch7版本,那么需要JDK11+
- 确保如下端口可用:
- 11800:和Skywalking通信的gRPC端口
- 12800:和Skywalking通信的HTTP端口
- 8080:UI所占用的端口
可以使用如下命令查询端口是否被占用
#Linux/macOs netstat -an|grep 8080 #对于使用windows的同学,可以使用 netstat -ano|findstr 8080
如果没有结果,就说明8080端口没有被占用,其他端口也是一样。
安装&启动
安装Skywaling比较简单,解压,然后根据操作系统的不同,执行对应命令即可。
Linux或macOS
执行:
cd apache-skywalking-apm-bin/bin
sh startup.sh
Windows
执行:
cd apache-skywalking-apm-bin/bin
startup.bat
我们启动后,看到这段信息就说明启动成功了。
如果你没有启动成功,可以切换到logs目录,查看日志详情。
启动成功后,我们访问localhost:8080
:
Skywalking已经搭建完成了,那么我们如何使用呢?
关于如何使用,我也专门写了一番手记,一起看看:
Skywaking使用
该文档基于Skywalking6.6.0编写,理论支持Skywaling6.0+所有版本
本文探讨如何使用Skywalking监控应用。
Skywalking有多种使用方式,目前最流行(也是最强大)的使用方式是基于Java agent的。
配置java agent
- 找到SkyWaking包中的
agent
目录 - 将
agent
目录拷贝到任意位置 - 配置
config/agent.config
- 将
agent.service_name
修改成你的微服务名称: - 如果Skywalking和微服务部署在不同服务器,还需要修改collector.backend_service的值,该配置用来指定微服务和Skywalking通信的地址,默认是
127.0.0.1:11800
,按需修改即可。当然agent.config
文件里面有很多配置,具体配置可以去官方文档查阅。
- 将
我们将agent目录拷贝到了桌面,然后修改agent.service_name改为自己服务的名称:
启动应用
java -jar
启动应用
例如,有一个Spring Boot应用,则修改完agent
目录后:
- 执行如下命令启动:
# 注意-javaagent必须在-jar之前 java -javaagent:/Users/weichenglong/Desktop/agent/skywalking-agent.jar -jar aym-api.jar
- 如果在IDE中启动测试,则参考下图配置,然后启动即可。
我们启动项目后,调用项目的一写Rest API就可以进行一些测试了,这里我用了IDEA的一个插件,RestfulTool:
安装之后,它就可以自动识别出当前项目中的所有API:
我们通过这个插件,随便访问几个接口:
然后,我们再进入页面,点击右上角的刷新,然后我们就能看到以下信息:
页面上展示了项目的cpm,cpm在一定程度上可以体现出当前应用的吞吐量或者并发数
同时也可以展示出最慢的几个端点。
这里展示了对应API响应时间的统计:
第二,是数据库视图:
它可以展示出数据库的一些统计信息,比如数据库的平均响应时间、吞吐量、服务质量、响应时间等。
一般来讲我们会更多关注数据库响应时间、吞吐量以及响应时间的统计值,还有最关注的是项目里最慢的几个API。
点击拓扑图
这里可以看到用户请求的去向。
这个图还是很有意义的,对于开发人员,可以查看每个服务的位置,对于架构师也可以很好的帮他检测当前项目的实现和他的规划是否一致。
点击服务,还可以展示出一些详情,列出一些性能指标,比如响应时间、cpm等等。
点击追踪:
这是整个Skywalking里面最重要的一个导航,在这个页面可以详细的展示指定应用有哪些API被访问了,总共花费了多久,每个API在每个阶段花费了多久。
比如:
/products这个API一共花费了8871毫秒。
其中:
5980毫秒花费在了SpringMVC上。
点击我们查看详情:
我们可以看到访问的数据库信息,以及执行的sql,这里是mysql重复性校验的一个sql。
再看下面:
这是真正执行业务的sql。
最后一个是提交:
这里每个阶段花费了多久,都能一目了然。
一旦发现我们的应用性能达不到要求,就可以通过追踪页面最左边,查看哪些API耗时过长。
通过右边,可以分析是这些API的哪个环节耗时过长,是API执行的慢,还是数据库访问慢,都可以迅速分析出来。
这样我们定位性能瓶颈的时候,就可以有的放矢了。
同时Skywalking还有告警和指标对比的能力:
不难发现,Skylking的功能还是非常强大。