DevilKing's blog

冷灯看剑,剑上几分功名?炉香无需计苍生,纵一穿烟逝,万丈云埋,孤阳还照古陵

0%

APM调用链

原文链接

主要是比较了pinpoint/skywalking/cat部分

agent部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//通过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的设计思路

image1