Skywalking:代码行级监控 apm-customize-enhance-plugin插件使用教程

apm-customize-enhance-plugin插件作用:自定义增强任意类里的任意方法,从而实现对任意类里任意方法的监控。

举个例子,有一个类,定义如下:

public class TestService1 {
    public static void staticMethod(String str0, int count, Map m, List l, Object[] os) {
      // 业务逻辑
    }
  ...
}

那么,想要对该方法进行监控,则可如下操作:

移动jar包
optional-plugins/apm-customize-enhance-plugin-6.5.0.jar 移动到 plugins 目录

编写增强规则
创建一个文件,名为例如 customize_enhance.xml ,内容如下:


<enhanced>
    <class class_name="test.apache.skywalking.testcase.customize.service.TestService1">
        <method method="staticMethod(java.lang.String,int.class,java.util.Map,java.util.List,[Ljava.lang.Object;)" operation_name="/is_static_method_args" static="true">
            <operation_name_suffix>arg[0]operation_name_suffix>
            <operation_name_suffix>arg[1]operation_name_suffix>
            <operation_name_suffix>arg[3].[0]operation_name_suffix>
            <tag key="tag_1">arg[2].['k1']tag>
            <tag key="tag_2">arg[4].[1]tag>
            <log key="log_1">arg[4].[2]log>
        method>
    class>
enhanced>

规则说明:

配置 说明
class_name 要被增强的类
method 类的拦截器方法
operation_name 如果进行了配置,将用它替代默认的operation_name
operation_name_suffix 表示在operation_name后添加动态数据
static 方法是否为静态方法
tag 将在local span中添加一个tag。key的值需要在XML节点上表示。
log 将在local span中添加一个log。key的值需要在XML节点上表示。
arg[x] 表示输入的参数值。比如args[0]表示第一个参数。
.[x] 当正在被解析的对象是Array或List,你可以用这个表达式得到对应index上的对象。
.[‘key’] 当正在被解析的对象是Map, 你可以用这个表达式得到map的key。

特别需要注意的是method的写法:

  • 基本类型: 基本类型.class ,例如: int.class

  • 非基本类型: 类的完全限定名称 ,例如:java.lang.String

  • 数组:可以写个数组打印一下,就知道格式了,例如:

public static void main(String[] args) {
        String[] s = new String[]{};
        System.out.println(s);

        int [] x = new int []{};
        System.out.println(x);
    }

结果:

[Ljava.lang.String;@1b0375b3
[I@2f7c7260

因此,对于String类型的数组,就可以写成 [Ljava.lang.String;;对于int类型的数组,则写成 [I

配置
agent.config中添加配置:

plugin.customize.enhance_file=customize_enhance.xml的绝对路径

你可能感兴趣的:(性能测试)