收敛设置配置说明

更新时间:
复制 MD 格式

当应用的接口名包含动态参数(如订单 ID、用户 ID)或涉及分库分表时,监控系统会产生大量唯一的接口维度,导致存储成本上升、查询变慢、监控图表难以阅读。收敛设置通过正则匹配或智能识别,将高基数(High Cardinality)的接口名归并为统一名称,解决维度爆炸问题。

判断是否需要配置收敛

出现以下任一情况时,建议配置收敛规则:

  • 接口列表中出现大量仅参数不同的条目(如 /api/orders/12345/api/orders/67890)。

  • 监控图表因接口数过多而无法有效展示趋势。

  • 存储用量持续增长,但实际业务接口数量未增加。

选择收敛模块

根据需要收敛的接口类型,选择对应模块:

场景

适用模块

说明

当前应用对外暴露的接口出现高基数

提供接口收敛

作为服务提供方时的接口收敛

当前应用调用的下游接口出现高基数

依赖接口收敛

作为调用方时的下游接口收敛

SQL 语句因参数值或分库分表导致维度发散

SQL 收敛

SQL 参数替换和表名规整

Redis、MongoDB 等 NoSQL 命令参数导致维度发散

NoSQL 收敛

NoSQL 命令参数归一化

前提条件

已在 ARMS 控制台中接入应用。

功能入口

  1. 登录ARMS 控制台

  2. 在左侧导航栏选择应用监控

  3. 单击目标应用名称。

  4. 在左侧导航栏选择应用配置 > 收敛设置

提供接口收敛

针对当前应用作为服务提供方时暴露的接口进行收敛,包含自定义收敛和智能收敛两种方式。

自定义收敛

通过正则表达式手动配置收敛规则,将匹配到的接口名收敛为指定名称。

配置项

说明

开关

启用或关闭自定义收敛功能。

收敛规则(正则表达式)

通过正则表达式匹配接口名,将匹配到的接口收敛为指定名称。支持添加多条规则。

排除项(普通字符串)

指定不参与收敛的接口名(精确匹配),这些接口保持原始名称。

收敛规则示例

原始接口名

匹配规则(正则)

收敛后名称

/api/orders/12345/api/orders/67890

/api/orders/\d+

/api/orders/{id}

/ad-recommend-sports/ad-recommend-food

/ad-recommend-.*

/ad-recommend

/user/100/profile/user/200/profile

/user/\d+/profile

/user/{id}/profile

如果需要某个特定接口(如 /api/orders/health)不被收敛,将其添加到排除项中,该接口保持原始名称。

智能收敛

根据流量模式自动识别高基数接口并生成收敛规则,无需手动配置正则表达式。

配置项

说明

开关

启用或关闭智能收敛功能。

收敛规则(正则表达式)

系统自动生成的收敛规则。初始状态为"未生成",待触发条件满足后由系统自动生成。

排除项(普通字符串)

系统自动生成的排除项。初始状态为"未生成"。

触发阈值

触发智能收敛分析的条件。默认为每小时样本超过 1000 时触发。

说明

当单位时间内接口的样本数超过触发阈值时,系统自动分析流量模式并生成收敛规则。生成的规则和排除项可在页面中查看,但不支持手动编辑。如需自定义规则,请使用自定义收敛功能。

依赖接口收敛

针对当前应用作为调用方时所依赖的下游接口进行收敛,同样包含自定义收敛和智能收敛两种方式。配置方式与提供接口收敛一致。

自定义收敛

配置方式与提供接口收敛的自定义收敛一致。

收敛规则示例

原始接口名

匹配规则(正则)

收敛后名称

/redis/get/redis/set/redis/del

/redis/.*

/redis

智能收敛

配置方式与提供接口收敛的智能收敛一致,但触发阈值默认为每小时样本超过 200 时触发。

说明

依赖接口收敛的智能收敛触发阈值低于提供接口收敛,因为下游依赖的接口发散风险通常更高,需要更积极地进行收敛处理。

SQL 收敛

针对数据库(SQL 类)调用的接口名进行收敛,解决因 SQL 语句携带不同参数值或涉及分库分表导致的维度发散问题。

配置项

说明

SQL 规整化(Normalization)

启用后,将 SQL 语句中的参数值替换为占位符 ?,实现 SQL 模板化归并。同时将表名中的数字后缀替换为 {NUM},处理分库分表场景。

基数空间收敛(Cardinality Cap)

当每小时的 SQL 样本超过指定阈值时触发收敛,超出阈值的 SQL 统一收敛为 {ARMS_OTHERS}。默认阈值为 100/h。

规整化示例

原始 SQL

规整后

SELECT * FROM cache_0 WHERE ckey='23'

SELECT * FROM cache_{NUM} WHERE ckey=?

INSERT INTO orders_3 (id, name) VALUES (456, 'test')

INSERT INTO orders_{NUM} (id, name) VALUES (?, ?)

说明

SQL 规整化会同时处理分库分表场景,将表名中的数字后缀替换为 {NUM},以进一步减少维度发散。更多信息,请参见ARMS收敛机制说明

NoSQL 收敛

针对 NoSQL 类(如 Redis、MongoDB 等)调用的接口名进行收敛。

配置项

说明

NoSQL 规整化(Normalization)

启用后,将 NoSQL 命令中的动态参数归一化,避免因参数变化导致的维度发散。

基数空间收敛(Cardinality Cap)

当每小时的样本超过指定阈值时触发收敛,超出阈值的 NoSQL 命令统一收敛为 {ARMS_OTHERS}。默认阈值为 100/h。

各模块功能对比

模块

自定义收敛

智能收敛

规整化

基数空间收敛

提供接口收敛

支持

支持(阈值 1000/h)

-

-

依赖接口收敛

支持

支持(阈值 200/h)

-

-

SQL 收敛

-

-

支持

支持(阈值 100/h)

NoSQL 收敛

-

-

支持

支持(阈值 100/h)

说明

上述阈值均为默认值,如需调整请联系 ARMS 技术支持。

配置生效

所有配置修改后,单击页面底部的保存按钮方可生效。

说明

配置保存后,新的收敛规则在下一个采集周期开始生效。已采集的历史数据不会被重新收敛。

规则优先级

当接口名同时命中多条规则时,按以下优先级处理:

  1. 排除项(最高优先级):匹配排除项的接口保持原始名称,不参与任何收敛。

  2. 自定义收敛规则:优先于智能收敛规则生效。

  3. 智能收敛规则:仅当自定义规则未命中时生效。

常见问题

接口被意外收敛,如何保留原始接口名?

在对应模块的自定义收敛中,将需要保留原始名称的接口名添加到排除项(精确匹配)。添加后该接口不再被任何规则收敛。

收敛配置修改后多久生效?

配置保存后,新的收敛规则在下一个采集周期(通常为分钟级别)开始生效。已采集的历史数据不受影响。

基数空间收敛中的 {ARMS_OTHERS} 是什么?

当 SQL 或 NoSQL 接口的基数(每小时唯一接口名数量)超过阈值后,系统将超出部分的接口统一收敛为 {ARMS_OTHERS}。这是一种基数上限保护机制,防止维度无限增长。如果 {ARMS_OTHERS} 占比过高,建议调高阈值或配置更精细的规整化规则。