apm是什么意思啊 apm是什么

篇幅一:APM 基础篇1、什么是 APM?

APM,全称:Application Performance Management ,目前市面的系统基本都是参考 Google 的 Dapper(大规模分布式系统的跟踪系统)来做的,翻译传送门《google 的Dapper 中文翻译》
思考下:不遵守该理论的是伪 APM,耍流氓吗?
APM 的核心思想是什么? 在应用服务各节点相互调用的时候,从中记录并传递一个应用级别的标记,这个标记可以用来关联各个服务节点之间的关系 。比如两个应用服务节点之间使用 HTTP 作为传输协议的话,那么这些标记就会被加入到 HTTP 头中 。可见如何传递这些标记是与应用服务节点之间使用的通讯协议有关的,常用的协议就相对容易加入这些内容,一些按需定制的可能就相对困难些,这一点也直接决定了实现分布式追踪系统的难度 。
2、为什么要用 APM?有业务痛点,才要寻求解决方案,个人认为,APM 需要优先解决测试环境下两个场景问题,基于测试先行的原则考虑:

apm是什么意思啊  apm是什么

文章插图
优先关注宏观数据,并不是说测试人员无须关注微观层面的问题,在测试角度来看,先解决性能测试环境的数据采样、收集问题,再去评估生产环境,而线上的链路监控需要研发跟运维去配合,【研发角度场景】相对于测试人员来说是弱关注了 。
3、市面上有哪些 APM 工具?PinpointPinpoint is an open source APM (Application Performance Management) tool for large-scale distributed systems written in Java.https://github.com/naver/pinpointSkyWalkingA distributed tracing system, and APM ( Application Performance Monitoring ) .http://skywalking.orgZipkinZipkin is a distributed tracing system. It helps gather timing data needed to troubleshoot latency problems in microservice architectures. It manages both the collection and lookup of this data. Zipkin’s design is based on the Google Dapper paper.http://zipkin.io/CAT (大众点评)CAT 基于 Java 开发的实时应用监控平台,包括实时应用监控,业务监控 。https://github.com/dianping/cat4、先说结论目前比较贴合 Google Dapper 原理设计的,Pinpoint 优于 Zipkin 。Pinpoint 对代码的零侵入,运用 JavaAgent 字节码增强技术,添加启动参数即可 。并且符合【测试角度场景】性能测试调优监控的宏观;当然,结论太早了,会有疑惑:
“ Spring Cloud Slueth 和 zipkin 之间的关系是什么? “
需要看详细对比的,详见下图:
apm是什么意思啊  apm是什么

文章插图
5、再说对比本质上 Spring Cloud Slueth 与 Pinpoint 没有可比性,真正对比的是 Zipkin,Spring Cloud Slueth 聚焦在链路追踪和分析,将信息发送到 Zipkin,利用 Zipkin 的存储来存储信息,当然,Zipkin 也可以使用 ELK 来记录日志和展示,再通过收集服务器性能的脚本把数据存储到 ELK,则可以展示服务器状况信息了 。Zipkin 的总体展示,也是基于链路分析为主 。
apm是什么意思啊  apm是什么

文章插图
篇幅二:Pinpoint 实战篇1、Pinpoint 架构图Pinpoint is an open source APM (Application Performance Management) tool for large-scale distributed systems written in Java.
apm是什么意思啊  apm是什么

文章插图
架构图对应说明:
Pinpoint-Collector:收集各种性能数据Pinpoint-Agent:探针与应用服务器(例如 tomcat) 关联,部署到同一台服务器上Pinpoint-Web:将收集到的数据层现在 web 展示HBase Storage:收集到数据存到 HBase 中2、Pinpoint 的数据结构Pinpoint 消息的数据结构主要包含三种类型 Span,Trace 和 TraceId 。
Span 是最基本的调用追踪单元当***调用到达的时候,Span 指代处理该调用的作业,并且携带追踪数据 。为了实现代码级别的可见性,Span 下面还包含一层 SpanEvent 的数据结构 。每个 Span 都包含一个 SpanId 。Trace 是一组相互关联的 Span*** 同一个 Trace 下的 Span 共享一个 TransactionId,而且会按照 SpanId 和 ParentSpanId 排列成一棵有层级关系的树形结构 。TraceId 是 TransactionId、SpanId 和 ParentSpanId 的组合TransactionId(TxId)是一个交易下的横跨整个分布式系统收发消息的 ID,其必须在整个服务器组中是全局唯一的 。也就是说 TransactionId 识别了整个调用链;SpanId(SpanId)是处理***调用作业的 ID,当一个调用到达一个节点的时候随即产生;ParentSpanId(pSpanId)顾名思义,就是产生当前 Span 的调用方 Span 的 ID 。如果一个节点是交易的最初发起方,其 ParentSpanId 是 -1,以标志其是整个交易的根 Span 。下图能够比较直观的说明这些 ID 结构之间的关系 。

推荐阅读