什么是APM系统
参考文档:
什么是APM系统
APM系统概述
APM(Application Performance Management)即应用性能管理系统,是对企业系统及时监控以实现对应用程序性能管理和故障管理的系统化解决方案。应用性能管理,主要指对企业的关键业务应用进行监控、优化,提高企业的应用的可靠性和治理,保证用户得到良好的服务,减低IT总拥有成本。
APM系统是可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能快速定位和解决问题。
分布式链路追踪
随着分布式系统和微服务架构的出现,一次用户的请求经过多个系统,不同服务之间的调用关系十分复杂,任何一个系统出错都可能影响整个请求的请求结果。以往的监控系统往往只能监控单个系统的健康状态,一次请求的成功失败,无法快速定位失败的根本原因。
除此之外,复杂的分布式系统也面临如下问题:
- 性能分析:一个服务依赖很多服务,被依赖的服务也依赖了其他服务,如果某个接口耗时突然变长了,那未必是直接调用的下游服务慢了,也可能是下游的下游慢了造成的,如何快速定位耗时变长的根本原因呢?
- 链路梳理:需求迭代很快,系统之间调用关系变化频繁,靠人工很难梳理清楚系统链路拓扑。
为了解决这样的问题,Google推出了一个分布式链路追踪系统Dapper,之后各个互联网公司都参照Dapper的思想推出了自己的分布式链路追踪系统,而这些系统就是分布式系统下的APM系统。
什么是OpenTracing
- 背景:Google 2004年开始内部使用Dapper,2010年Dapper文章发表,2012年Zipkin发布。分布式系统跟踪不是一个新的话题,它已经存在快14年了!
问题:如果分布式跟踪是对日志和监控指标的重要补充,为什么到2016年大家都还没有广泛使用它?
- 因为要让自己的应用支持分布式跟踪太难了!不仅需要在进程内进行跟踪数据的传递,还要在进程之间传递。更难的是,还需要其他组件对分布式跟踪的支持,其中包括:
- 开源的服务(比如NGINX, Cassandra, Redis)
- 在服务内引入的开源库(比如 grpc, ORMs)
- 已有的业务逻辑
- 因为要让自己的应用支持分布式跟踪太难了!不仅需要在进程内进行跟踪数据的传递,还要在进程之间传递。更难的是,还需要其他组件对分布式跟踪的支持,其中包括:
解决办法:制定一个统一的标准,然后让大家都遵守这个标准来实现分布式跟踪信息的描述和传递。这样只要使用的是按照标准实现的服务,就能够进行完整的分布式跟踪。这个标准就是OpenTracing
OpenTracing是什么?
后台无关的一套接口,被跟踪的服务只需要调用这套接口,就可以被任何实现这套接口的跟踪后台(比如Zipkin, Jaeger等等)支持,而作为一个跟踪后台,只要实现了个这套接口,就可以跟踪到任何调用这套接口的服务
标准化了对跟踪最小单位Span的管理:定义了开始Span,结束Span和记录Span耗时的API。Span的定义可以参照开源分布式跟踪系统Zipkin介绍(架构篇)
标准化了进程间跟踪数据传递的方式:定义了一套API方便跟踪数据的传递
标准化了进程内当前Span的管理:定义了存储和获取当前Span的API
OpenTracing不做什么?
不对进程间传递的跟踪数据的编码定标准
不对向后台发送的跟踪数据的编码定标准
原因:让跟踪后台自己决定最适合他们的编码方式
主流的开源APM产品
PinPoint
Pinpoint是由一个韩国团队实现并开源的,针对Java编写了大规模分布式系统设计。通过JavaAgent的机制做字节代码植入,实现加入traceid和获取性能数据的目录,对代码零入侵。
github地址:https://github.com/naver/pinpoint
Skywalking
Skywalking是Apache基金会下面的一个开源APM项目,为微服务和云原生架构系统设计。它通过探针自动收集所需的指标,并进行分布式追踪。通过这些调用链路及指标,Skywalking APM会感知应用间关系和服务间关系,并进行相应的指标统计。Skywalking支持链路追踪和监控应用组件基本涵盖主流框架和容器。如国产RPC Dubbo和motan等,国际化spring boot,spring cloud
官网地址:https://skywalking.apache.org
Zipkin
Zipkin是由Twitter开源,是分布式里链路调用监控系统,聚合个业务系统调用延迟数据,达到链路调用监控跟踪。Zipkin基于Google的Dapper论文实现,主要完成数据的收集、存储、搜索宇界面展示。
官网地址:https://zipkin.io
优点:简单易用
CAT
CAT是由大宗点评开源的项目,基于java开发的实时应用监控平台,包括实时应用监控、业务监控,可以提供十几张报表展示。
缺点:代码侵入性