当应用的接口名包含动态参数(如订单 ID、用户 ID)或涉及分库分表时,监控系统会产生大量唯一的接口维度,导致存储成本上升、查询变慢、监控图表难以阅读。收敛设置通过正则匹配或智能识别,将高基数(High Cardinality)的接口名归并为统一名称,解决维度爆炸问题。
判断是否需要配置收敛
出现以下任一情况时,建议配置收敛规则:
接口列表中出现大量仅参数不同的条目(如
/api/orders/12345、/api/orders/67890)。监控图表因接口数过多而无法有效展示趋势。
存储用量持续增长,但实际业务接口数量未增加。
选择收敛模块
根据需要收敛的接口类型,选择对应模块:
场景 | 适用模块 | 说明 |
当前应用对外暴露的接口出现高基数 | 提供接口收敛 | 作为服务提供方时的接口收敛 |
当前应用调用的下游接口出现高基数 | 依赖接口收敛 | 作为调用方时的下游接口收敛 |
SQL 语句因参数值或分库分表导致维度发散 | SQL 收敛 | SQL 参数替换和表名规整 |
Redis、MongoDB 等 NoSQL 命令参数导致维度发散 | NoSQL 收敛 | NoSQL 命令参数归一化 |
前提条件
已在 ARMS 控制台中接入应用。
功能入口
登录ARMS 控制台。
在左侧导航栏选择应用监控。
单击目标应用名称。
在左侧导航栏选择应用配置 > 收敛设置。
提供接口收敛
针对当前应用作为服务提供方时暴露的接口进行收敛,包含自定义收敛和智能收敛两种方式。
自定义收敛
通过正则表达式手动配置收敛规则,将匹配到的接口名收敛为指定名称。
配置项 | 说明 |
开关 | 启用或关闭自定义收敛功能。 |
收敛规则(正则表达式) | 通过正则表达式匹配接口名,将匹配到的接口收敛为指定名称。支持添加多条规则。 |
排除项(普通字符串) | 指定不参与收敛的接口名(精确匹配),这些接口保持原始名称。 |
收敛规则示例
原始接口名 | 匹配规则(正则) | 收敛后名称 |
|
|
|
|
|
|
|
|
|
如果需要某个特定接口(如 /api/orders/health)不被收敛,将其添加到排除项中,该接口保持原始名称。
智能收敛
根据流量模式自动识别高基数接口并生成收敛规则,无需手动配置正则表达式。
配置项 | 说明 |
开关 | 启用或关闭智能收敛功能。 |
收敛规则(正则表达式) | 系统自动生成的收敛规则。初始状态为"未生成",待触发条件满足后由系统自动生成。 |
排除项(普通字符串) | 系统自动生成的排除项。初始状态为"未生成"。 |
触发阈值 | 触发智能收敛分析的条件。默认为每小时样本超过 1000 时触发。 |
当单位时间内接口的样本数超过触发阈值时,系统自动分析流量模式并生成收敛规则。生成的规则和排除项可在页面中查看,但不支持手动编辑。如需自定义规则,请使用自定义收敛功能。
依赖接口收敛
针对当前应用作为调用方时所依赖的下游接口进行收敛,同样包含自定义收敛和智能收敛两种方式。配置方式与提供接口收敛一致。
自定义收敛
配置方式与提供接口收敛的自定义收敛一致。
收敛规则示例
原始接口名 | 匹配规则(正则) | 收敛后名称 |
|
|
|
智能收敛
配置方式与提供接口收敛的智能收敛一致,但触发阈值默认为每小时样本超过 200 时触发。
依赖接口收敛的智能收敛触发阈值低于提供接口收敛,因为下游依赖的接口发散风险通常更高,需要更积极地进行收敛处理。
SQL 收敛
针对数据库(SQL 类)调用的接口名进行收敛,解决因 SQL 语句携带不同参数值或涉及分库分表导致的维度发散问题。
配置项 | 说明 |
SQL 规整化(Normalization) | 启用后,将 SQL 语句中的参数值替换为占位符 |
基数空间收敛(Cardinality Cap) | 当每小时的 SQL 样本超过指定阈值时触发收敛,超出阈值的 SQL 统一收敛为 |
规整化示例
原始 SQL | 规整后 |
|
|
|
|
SQL 规整化会同时处理分库分表场景,将表名中的数字后缀替换为 {NUM},以进一步减少维度发散。更多信息,请参见ARMS收敛机制说明。
NoSQL 收敛
针对 NoSQL 类(如 Redis、MongoDB 等)调用的接口名进行收敛。
配置项 | 说明 |
NoSQL 规整化(Normalization) | 启用后,将 NoSQL 命令中的动态参数归一化,避免因参数变化导致的维度发散。 |
基数空间收敛(Cardinality Cap) | 当每小时的样本超过指定阈值时触发收敛,超出阈值的 NoSQL 命令统一收敛为 |
各模块功能对比
模块 | 自定义收敛 | 智能收敛 | 规整化 | 基数空间收敛 |
提供接口收敛 | 支持 | 支持(阈值 1000/h) | - | - |
依赖接口收敛 | 支持 | 支持(阈值 200/h) | - | - |
SQL 收敛 | - | - | 支持 | 支持(阈值 100/h) |
NoSQL 收敛 | - | - | 支持 | 支持(阈值 100/h) |
上述阈值均为默认值,如需调整请联系 ARMS 技术支持。
配置生效
所有配置修改后,单击页面底部的保存按钮方可生效。
配置保存后,新的收敛规则在下一个采集周期开始生效。已采集的历史数据不会被重新收敛。
规则优先级
当接口名同时命中多条规则时,按以下优先级处理:
排除项(最高优先级):匹配排除项的接口保持原始名称,不参与任何收敛。
自定义收敛规则:优先于智能收敛规则生效。
智能收敛规则:仅当自定义规则未命中时生效。
常见问题
接口被意外收敛,如何保留原始接口名?
在对应模块的自定义收敛中,将需要保留原始名称的接口名添加到排除项(精确匹配)。添加后该接口不再被任何规则收敛。
收敛配置修改后多久生效?
配置保存后,新的收敛规则在下一个采集周期(通常为分钟级别)开始生效。已采集的历史数据不受影响。
基数空间收敛中的 {ARMS_OTHERS} 是什么?
当 SQL 或 NoSQL 接口的基数(每小时唯一接口名数量)超过阈值后,系统将超出部分的接口统一收敛为 {ARMS_OTHERS}。这是一种基数上限保护机制,防止维度无限增长。如果 {ARMS_OTHERS} 占比过高,建议调高阈值或配置更精细的规整化规则。