APM(Application Performance Management)应用性能管理,通过各种探针采集并上报数据,收集关键指标,同时搭配数据展示以实现对应用程序性能管理和故障管理的系统化解决方案。
目前主要的一些 APM 工具有: Cat、Zipkin、Pinpoint、SkyWalking,这里主要介绍 SkyWalking ,它是一款优秀的国产 APM 工具,包括了分布式追踪、性能指标分析、应用和服务依赖分析等。
Zabbix、Premetheus、open-falcon等监控系统主要关注服务器硬件指标与系统服务运行状态等,而APM系统则更重视程序内部执行过程指标和服务之间链路调用情况的监控,APM更有利于深入代码找到请求响应“慢”的根本问题,与Zabbix之类的监控是互补关系。
像SpringCloud提供zipkin+seleuth链路追踪解决方案只能追踪到服务请求到路由到微服务模块之间的链路,当涉及到分布式缓存,数据库时,则无法显示其追踪的链路。
下图是常见的微服务的框架,4个实例,2个MySQL、1个Redis。
实际上它有两次完全不同的请求进来:有一次的一个请求会访问 Redis,再去访问 MySQL;
另外一个可能走到另外的服务上,然后直接去 MySQL。
整个分布式追踪的目的是什么?
是为了让我们最终在页面上、UI上、和数据上能够复现这个过程。
我们要拿到整个完整的链路,包括精确的响应时间,访问的方法、访问的 circle,访问的 Redis 的 key等,这些是我们在做分布式追踪的时候需要展现的一个完整的信息。
分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。
Apache Skywalking(Incubator)专门为微服务架构和云原生架构系统而设计并且支持分布式链路追踪的APM系统。
Apache Skywalking(Incubator)通过加载探针-非侵入式的方式收集应用调用链路信息,并对采集的调用链路信息进行分析,生成应用间关系和服务间关系以及服务指标。
Apache Skywalking (Incubating)目前支持多种语言,其中包括Java,.Net Core,Node.js和Go语言。另外社区还发展出了一个叫OpenTracing的组织,旨在推进调用链监控的一些规范和标准工作。
Skywalking支持从6个可视化维度剖析分布式系统的运行情况。
SkyWalking采用组件式开发,易于扩展,主要组件作用如下:
本文接下来通过Docker容器安装Skywalking,并示例整合apisix网关、Spring Boot微服务项目进行APM(Application Performance Management)应用性能管理,检测从接口网关到微服务实例、再到数据库、缓存等存储层之间的链路追踪。
下载agent包,原地址可能需要vpn才能下载
解压下载后的文件,解压后的目录结构如下:
接下来我们需要部署探针。部署探针的方式有很多:
我下面演示一下Java命令行的方式进行启动
首先我们创建一个SpringBoot的web项目,随便写一个接口,然后打包成jar包,在cmd下运行以下指令:
java -javaagent:C:\Users\ADMIN\Desktop\apache-skywalking-apm-es7-8.1.0\apache-skywalking-apm-bin-es7\agent\skywalking -agent.jar=-Dskywalking.agent.service_name=test-service,-Dskywalking.collector.backend_service=192.168.1.2:11800 -jar test.jar
第一个jar包是我们的agent
第二个jar包则是我们项目打包之后的jar包
service_name:为要注册到skywalking的服务名称,会在skywalking的ui界面上显示该服务的名称
collector.backend_service为skywalking grpc注册地址,如果是本地启动的可以改为localhost:11800
在执行上面的命令之前,我们需要先启动skywalking,启动方式也很简单,双击stat.bat即可
如果是linux系统下,直接执行./startup.sh即可
执行完以上操作后,就可以运行我们上面的java -javaagent命令了。
我们看一下效果:
因为我就一个服务,只是为了给大家演示一下,如果是分布式的项目架构,则需要每个微服务模块都加入探针,才能构成完整的链路。
本章可以作为手册使用,等后面自己需要哪些功能,可以来此处对照使用
查看全局服务基本性能指标
SkyWalking能够根据获取的数据自动绘制服务之间的调用关系图,并能识别常见的服务显示在图标上。每条连线的颜色反应了服务之间的调用延迟情况,可以非常直观的看到服务与服务之间的调用状态,连线中间的点能点击,可显示两个服务之间链路的平均响应时间、吞吐率以及SLA等信息。
显示请求的响应内部执行情况,一个完整的请求都经过了哪些服务、执行了哪些代码方法、每个方法的执行时间、执行状态等详细信息,快速定位代码问题。
可通过选择服务、实例、状态和端点名称来搜索调用链路,
可以点击标记红色的端点,查看异常信息
新建需要分析的端点,在左侧列表显示任务及对应的采样请求,右侧显示端点链路及每个端点的堆栈信息。
不同维度告警列表,可分为服务、端点和实例。