一、业务背景
微服务作为当前系统架构的主流选型,虽然可以应对复杂的业务场景,但是随着业务扩展,微服务架构本身的复杂度也会膨胀,对于一些核心的业务流程,其请求链路会涉及到多个业务服务,少则三五个,多则十几个都很常见:
真实的业务场景远比图解复杂,在这种模式下当请求发生故障时,或者进行优化时,需要分析链路性能,追踪调用链路,排查和解决链路故障;
要完成上述流程,需要对请求的链路有完整监控,并且采集和分析各个环节的数据,这样才能清晰地理解系统的行为信息,比如耗时分析,故障原因发现,从而进行优化和解决;能实现这种能力的组件很多,这里来看看基于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包下面维护:
-
apache-skywalking-apm-9.2.0.tar.gz
-
apache-skywalking-java-agent-8.12.0.tgz
将agent解压到和skywalking 目录跟bin 同级2、配置存储方式
配置文件:
config/application.yml
-
3、启动
Windows 直接点击bin/startup.bat
在本地存在gateway,facade,account,三个服务,案例围绕account服务中的请求展开,由于涉及网关服务,还需要添加相关插件的依赖;
将optional-plugins可选插件目录中的两个网关的依赖包,复制到plugins插件目录下;
在服务启动类中添加agent配置,如果在生产环境中,通常会统一在脚本中设置,由于在本地环境演示,基于IDEA工具进行管理;
-javaagent:E:\ruanjian\ELK\apache-skywalking-apm-9.2.0\apache-skywalking-apm-bin\agent\skywalking-agent.jar
-Dskywalking.agent.service_name=identify
-Dskywalking.collector.backend_service=127.0.0.1:11800
-
Maven配置:
<dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-trace</artifactId> <version>${skywalking.version}</version> </dependency> <dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-logback-1.x</artifactId> <version>${skywalking.version}</version> </dependency>
-
logback-spring.xml配置:
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout"> <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern> </layout> </encoder> </appender> <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"> <discardingThreshold>0</discardingThreshold> <queueSize>1024</queueSize> <neverBlock>true</neverBlock> <appender-ref ref="STDOUT"/> </appender> <appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender"> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout"> <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern> </layout> </encoder> </appender> <root level="info"> <appender-ref ref="grpc-log" /> <appender-ref ref="ASYNC"/> </root>
-
忽略一些默认的配置
可以修改配置忽略对eureka、redisson等的心跳检查链路追踪
a.从 /agent/optional-plugins/apm-trace-ignore-plugin-8.12.0.jar 复制到 /agent/plugins
b.在agent/config目录添加文件 apm-trace-ignore-plugin.config
apm-trace-ignore-plugin.config配置:
trace.ignore_path=Redisson/CLUSTER,Redisson/PING,Redisson/AUTH,Redisson/READONLY,Mysql/JDBI/Connection/close