Skip to content
gqlxj1987's Blog
Go back

APM调用链

Edit page

原文链接

主要是比较了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的设计思路

image1


Edit page
Share this post on:

Previous Post
Recipe for an https sidecar
Next Post
k8s garbage collection