Skywalking源码分析【agent探针篇】

本文深入探讨Skywalking JavaAgent的源码,解析其如何利用字节码技术进行服务监控。从入口方法`premain`开始,讨论核心配置加载、插件初始化和增强策略,包括实例方法、构造方法、静态方法的拦截。文章还涉及到了trace数据的采集,重点关注`AbstractMethodInterceptor`在span创建中的作用。
摘要由CSDN通过智能技术生成

字节码技术

xxxxx介绍一下字节码技术

  1. JavaAgent ,启动时加载的 JavaAgent 是 JDK1.5 之后引入的新特性,此特性为用户提供了在 JVM 将字节码文件读入内存之后,JVM 使用对应的字节流在 Java 堆中生成一个 Class 对象之前,用户可以对其字节码进行修改的能力,从而 JVM 也将会使用用户修改过之后的字节码进行 Class 对象的创建。
  2. premain api,
    public static void premain(String agentArgs, Instrumentation instrumentation);
    public static void premain(String agentArgs);

入口方法

SkyWalkingAgent -> premain。目前暂时只支持冷启动,热部署的方式仍需官方持续改进。

1、核心配置加载方式:

例如:agent.service_name 和 collector.backend_service等配置
读取 skywalking_config -> 若没有则读取 /config/agent.config -> System.getProperties() 系统级的环境变量 来覆盖前者-> 挂载的探针参数 来覆盖前者

2、插件初始化:

  1. AbstractClassEnhancePluginDefine 是所有插件必须继承的抽象类
  2. 每个插件下都有一个skywalking-plugin.def文件,以key(插件名)=value(完整包路径)的形式定义了插件的声明(即增强的切入点)

3、插件(中间件or框架)的增强

增强点的寻找:

  • NameMatch:是全路径找到增强点
  • IndirectMatch:通过类注解@Trace等、继承关系,回调结果等等信息来辅助匹配寻找增强点

4、服务启动

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值