vine
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:由系统类加载器加载;