APM
Kuzury
这个作者很懒,什么都没留下…
展开
-
APM 数据传输之远程调用(RPC)
远程调用(RPC)客户端(发送端)在远程调用的客户端,需要把跟踪信息附着在远程调用的数据中。举例来说,在一次http请求中,A进程使用http协议请求B进程,则A进程是RPC客户端。例1:在A进程中,如果拦截a1和a2方法,a1的拦截器是a1‘,a2的拦截器是a2’,并且a1调用了a2,那么在跟踪的过程中,需要顺序记录的数据如下:a1’: - 创建new trace - 在span record原创 2017-01-19 09:53:17 · 865 阅读 · 0 评论 -
Logstash+Kafka网络通道之消息编解码
一、编码Encode数据在入logstash之前,以UDP为例,注意UDP序列化后byte[]大小为固定的65507,需要取出真实数据字段进行BASE64,这里有个隐藏问题是BASE64会使数组长度变化为原来的4/3,所以太长的byte流可能就会超限无法发送,需要重新拆分,不过我们这里没这个问题。 final TBase dto = (TBase) message; final byte[] i原创 2017-01-12 09:51:59 · 2543 阅读 · 0 评论 -
APM 插件开发示例
apm plugin开发示例 service声明 /META-INF/services/com.navercorp.apm.bootstrap.plugin.ProfilerPlugin 内容:com.navercorp.apm.plugin.sample.SamplePlugin // 插件的类名,实现ProfilerPlugin, TransformTemplateAwar原创 2017-01-19 09:34:01 · 2611 阅读 · 0 评论 -
APM 监控方法拦截器
基础方法拦截APM内置的方法拦截器是com.navercorp.apm .bootstrap.interceptor.BasicMethodInterceptor这个拦截器不能在RPC边界的方法中使用,例如http client, http server。 这个拦截器的作用是在已有的Span中添加一个Span Event。 因为在拦截器中 Trace trace = traceContext.原创 2017-01-19 09:37:53 · 1376 阅读 · 0 评论 -
JAVA AgentMain开发示例
agentmain方式premain时Java SE5开始就提供的代理方式,给了开发者诸多惊喜,不过也有些须不便,由于其必须在命令行指定代理jar,并且代理类必须在main方法前启动。因此,要 求开发者在应用前就必须确认代理的处理逻辑和参数内容等等,在有些场合下,这是比较苦难的。比如正常的生产环境下,一般不会开启代理功能,但是在发生问题 时,我们不希望停止应用就能够动态的去修改一些类的行为,以帮助排原创 2017-04-11 19:43:06 · 6044 阅读 · 0 评论 -
JAVA字节码增强技术之ASM分析2
3、使用ASMAPI生成和转换class中的方法前面已经简单介绍过已编译的class文件中的方法是由字节码指令序列构成,因此使用ASMAPI生成和转换class文件中的方法需要具备基本的字节码指令知识和基本的字节码指令运行原理。3.1、执行模型 我们知道java代码是运行在java虚拟机的线程中,每一个线程拥有各自的执行栈,执行栈由多个帧组成。每个帧可以代表一个方法的运行转载 2017-03-17 10:10:29 · 658 阅读 · 0 评论 -
JAVA字节码增强技术之ASM
ASM是一款基于java字节码层面的代码分析和修改工具;无需提供源代码即可对应用嵌入所需debug代码,用于应用API性能分析,代码优化和代码混淆等工作。ASM的目标是生成,转换和分析已编译的java class文件,可使用ASM工具读/写/转换JVM指令集。ASM工具提供两种方式来产生和转换已编译的class文件,它们分别是基于事件和基于对象的表示模型。其中,基于事件的表示模型使用一个有序的事转载 2017-03-17 10:07:23 · 10515 阅读 · 0 评论 -
JAVA Agent 简析及开发示例
Java.lang.Instrument包是在JDK5引入的,程序员通过修改方法的字节码实现动态修改类代码。这通常是在类的main方法调用之前进行预处理的操作,通过java指定该类的代理类来实现。代理 (agent) 是在你的main方法前的一个拦截器 (interceptor),也就是在main方法执行之前,执行agent的代码。agent的代码与你的main方法在同一个JVM中运行,并被同一个原创 2017-03-17 10:00:38 · 10300 阅读 · 0 评论 -
APM调用链追踪之跟踪异步调用
跟踪异步调用所谓异步调用,是指创建任务和处理任务是在2个不同的线程上的调用。如果要跟踪异步调用,那么需要: 1.拦截创建异步任务的方法,并且赋予一个AsyncTraceId 2.把AsyncTraceId传给异步任务的处理方法 3.在异步任务的处理类中添加AsyncTraceIdAccessor字段 4.拦截处理异步任务的方法,并且该拦截器需要继承SpanAsyncEventSimpleAr原创 2017-01-19 09:49:57 · 4506 阅读 · 1 评论 -
JAVA探针开发之方法拦截器与过滤器
使用方法过滤器来设置多个方法的拦截器如果需要给一个类中的多个方法添加同一个拦截器,那么可以使用方法过滤器来获得一组方法,不再需要指定每一个方法的名称和参数列表来获取目标方法的InstrumentMethod。 例如,一个类中存在多个名称为recordMe,但是参数列表不同的方法,使用方法过滤器来设置目标方法的拦截器可以如下操作:for (InstrumentMethod method : inst原创 2017-01-19 09:48:53 · 3955 阅读 · 0 评论 -
APM plugin必注意要点
ServiceType 和 AnnotationKey的编码值必须唯一. 如果编写一个私有插件, 可以使用为私下使用保留的编码值。APM不会给任何东西分配这些值。否则需要联系 APM dev team 来为插件分配编码。 私下使用的ServiceType编码 Server: 1900 ~ 1999 DB client: 2900 ~ 2999 C原创 2017-01-11 14:40:10 · 1046 阅读 · 0 评论 -
APM agent 修改字节码机制
Tomcat plugin为例,TomcatPlugin实现了ProfilerPlugin接口,在APM agent启动时,已经通过扫描插件目录并注入了TomcatPlugin实例到plugin context里。随后,在classloader加载一个class时,javaagent机制会调用instrumentation里的ClassFileTransformer对象的transform方法来修改原创 2017-01-11 14:36:44 · 3515 阅读 · 0 评论 -
APM:拦截器里发送跟踪消息的机制和时机
APM跟踪消息的拦截和发送在拦截器中定义,以tomcat request的拦截器为例,在一个around拦截器里,before方法里记录开始信息,在after里记录此次请求的完整信息,之后通过sender发送数据public class RequestStartAsyncInterceptor implements AroundInterceptor {@Overridepublic void b原创 2017-01-11 14:33:15 · 754 阅读 · 0 评论 -
APM:添加数据采集代理到目标监控APP
基于以下假设,可根据自己要监控的APP修改APPNAMA等信息,1.原app的路径是APPPATH;2.APMagent的编译后文件在APP_PATH; 2.APMagent的编译后文件在APM_AGENT_PATH;步骤: 1.从APMAGENTPATH拷贝APM−bootstrap−1.5.2−SNAPSHOT.jar到APM_AGENT_PATH拷贝APM-bootstrap-1.5.2原创 2017-01-09 17:01:42 · 886 阅读 · 0 评论 -
Google Dapper,大规模分布式系统的跟踪系统
概述 当代的互联网的服务,通常都是用复杂的、大规模分布式集群来实现的。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具。 Dapper--Google生产环境下的分布式跟踪系统,应运而生。那么我们就来介绍一个大规模集群的跟踪系统转载 2017-03-23 16:25:43 · 905 阅读 · 0 评论 -
APM Agent 之 动态注入 agent
APM agent在sprint 17加入了“动态注入”的新特性。使得agent可以在监控的目标应用不需要重启和额外配置的情况下,就能够注入到目标应用。agent动态注入特性支持JDK6及以上版本。一、动态注入agent的命令: 假设APM agent的路径是$AGENT_HOME;目标应用已经启动,其进程号(pid)是 22814;jdk路径是$JAVA_HOME。java -Xbootclass原创 2017-02-21 14:29:50 · 4265 阅读 · 0 评论 -
APM 拦截器Scope的应用
使用拦截器Scope以避免重复跟踪这种情况比较普遍,例如有方法A和方法B,方法A中调用方法B,这两个方法又都可以被独立调用。即可能产生的调用路径有:外部->A->B外部->B如果对A和B都注入拦截器,那么在上述嵌套调用时,会产生重复跟踪的情况。 这时一来拦截器不容易编码,可能需要考虑嵌套跟踪的干扰,二来重复跟踪是不必要的。为了避免这种情况,可以使用Scope拦截器。使用InterceptorS原创 2017-01-19 09:41:17 · 430 阅读 · 0 评论 -
APM agent发送的消息
TcpDataSender:※ Thrift client发送;※ TAgentInfo:每天发送一次,失败时重试间隔300秒(配置文件),最大重试3次 • hostname:localhost.localdomain,// InetAddress.getLocalHost().getHostName();• ip:127.0.0.1,//InetAddress.getLocalHost(原创 2017-01-09 17:05:36 · 1465 阅读 · 0 评论