SkyWalking二次开发必备知识
SkyWalking 的 Java 探针端是如何实现无侵入式埋点的?
在探针开发或者排查线上问题的时候,应该如何进行远程调试?
SkyWalking 最新支持的 Service Mesh 到底是什么?
一、JavaAgent 介绍
1.1 概念简介
SkyWalking 探针在使用上是无代码侵入的,而这种无侵入的自动埋点基于 Java 的 JavaAgent 技术。
启动时加载的 JavaAgent(以下所说的 JavaAgent 均代表启动时加载的 JavaAgent)是 JDK 1.5 中引入的 java.lang.Instrument
包,该包提供了一些工具使得在类加载时期修改 Class 类成为了可能。这实际上就是提供了一种虚拟机级别的 AOP,此特性为用户提供了在 JVM 将字节码文件读入内存之后,使用对应的字节流在 Java 堆中生成一个 Class 对象之前,对其字节码进行修改的能力,而JVM 也会使用用户修改过的字节码进行 Class 对象的创建。
SkyWalking 探针依赖于 JavaAgent 在一些特殊点(某个类的某些方法)拦截对应的字节码数据并进行 AOP 修改。当某个调用链路运行至已经被 SkyWalking 代码过的方法时,SkyWalking 会通过代理逻辑进行这些关键节点信息的收集、传递和上报,从而还原出整个分布式链路。