为什么要用APM?有业务痛点才要寻求解决方案
优采云 发布时间: 2021-06-04 06:13为什么要用APM?有业务痛点才要寻求解决方案
第 1 部分:APM 基础 1、什么是 APM?
APM,全称:Application Performance Management,目前市面上的系统基本都是基于谷歌的Dapper(大型分布式系统的跟踪系统),翻译门户《谷歌的Dapper中文翻译》
想一想:不遵循这个理论的伪APM,是不是流氓?
APM的核心思想是什么?当应用服务的各个节点相互调用时,会记录一个应用级别的标记,并从中传递。该标记可用于关联各个服务节点之间的关系。例如,如果使用 HTTP 作为两个应用服务节点之间的传输协议,这些标签将被添加到 HTTP 头中。可以看出,如何传递这些标记与应用服务节点之间使用的通信协议有关。常用的协议相对容易添加到这些内容中。一些按需定制可能比较困难,这直接决定了分布式跟踪的实现。系统难度。
2、为什么要使用 APM?
只有在出现业务痛点时,我们才需要找到解决方案。个人认为APM应该优先解决测试环境中的两个场景,基于先测试的原则:
更喜欢关注宏观数据并不意味着测试人员不需要关注微观层面的问题。从测试的角度来说,先解决性能测试环境的数据采样和采集问题,再对生产环境进行评估,在线链路监控需要研发和运维的配合。 [R&D 透视场景] 与测试人员相比是一个弱焦点。
3、 市场上有哪些 APM 工具? 4、先说结论
目前按照Google Dapper的原则设计,Pinpoint优于Zipkin。
Pinpoint对代码零侵入,采用JavaAgent字节码增强技术,并添加启动参数。
并且符合【测试视角场景】宏观性能测试调优监控;
当然,结论为时尚早,会有疑问:
“Spring Cloud Slueth 和 zipkin 是什么关系?”
如需看详细对比,请看下图:
5、影像对比
本质上,Spring Cloud Slueth 不是 Pinpoint 可比的。真正的比较是Zipkin。 Spring Cloud Slueth 专注于链接跟踪和分析,将信息发送到 Zipkin,并使用 Zipkin 的存储来存储信息。当然,Zipkin 也可以使用 ELK 来记录日志并显示,然后通过一个采集服务器性能的脚本将数据存储在 ELK 中,然后可以显示服务器状态信息。 Zipkin 的整体展示也是基于链接分析。
第二部分:Pinpoint 实战1、Pinpoint 架构图
Pinpoint 是一个开源 APM(应用程序性能管理)工具,用于用 Java 编写的大型分布式系统。
架构图对应说明:
2、Pinpoint 数据结构
Pinpoint 消息的数据结构主要包括 Span、Trace 和 TraceId 三种类型。
3、Pinpoint 部署
网上的部署文档太多了。我不会在这里详细解释它们。简单解释一下:
注意版本要求:
有两种开始方式:
方法一:修改tomat目录下的bin/catalina.sh,在CATALINA Server的Control Script中添加如下三行代码:
复制代码
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/home/webapps/service/pp-agent/pinpoint-bootstrap-1.6.2.jar"CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=pp32tomcattest"CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=32tomcat"
第一行:pinpoint-bootstrap-1.6.2.jar的位置
第二行:agentId必须是唯一的,标记一个jvm
第三行:applicationName 表示同一个应用:同一个应用的不同实例应该使用不同的agentId和相同的applicationName
方法二:SpringBoot启动
java -javaagent:/home/webapps/pp-agent/pinpoint-bootstrap-1.6.2.jar -Dpinpoint.agentId=pp32tomcattest -Dpinpoint.applicationName=32tomcat -jar 32tomcat-0.0.1-SNAPSHOT.jar### 4、代码注入是如何工作的
Pinpoint 对代码注入的封装与 AOP 非常相似。当一个类被加载时,通过Interceptor将前后逻辑注入到指定的方法中,可以从这些逻辑中获取系统运行的状态,并且可以通过TraceContext Message创建Trace并发送给Pinpoint服务器。但与AOP不同的是,Pinpoint在封装时更多地考虑了与目标代码交互的能力,因此使用Pinpoint提供的API编写代码比AOP更容易、更专业。
5、Pinpoint 实战效果演示
搭建一个java开源项目jforum,在tomcat下运行,用jmeter测压,100个用户:
查看应用的其他详细信息,如CPU使用率、内存/垃圾采集、TPS和JVM参数。
6、Summary
<p>第一:从宏观上看,PinPoint:整体链路,服务整体状态(cpu、内存等),符合【测试视角场景】性能测试调优监控宏;