主要是比较了pinpoint/skywalking/cat部分
agent部分
//通过bytebuddy的AgentBuilder构造javaagent增强classLoader
new AgentBuilder.Default(byteBuddy)
.ignore( //忽略这些包的内容,不进行增强
nameStartsWith("net.bytebuddy.")
.or(nameStartsWith("org.slf4j."))
.or(nameStartsWith("org.apache.logging."))
.or(nameStartsWith("org.groovy."))
.or(nameContains("javassist"))
.or(nameContains(".asm."))
.or(nameStartsWith("sun.reflect"))
.or(allSkyWalkingAgentExcludeToolkit())
.or(ElementMatchers.<TypeDescription>isSynthetic()))
//通过pluginFinder加载所有的探针扩展,并获取所有可以增强的class
.type(pluginFinder.buildMatch())
//按照pluginFinder的实现,去改变字节码增强类
.transform(new Transformer(pluginFinder))
//通过listener订阅增强的操作记录,方便调试
.with(new Listener())
.installOn(instrumentation);
try {
//加载所有的service实现并启动
ServiceManager.INSTANCE.boot();
} catch (Exception e) {
logger.error(e, "Skywalking agent boot failure.");
}
agent部分的设计思路:
参照dubbo的设计思路
