携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情
一、是什么?
SkyWalking是apache基金会下面的一个开源APM项目,为微服务架构和云原生架构系统设计。它通过
探针自动收集所需的指标,并进行分布式追踪。通过这些调用链路以及指标,Skywalking APM会感知
应用间关系和服务间关系,并进行相应的指标统计。Skywalking支持链路追踪和监控应用组件基本涵盖
主流框架和容器,如国产RPC Dubbo和motan等,国际化的spring boot,spring cloud。
官方网站:
skywalking.apache.org/
APM (Application Performance Management) 即应用性能管理系统,是对企业系统即时监控以实现
对应用程序性能管理和故障管理的系统化的解决方案。应用性能管理,主要指对企业的关键业务应用进
行监测、优化,提高企业应用的可靠性和质量,保证用户得到良好的服务,降低IT总拥有成本。
APM系统是可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和
解决问题。
\
二、整体架构是怎样的?
\
整体架构包含如下三个组成部分:
- 探针(agent)负责进行数据的收集,包含了Tracing和Metrics的数据,agent会被安装到服务所在的服务器上,以方便数据的获取。
- 可观测性分析平台OAP(Observability Analysis Platform),接收探针发送的数据,并在内存中使
用分析引擎(Analysis Core)进行数据的整合运算,然后将数据存储到对应的存储介质上,比如
Elasticsearch、MySQL数据库、H2数据库等。同时OAP还使用查询引擎(Query Core)提供HTTP查询接口。 - Skywalking提供单独的UI进行数据的查看,此时UI会调用OAP提供的接口,获取对应的数据然后进行展示。
Tracing的最大特点就是,它在单次请求的范围内,处理信息。 任何的数据、元数据信息都被绑定
到系统中的单个事务上。 例如:一次调用远程服务的RPC执行过程;一次实际的SQL查询语句;
一次HTTP请求的业务性ID。
总结,Metric主要用来进行数据的统计,比如HTTP请求数的计算。Tracing主要包含了某一次请
求的链路数据。
\
三、能为我们做什么?
场景1:
随着分布式系统和微服务架构的出现,一次用户的请求会经过多个系统,不同服务之间的调用关系十分
复杂,任何一个系统出错都可能影响整个请求的处理结果。以往的监控系统往往只能知道单个系统的健
康状况、一次请求的成功失败,无法快速定位失败的根本原因。
场景2:
性能分析:一个服务依赖很多服务,被依赖的服务也依赖了其他服务。如果某个接口耗时突然变长
了,那未必是直接调用的下游服务慢了,也可能是下游的下游慢了造成的,如何快速定位耗时变长
的根本原因呢?
订单下单链路问题。。。
\
详细的介绍:参考博文
四、初体验?
下载支持ES版本:skywalking.apache.org/downloads/
\
下载解压后的目录结构:
修改相应的配置:
1.修改config/application.yml
主要是调整持久化的方式,这里我们使用es。
2.如有需要调整skywalking web的端口:
webapp/webapp.yml
\
\
3.启动
bin/startup.sh.
查看页面: http://localhost:8081
\
五、效果展示
将wsnb-service这个项目集成skywalking。
因为skywalking使用的是agent的方式,所以对我们的代码是令侵入。只要在启动的时候指定agent的路径即可。
java -javaagent:/Users/changchuanfu/Desktop/anchu_env/skywalking/skywalking-test/agent/skywalking-agent.jar
-Dskywalking.agent.service_name=wsnb-search-service
-Dskywalking.collector.backend_service=127.0.0.1:11800
-jar wsnb-search-0.0.1-SNAPSHOT.jar &
参数解释:
-javaagent:/Users/changchuanfu/Desktop/anchu_env/skywalking/skywalking-test/agent/skywalking-agent.jar # 指定agent-jar的位置
-Dskywalking.agent.service_name=wsnb-search-service # 服务名称
-Dskywalking.collector.backend_service=127.0.0.1:11800 # 指定skywalking的地址
\
请求: wsnb-service这个服务的商品搜索接口
效果:可以看到一次请求经过了http、db、es等链路。以及相应的执行时间。
\
\
六、日志增加traceId
为什么要在日志中增加traceId ?
skywalking的ui中是支持traceId进行检索的,所以当出现性能问题的时候,打印出traceId,可以准确找到我们要定位的地方。
官网配合log4j2地址: skywalking.apache.org/docs/main/v…
具体步骤如下:
步骤1: 项目中集成如下依赖
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-log4j-2.x</artifactId>
<version>{project.release.version}</version>
</dependency>
步骤2: 更改log4j2.xml 打印日志的pattern,增加traceId
就完事了。。。。。几乎无侵入吧。
步骤3: 查看效果
非接口请求时,打印N/A
当我们请求接口:可以看到已经打印了TID
步骤4: 当我们有了TID之后,我们就可以到web界面去分析了。
TID: cf2576c957c24643b0e9c9c23317d4b1.104.16519113846380001
\