3全链路监控:SkyWalking
现在微服务架构越来越风行,随之而来全链路监控(APM:Application Performance
Management)工具在性能测试分析软件中得到了越来越多的普及。全链路监控工具是一种应用性能监控工具,通过汇聚业务系统各处理环节的实时数据,分析业务系统各事务处理的交易路径和处理时间,实现对应用的全链路性能监测。目前主流的APM工具,基本都是参考了Google的Dapper(大规模分布式系统的跟踪系统)体系,通过跟踪业务请求的处理过程,完成对应用系统在前后端处理、服务端调用的性能消耗跟踪,提供可视化的界面来展示对跟踪数据的分析。
现在比较流行的全链路工具有韩国出品的Pinpoint、中国吴晟出品的SkyWalking、Twitter出品的Zipkin以及美团和携程出品的CAT,这一节我们来介绍SkyWalking。
图26为SkyWalking架构图。
图26 SkyWalking架构图
SkyWalking 仅可以监控JAVA程序,其核心是数据分析和度量结果的存储平台,通过
HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量数据,SkyWalking Collecter 对数据进行分析和聚合,存储到 Elasticsearch、H2、MySQL、TiDB 等其一即可,最后我们可以通过
SkyWalking UI 的可视化界面对最终的结果进行查看。SkyWalking 支持从多个来源和多种格式收集数据:多种语言的 SkyWalking Agent 、Zipkin v1/v2 、Istio 勘测、Envoy 度量等数据格式。
整体架构看似模块有点多,但在实际上还是比较清晰的,主要就是通过收集各种格式的数据进行存储,然后展示。所以搭建 SkyWalking 服务我们需要关注的是 SkyWalking Collecter、SkyWalking UI 和 存储设备,SkyWalking Collecter、SkyWalking UI 官方下载安装包内已包含,最终我们只需考虑存储设备即可。下面主要介绍SkyWalking安装预配置。
1)到http://skywalking.apache.org/downloads/下载源代码(注意:这个页面经常变化)。如图27所示。
图27 SkyWalking下载界面
2)下载后放在本地一个非中文路径下。
3)拷贝mysql-connector-java-5.1.46.jar到oap-libs目录下。
4)修改config/application.yml 文件(安装skywalking系统中必须安装MySQL)。
mysql: properties: jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest"} dataSource.user: ${SW_DATA_SOURCE_USER:root} dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root@123456} dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true} dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250} dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048} dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true} dataSource.useSSL: false metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000} maxSizeOfArrayColumn: ${SW_STORAGE_MAX_SIZE_OF_ARRAY_COLUMN:20}
其中
- 3306:为MySQL默认端口。
- swtest:为SkyWalking所需要的数据库名称。
- root/123456:为MySQL数据库登录名和密码。
- dataSource.useSSL: false:为数据源不用SSL进行加密。
5)在MySQL中建立数据库swtest。
6)修改webapp/webapp.yml。
server: port: 18080 collector: path: /graphql ribbon: ReadTimeout: 10000 # Point to all backend's restHost:restPort, split by , listOfServers: 127.0.0.1:12800
webapp.yml配置文件中默认端口为8080,因为这个容易与TOMCAT冲突,改为18080。
7)启动bin/startup.bat,弹出两个窗口。如图28所示。
图28 启动SkyWalking
8)打开浏览器,在地址栏中输入:http://127.0.0.1:18080/。由于没有监控任何应用,所以内容是空的。
- 监控 Tomcat应用,在tomcat/bin/catalina.bat中输入如下内容。
set"CATALINA_OPTS=-javaagent:%SKYWALKING_HOME%\agent\skywalking-agent.jar"
在%SKYWALKING_HOME%改为SkyWalking的安装路径,下面不再累赘。
- 监控任意一个jar或war文件,比如监控 a.jar文件
java -javaagent: %SKYWALKING_HOME%\agent\skyWalking-agent.jar=agent.service_name=Jerrygu -jar a.jar --httpPort=8081
在这里,我加载jenkins包jenkins.war,命令如下。
java java -server -Xms256m -Xmx256m -Dspring.profiles.active=dev -Dspring.cloud.nacos.discovery.server-addr=127.0.0.1:8081 -javaagent:C:\apache\apache-skywalking-apm-bin-es7\agent\skyWalking-agent.jar=agent.service_name=Jerrygu -jar jenkins.war --httpPort=8081
8)在监控系统中执行一些操作,然后在浏览中显示如图29显示被监控结果。
图29 显示被监控程序的监控结果
在这里。
- 当前服务:其中jerryGu为jenkins服务,You_ApplicationName为Tomcat服务。
- 当前节点:基于服务下的目录。
9)切换到拓扑菜单,就可以看到整体的网络拓扑结构。如图30所示。
图31 监控网络拓扑结构
如果你监控的是一个微服务,那么微服务上每一个的节点都可以以拓扑图的形式被监控到。
10)点击菜单中的DataBase,可以显示被监测软件访问到的数据库的状态,如图32所示。
图32 监测被监测软件访问到的数据库的状态
在图的左下方,如果你的程序中存在着慢SQL,可以在这里显示。
11)点击每个监控元素左上角的hellip;,可以设置监控信息。如图33所示。
图33 设置监控信息
SkyWalking官方网站:https://skywalking.apache.org/。