ARMS 支持无侵入地提取 Go 应用调用链路的业务参数,将请求和响应的指定参数写入 Span Attributes,帮助快速定位问题根因和追踪请求信息。通过控制台配置业务参数提取规则,可按需提取参数并配置自定义错误。
前提条件
已为 Go 应用接入 ARMS Go探针。
Go 探针版本不低于 2.10.2版本。
支持范围说明
业务参数提取规则对框架和实际用法有一定要求。Go 版支持的参数提取类型和来源如下:
参数提取类型 | 参数提取来源 | 支持的框架 | 备注 |
HTTP 服务端请求 | Header、Query Parameter | http 协议相关框架 | - |
HTTP 服务端响应 | Header、Body | http 协议相关框架 | Body 需为 JSON 格式。 |
HTTP 服务端响应 | Body | http 协议相关框架 | Body 需为 JSON 格式。 |
HTTP 客户端请求 | Header、Body | http 协议相关框架 | Body 需为 JSON 格式,如果 body 长度比较长,修改一下提取值长度限制。 |
HTTP 客户端响应 | Header | http 协议相关框架 | - |
如果需要提取的参数来源不在上述支持范围内,可通过引入 OpenTelemetry SDK 添加自定义埋点,将业务参数作为 Attributes 写入 Span。
功能入口
登录 ARMS 控制台。
在左侧导航栏选择,在顶部菜单栏选择目标地域,然后单击目标 Go 应用的名称。
在左侧导航栏单击应用设置,然后单击自定义参数页签。
在业务参数提取规则区域,可以创建、查看和修改当前应用的业务参数提取规则。ARMS 探针会动态识别规则变化,并依照所有已启用的规则将业务参数提取出来。在自定义错误设置区域,可以配置自定义错误规则,对提取出来的业务参数值进行过滤。
新增提取规则
在业务参数提取规则区域,按以下步骤创建提取规则:
单击新增规则。
填写规则名称和 Attribute 名称。
选择参数提取类型,并配置生效接口,指定规则作用的接口范围。
在参数提取规则区域,添加参数来源并配置参数处理步骤。支持配置多个参数来源和处理步骤,若多个来源均可提取到参数,排序在前的优先级更高。
设置是否启用,然后单击保存。
首次创建提取规则需要重启应用使功能生效。后续添加规则无需重启,预计 1~2 分钟后开始生效。
规则创建完成并启用后将实时下发至客户端探针侧。业务参数被提取后将记录至对应调用链 Span 的 Attributes,可在调用链分析页面按需筛选查询。Attribute 名称默认具有 biz. 前缀,不允许重复。
规则配置说明
参数 | 说明 |
规则名称 | 该条规则的可读名称。 |
Attribute 名称 | 提取值对应的 Span Attribute 名称,默认以 |
参数提取类型 | 需要提取的参数类型。 |
生效接口 | 规则作用的接口范围,探针仅对匹配成功的接口提取相应参数。 |
参数提取规则 | 定义待提取参数所在的实际载体来源和提取后的处理方式,支持配置多个参数来源和提取步骤。若多个来源均可提取到参数,排序在前的参数提取步骤优先级高于后者。 |
参数来源 | 待提取参数所在的实际载体来源。 |
参数处理步骤 | 流式的参数处理步骤,用于逐步解析参数载体并提取最终的参数值。可添加多条参数处理步骤,前者的解析结果会成为后者的输入。如果不添加处理步骤,则提取到的参数值为载体对象的 JSON 文本。 |
是否启用 | 该条规则是否启用。 |
参数处理方式
Go 版支持的参数处理方式如下:
参数处理方式 | 输入 | 输出 | 说明 |
JsonPath | JSON 字符串 | String | 支持点表示法的 JsonPath 语句。示例: |
Regex | String | String | 支持基于命名分组的正则表达式语句,待提取的子串对应名为 |
生效验证
参数提取规则配置完成后即可生效(首次创建规则除外,需重启应用后生效)。在调用链分析页面查看相关调用链,如果对应接口的 Span Attributes 已有自定义 Attribute 被写入,说明提取规则生效。
找到新增规则对应的 Attribute 名称。
在调用链分析页面添加
attributes.$attributesName作为查询条件,过滤相关 Span。单击任意一条 Trace,在对应的 Span 下查看自定义的 Attributes。
管理规则
启用/禁用规则:在目标规则右侧设置是否启用开关。
编辑和删除:在目标规则右侧单击编辑或删除,修改或删除对应规则。
批量删除:选中需要删除的提取规则,单击批量删除。
批量复制:选中需要复制的提取规则,单击批量复制至其他应用,打开弹窗后选择复制到其他所有应用或指定应用。
批量复制至其他应用需要 1~2 分钟时间生效。
该功能仅复制参数提取规则,配套的自定义错误不会被复制到目标应用。
参数提取规则要求 Attribute 名称唯一,如果目标应用已存在同样的 Attribute 名称,则该条规则不会被复制到目标应用。
常见问题
什么情况下会导致参数提取失败?
参数提取类型或来源不在支持范围内,请参见支持范围说明确认当前框架和来源是否支持。
参数处理步骤的语法配置有误,或输入类型与处理方式的要求不匹配。
Go 探针版本过低,不支持业务参数提取功能。
生效接口的匹配规则配置有误,导致目标接口未被匹配。
Go 版目前不支持的业务参数来源如何提取?
可通过引入 OpenTelemetry SDK 为 Go 应用添加自定义埋点,将业务参数作为 Attributes 写入 Span。