一步一步写APM(八)--出现spanId重复现象,以及优化

很长时间没有更新这个系列,再次更新优化。 上次的agent在tomcat测试中发现了几个问题: 问题一:同应用多线程 多次请求同一个网址spanId出现了重复,导致server端绘制的流程出现了问题。 {"spanId":1,"startTime":15454

一步一步写APM(七)--Dubbo插件及跨服务的链构造

Dubbo插件比较简单,此处不做过多说明,阶段Tag:添加Dubbo插件 到目前为止已经有几种比较常见的插件了:Tomcat,Jdbc,Jedis,Dubbo。已经基本涵盖了大部分开发组件,当然还有其他的比如ES、grpc、http、jetty、mongodb、memcached等等,这些如果非特殊

一步一步写APM(六)--Mysql插件

Jdbc拦截是一个比较特殊的情况 首先,我们需要拦截的依然是Jdbc的查询,更新等操作,具体涉及的函数就是:execute、executeQuery和executeUpdate。 但是对于Statement是有多种的,具体见:https://my.oschina.net/heweipo/blog/3

一步一步写APM(五)--数据的收集与简单展示

(四)中我们已经简单的构造出了链,现在我们想把数据收集起来 public class ContextManager { ... public static Span stopSpan(){ Span span = get().stopSpan();

一步一步写APM(四)--Jedis插件、线程内链的构造

一点修改和准备工作 在tomcat测试项目中添加jedis相关代码(需要本地开一个redis),代码省略 提取Enhancer公共部分 public abstract class PluginEnhancer { public abstract String getEnhanceClas

一步一步写APM(三)--拦截以及Interceptor重构

问题在前面的代码中,为了用最简单的代码理清逻辑以及实现功能,我们使用了很多的常量值,比如named("org.apache.catalina.core.StandardWrapperValve"),named("invoke");而且现在只能拦截某些类的某些方

一步一步写APM(二)--拦截Tomcat监控WebApp

知识准备,org.apache.catalina.core.StandardWrapperValve StandardWrapper代表的是一个Servlet,那么它也就是容器调用栈中的最终点.Http请求到达后进行的处理也不单单只是调用了Servlet的方法.它还经过了一层的过滤器.它对外服务与

一步一步写APM(一)--ByteBuddy初步应用及初步搭建

准备 前面我们已经通过相关知识知道一般APM项目都是通过javaagent来对原项目代码进行一些改造以实现调用链需要的相关操作-- 比如加入上下文,添加必要的调用监控数据。 我们的主要开发工具就是ByteBuddy 注意,本系列相关文章涉及的源码放在了github上,有些代码不会贴出,请查看源码。地

通过使用Byte Buddy便捷地创建Java Agent

现有的APM项目为了保证监控服务和被监控服务互相独立且对被监控服务有低侵入性甚至无侵入性,会采取javaagent的方法对原项目远吗进行一些“改造”以实现想要的功能--比如插入想要的数据,上下文操作。 Java agent是在另外一个Java应用(“目标”应用)加载class文件之前做拦截把字节码

RPC服务追踪的原理与实践

在分布式服务化架构下,由于分布式服务间存在相互依赖,彼此协同来完成各类业务场景。下图是一个典型的业务场景,从前端发起一个请求,到最后的业务完成,需要经过很多环节,这些环节可能都是分布式服务的方式提供,部署在不同的服务器上进行。而在这种复杂的分布式服务场景下,为了定位问题、性能瓶颈查询、异常日志跟踪等
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×