vine icon indicating copy to clipboard operation
vine copied to clipboard

vine是一款轻量级的分布式调用链路追踪-Java探针,vine只是探针,对于同进程内,vine在调用链路入口处创建用于收集日记的单向链表, 调用链路上每经过一个方法都会向链表尾部追加日记,最终在调用链路出口处打印整个...

vine

vine是一款轻量级的分布式调用链路追踪-Java探针,vine只是探针,不负载日记的收集。 如果您项目中也是将日记收集到阿里云日记服务(或者其它日记服务),那么可以使用vine将 调用链路日记输出到阿里云日记服务(或者其它日记服务);

vine使用logback输出日记,对于同进程内,一次调用链路只打印一次日记。vine在调用链路入口处创建收集的单向链表, 调用链路上每经过一个方法都会向链表尾部追加日记,最终在调用链路出口处打印整个调用链路的日记。

适用条件

  • vine目前只适配webmvc、openfeign;
  • vine不支持响应式编程,如webflux;

使用说明

启动示例:

java -javaagent:{绝对路径}/vine-agent.jar={绝对路径}/vine-core-jar-with-dependencies.jar,\
{绝对路径}/vine-spy.jar=agent.package={应用包名,如:com.wujiuye.app} -jar {应用的jar包}

Docker镜像构建配置文件示例:

FROM java:8-jdk-alpine

WORKDIR /usr/app

COPY ./test-app.jar ./

COPY ./agent/vine-agent.jar ./
COPY ./agent/vine-core-jar-with-dependencies.jar ./
COPY ./agent/vine-spy.jar ./

ENTRYPOINT ["java", "-server", "-XX:+UseG1GC",\
    "-javaagent:/usr/app/vine-agent.jar=/usr/app/vine-core-jar-with-dependencies.jar,/usr/app/vine-spy.jar=agent.package=com.test",\
    "-jar", "test-app.jar"]

各模块说明

  • vine-spy: 定义Spy和ContextSpy类,这两个类由启动类加载器加载,定义了方法入口和出口静态方法,由应用代码中的埋点代码调用;
  • vine-core: 探针的核心功能实现,实现class字节码修改、接收Spy、ContextSpy上报的事件、构造调用链路、日记输出,适配主流框架(webmvc、openfeign);
  • vine-agent: 定义premain、agentmain方法,负责使用不同类加载器加载vine-spy.jar与vine-core.jar;

vine的核心设计

实现环境隔离

使用不同类加载器加载不同模块,实现环境隔离:

  • vine-spy.jar:由启动类加载器加载;
  • vine-core.jar:自定义的类加载器加载,与应用隔离;
  • vine-agent.jar:由系统类加载器加载;