Jvmti Agent插件开发Femas的Java Agent已经过高度的易用性封装,开发插件只需要简单的两步。

Step1:插件开发

cd femas-agent/femas-agent-plugin

定位到femas-agent-plugin目录下

<aside> 💡 改写实例方法:

<aside> 💡 改写静态方法:

<aside> 💡 改写构造方法:

<aside> 💡 用InterceptWrapper方式改写实例方法:

Step2:插件配置

cd femas-agent/femas-agent-starter/src/main/resources/plugin.yaml

定位到插件配置目录下,添加需要加载的插件配置,具体配置如下:

#配置参数含义具体参见类:@com.tencent.tsf.femas.agent.config.InterceptPlugin

femas:

  agent:

    interceptors:

      - plugin:

          # 必填,字节码插装目标的类名

          className: org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient

          # 必填,字节码插装目标的方法名,如果是构造方法的话,请填写any

          methodName: execute

          # 必填,字节码插装的interceptor类名

          interceptorClass: com.tencent.tsf.femas.agent.feign.instrument.LoadBalancerFeignClientInterceptor

          # 非必填,方法匹配类型:exactMatch表示精准匹配;prefix表示前缀匹配;contain表示包含字符匹配;suffix表示后缀匹配,默认是exactMatch

          matcherType: exactMatch

          # 非必填,拦截的方法类型:constructor构造方法;instance实例方法;static静态方法,默认是instance

          methodType: instance

          # 非必填,Integer类型,表示拦截方法的参数长度,无默认值

          takesArguments: 2

          # 非必填,Boolean类型,表示before插装方法重写之后,是否需要用修改之后的参数调用原始方法,默认是false

          overrideArgs: false

          # 非必填,Boolean类型,表示是否是使用com.tencent.tsf.femas.agent.interceptor.Interceptor方式拦截,默认false

          originAround: false

      # 多个插件,依次叠加

      - plugin:

          className: com.netflix.loadbalancer.ZoneAwareLoadBalancer

          methodName: chooseServer

          interceptorClass: com.tencent.tsf.femas.agent.nacos.instrument.ZoneAwareLoadBalancerInterceptor

打包部署包:

使用以下脚本,自动打包成部署需要的femas-agent文件夹

mvn -Dmaven.test.skip=true clean install -U