应用性能监控-- SkyWalking
文章目录
SkyWalking 是中国人吴晟开源的应用性能管理系统(APM)工具,使用 Java 语言开发,现在已属于 Apache 旗下开源项目,官网 https://skywalking.apache.org/
SkyWalking 的核心是数据分析和度量结果的存储平台,通过 HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量数据,SkyWalking Collecter 对数据进行分析和聚合,存储到 Elasticsearch、H2、MySQL、TiDB 等其一即可,最后我们可以通过 SkyWalking UI 的可视化界面对最终的结果进行查看。
APM 与 SkyWalking
APM(Application Performance Management),即应用性能管理系统。对应用程序单点性能与整个分布式应用进行监控,记录每一个环节程序执行状况,通过图表与报表的西施让运维人员随时掌握系统的运行状况。
特点:
- 实现强大的链路跟踪
- 相比 Zipkin,拥有更友好、更详细的监控项
- 能自动生成可视化图表
SkyWalking 与 Sleuth + Zipkin 比较
SkyWalking | Sleuth + Zipkin | |
---|---|---|
链路跟踪可视化 | 有 | 有 |
聚合报表 | 丰富 | 很少 |
服务依赖图 | 形象直观 | 简单依赖图 |
监控埋点方式 | 无侵入,采用 Java Agent 字节码增强 | 侵入式 |
Java VM 指标监控 | 具备 | 不具有 |
支持报警 | 有,可自定义 | 不具有 |
存储机制 | ES、Mysql等 | ES、Mysql等 |
文档支持 | Apache 支持,国内文档滞后 | 文档丰富 |
SkyWalking 服务端与 Java Agent
环境要求
- JDK 8
SkyWalking 部署
SkyWalking 服务端用于接收来自 Java Agent 客户端发过来的链路跟踪与指标数据,汇总统计后由 SkyWalking UI 负责展示。
端口占用:
- 11800 端口:gPRC 默认监听的服务端口
- 12800 端口:HTTP 默认监听的端口
- 8080 端口:SkyWalking UI 应用默认监听的端口
安装步骤
第一步,安装 ElasticSearch 全文搜索引擎(存储推荐使用 ElasticSearch)。这里推荐查阅这里。
第二步,下载 SkyWalking 服务端
下载路径,点击 Distribution,下载 for Elasticsearch 7。下载完成后解压在不带中文字样的路径下。
第三步,配置 SkyWalking 数据源。在 application.yml 配置中,搜索 elasticsearch 的配置。
修改后的配置是
storage:
# selector: ${SW_STORAGE:h2}
selector: ${SW_STORAGE:elasticsearch7}
可能会遇到的问题
在bin目录下执行 startup.bat 时,startup.bat 闪退,不会启动 Skywalking-Collector 和 Skywalking-Webapp。
解决方案:将 skywalkinge 解压之后的文件夹放到 JDK 安装目录的上一级。例如 D:\Program Files\Java 是 java 环境地址,放在 D:\apache-skywalking-apm-bin-es7 上。
也有可能是 8080 端口被占用,这个得排查一下。
端口占用:
- 11800:gRPC 端口,数据收集服务。
- 12800:HTTP 端口,数据收集服务。
- 8080:SkyWalking UI,用于展示数据。
安装 SkyWalking Java Agent
通过 java agent 探针技术,允许应用开发的时候再通过启动增加 javaagent 参数来外挂一些额外的程序。从而完成无侵入的监控埋点。
首先我们这里先说明白服务间的调用关系,假设有三个微服务,分别是:a-service、b-service 和 c-service,他们之间的调用关系是 a->b->c。
其次,我们可以在 \apache-skywalking-apm-bin-es7\agent
路径下找到 skywalking-agent.jar 文件,如果是在生产环境下,启动命令为
java -javaagent:./skywalking-agent.jar -Dskywalking.agent.service_name=a-service -Dskywalking.collector.backend_service=localhost:11800 -Dskywalking.logging.file_name=a-service-api.log -jar a-service.jar
如果是开发环境运行,需要在 Run/Debug Configurations 中的 Configuration->Environment->VM options 添加配置参数
// a-service
-javaagent:D:\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar -Dskywalking.agent.service_name=a-service -Dskywalking.collector.backend_service=localhost:11800 -Dskywalking.logging.file_name=a-service-api.log
// b-service
-javaagent:D:\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar -Dskywalking.agent.service_name=b-service -Dskywalking.collector.backend_service=localhost:11800 -Dskywalking.logging.file_name=b-service-api.log
// c-service
-javaagent:D:\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar -Dskywalking.agent.service_name=c-service -Dskywalking.collector.backend_service=localhost:11800 -Dskywalking.logging.file_name=c-service-api.log
Dskywalking.agent.service_name:指定在 SkyWalking 上报数据时的服务名
Dskywalking.collector.backend_service:指定 SkyWalking 服务端的通信 IP 与端口
Dskywalking.logging.file_name:指定 agent 生成的上报日志文件名,日志文件保存 agent 的 logs 目录中,例如:\apache-skywalking-apm-bin-es7\agent\logs
SkyWalking 常用视图
使用 Apifox 进行压力测试。
打开 SkyWalking UI,默认显示全局监控,自动刷新设置 1 秒。
分别显示的是,各服务每分钟访问次数,高延迟服务列表,服务状态指数,高延迟端点列表,全局响应延迟比检测图,全局响应热力图。
- 服务状态指数:越接近 1 状态越好。
- 高延迟端点列表:是高延迟服务的列出,第一个是我们主要排查的服务对象。
压力测试结果。
拓扑图
点击拓扑图可以看到服务间的依赖关系。
链路追踪图
附页
java agent
Java agent 提供了一种在加载字节码时,对字节码进行修改的方式。他共有两种方式执行,一种是在 main 方法执行之前,通过 premain 来实现,另一种是在程序运行中,通过 attach api 来实现。
定义一个简单的 Jave Agent 扩展类。
public class SimpleAgent {
public static void premain(String agentArgs, Instrumentation inst) {
System.out.println("==========开始执行premain==========");
}
}
之后,在 META-INF 目录下找到 MANIFEST.MF 文件,添加内容。
Manifest-Version:1.0
Premain-Class:info.mufeng.agent.SimpleAgent
然后,在启动服务的时候加上-javaagent:agent.jar 额外的附加参数。启动的时候会输出如下日志:
==========开始执行premain==========