返回介绍

支持自定义增强

发布于 2023-10-10 23:52:04 字数 5166 浏览 0 评论 0 收藏 0

支持自定义增强

apm-customize-enhance-plugin为可选插件

介绍

SkyWalking提供了Java agent插件开发指南帮助开发者们构建新的插件。

这个插件不是为替代某个插件而设计,而是为了用户使用方便。这个插件的行为跟@Trace toolkit很相似, 但是不需要对代码进行修改,而且功能更强大,比如提供了tag和log。

如何配置

实现对类的自定义增强需要以下几步。

  1. 激活插件,将插件从optional-plugins/apm-customize-enhance-plugin.jar移动到plugin/apm-customize-enhance-plugin.jar
  2. 在agent.config中配置plugin.customize.enhance_file,指明增强规则文件,比如/absolute/path/to/customize_enhance.xml
  3. customize_enhance.xml中配置增强规则。
    <?xml version="1.0" encoding="UTF-8"?>
    <enhanced>
        <class class_name="test.apache.skywalking.testcase.customize.service.TestService1">
            <method method="staticMethod()" operation_name="/is_static_method" static="true"/>
            <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>
            <method method="method()" static="false"/>
            <method method="method(java.lang.String,int.class)" operation_name="/method_2" static="false">
                <operation_name_suffix>arg[0]</operation_name_suffix>
                <tag key="tag_1">arg[0]</tag>
                <log key="log_1">arg[1]</log>
            </method>
            <method method="method(test.apache.skywalking.testcase.customize.model.Model0,java.lang.String,int.class)" operation_name="/method_3" static="false">
                <operation_name_suffix>arg[0].id</operation_name_suffix>
                <operation_name_suffix>arg[0].model1.name</operation_name_suffix>
                <operation_name_suffix>arg[0].model1.getId()</operation_name_suffix>
                <tag key="tag_os">arg[0].os.[1]</tag>
                <log key="log_map">arg[0].getM().['k1']</log>
            </method>
        </class>
        <class class_name="test.apache.skywalking.testcase.customize.service.TestService2">
            <method method="staticMethod(java.lang.String,int.class)" operation_name="/is_2_static_method" static="true">
                <tag key="tag_2_1">arg[0]</tag>
                <log key="log_1_1">arg[1]</log>
            </method>
            <method method="method([Ljava.lang.Object;)" operation_name="/method_4" static="false">
                <tag key="tag_4_1">arg[0].[0]</tag>
            </method>
            <method method="method(java.util.List,int.class)" operation_name="/method_5" static="false">
                <tag key="tag_5_1">arg[0].[0]</tag>
                <log key="log_5_1">arg[1]</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。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文