简便疾速的实现对分布式系统的监控;
一、业务背景
微服务作为以后零碎架构的支流选型,尽管能够应答简单的业务场景,然而随着业务扩大,微服务架构自身的复杂度也会收缩,对于一些外围的业务流程,其申请链路会波及到多个业务服务,少则三五个,多则十几个都很常见:
实在的业务场景远比图解简单,在这种模式下当申请产生故障时,或者进行优化时,须要剖析链路性能,追踪调用链路,排查和解决链路故障;
要实现上述流程,须要对申请的链路有残缺监控,并且采集和剖析各个环节的数据,这样能力清晰的了解零碎的行为信息,比方耗时剖析,故障起因发现,从而进行优化和解决;能实现这种能力的组件很多,这里来看看基于 SkyWalking9 的实际形式;
二、组件原理
Skywalking 是 APM 标准的国产开源分布式链路追踪零碎,APM(Application-Performance-Management)即利用性能治理,反对对 SpringCloud 微服务集成,并且无代码层面的侵入:
构造体系
业务机制
SpringCloud:分布式系统中的服务,启动时配置代理即可;
Agent:以探针的形式进行申请链路的数据采集,并向治理服务上报;
OAP-Service:接收数据,实现数据的存储和展现;
Storage:数据的存储层,反对 ElasticSearch、Mysql、H2 多种形式;
UI 界面:数据的可视化展现界面;
工作流程,服务通过探针的形式接入数据采集的性能,之后申请链路的相干解决行为会上报到 OAP 服务中,进行数据的聚合治理和剖析,并存储在长久层,而后能够通过 UI 界面进行可视化出现;
三、装置部署
1、版本形容
skywalking 在之前的旧版本中,apm 与 agent 是在一个包中的,在 9.0 的版本中是须要离开下载的;agent 包下载解压之后,也将其放到 apm 包上面保护:
- skywalking-apm-9.1.0.tar.gz
- skywalking-java-agent-8.10.0.tgz
2、配置存储形式
Skywalking 数据存储的组件有多种选型形式,这里不便本地调试,就抉择 MySQL 数据库,在生产环境中通常抉择 ElasticSearch 组件;
配置文件:config/application.yml
storage:
selector: ${SW_STORAGE:mysql}
mysql:
properties:
jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest?rewriteBatchedStatements=true"}
dataSource.user: ${SW_DATA_SOURCE_USER:username}
dataSource.password: ${SW_DATA_SOURCE_PASSWORD:password}
须要留神的是,要在本地的 MySQL 中新建 swtest 数据库,采纳 latin1 字符编码,能够防止索引长度的问题,表的创立是主动的,而后须要在包中增加 MySQL 依赖;
3、启动与进行
- 启动 oap 服务:sh bin/oapService.sh
- 启动 UI 界面:sh bin/webappService.sh
- 服务进行命令:jps 查看,kill 相干编号;
UI 界面服务默认是 8080 端口,如果存在占用问题,能够批改:webapp/webapp.yml
文件,更换端口;启动实现后拜访 LocalIP:port
即可;
4、服务集成
在本地存在 gateway
,facade
,account
,三个服务,案例围绕account
服务中的申请开展,因为波及网关服务,还须要增加相干插件的依赖;
将 optional-plugins
可选插件目录中的两个网关的依赖包,复制到 plugins
插件目录下;
在服务启动类中增加 agent
配置,如果在生产环境中,通常会对立在脚本中设置,因为在本地环境演示,基于 IDEA 工具进行治理;
-javaagent: 本地门路 /agent/skywalking-agent.jar -Dskywalking.agent.service_name=gateway
-javaagent: 本地门路 /agent/skywalking-agent.jar -Dskywalking.agent.service_name=facade
-javaagent: 本地门路 /agent/skywalking-agent.jar -Dskywalking.agent.service_name=account
这样全副的配置就实现了,顺次启动 skywalking 相干服务,与这里配置的三个微服务,上面再来看看性能细节;
四、性能细节
1、服务监控
相干服务启动实现后,拜访 skywalking 界面,主页加载的即上述配置的三个微服务,这样阐明整个流程是失常的,点击服务名称能够查看服务相干的细节指标;
2、拓补结构图
申请通过 gateway
网关服务,通过 facade
门面服务,达到 account
业务服务,实现一次调用后,查看申请的拓补结构图(即 Topology 一栏);
能够清晰的看到申请的路由链路,以及相干服务拜访的数据库地址,对于微服务架构中的简单接口来说,借助该拓补模型,既能够疾速了解业务逻辑,同时在出具文档时能够节俭很多画图工夫;
3、链路跟踪
下面只是申请的拓补结构图,在理论利用中还是更偏重链路跟踪,查看 account
服务申请链路(即 Trace 一栏);
skywalking 组件对于开发来说,最罕用的就是该性能,这里采集了申请链路上的各个节点,以及执行的耗时剖析,点击相干节点能够查看详细信息,针对异样申请同样能够采集到异样信息的形容;
这样能够极大的晋升问题排查的效率,尤其对于那种路由十多个服务的业务逻辑;
4、数据库监控
尽管在整个配置中没有显式的增加对 MySQL 的监控,然而 skywalking 仍旧能够实现对服务中的数据库监控,对于这些指标细节不过多形容,能够自行查阅文档;
本篇文章只是站在开发的角度,总结 skywalking 的利用形式,并未波及过多的细节原理,其它弱小的功能设计,对于开发来说同样值得参考。
五、源码参考
利用仓库:https://gitee.com/cicadasmile/butte-flyer-parent
组件封装:https://gitee.com/cicadasmile/butte-frame-parent