收敛设置

什么是收敛

ARMS探针在运行过程中会采集很多指标数据(例如请求量、耗时、错误数等),为了能够提供丰富、准确的监控信息,指标中会携带一些维度信息(例如机器、接口等)。由于各种原因,有些维度会出现发散的情况,即高基数问题。高基数问题不仅会给存储系统带来巨大的压力,造成写入丢失、查询缓慢等问题,也会导致用户的账单暴涨。为解决该问题,ARMS提供了相应的收敛机制,一方面可用于解决高基数问题本身,即将维度的基数控制在合理的范围内,另一方面也可用于标记真实的观测维度。例如用户对外提供了RESTful形式的用户服务,其中包含一个查询用户信息的/api/v1/users/{ID}/info接口,如果直接记录原始的请求URL,由于ID的变化,将会记录一堆不同的URL,显然这会造成高基数问题,另外还会导致用户无法直观地获取到接口性能指标。本文将逐一介绍ARMS现有的收敛机制,以帮助您了解收敛发生的原因及收敛结果所代表的含义。

收敛结果说明

ARMS已有的收敛结果及对应的原因概括如下,更详细的部分请参见下文。

收敛结果

收敛原因

{ARMS_IP}:80

访问同一端口的IP数量过多,超过阈值(默认50)。

{ARMS_STATIC_REQ} 或 {ARMS_S_XXX}

URL为静态资源相关的请求。

{ARMS_ATTACK_REQ}

URL中包含攻击字符串。

{ARMS_PARAMED_REQ}

URL中携带了参数。

{ARMS_OTHERS}

单位时间内,记录的维度值超过了允许的上限。

说明

默认上限阈值详细请参见下文基数空间收敛

{ARMS_NUMBER}

URL中以/切分后的term为纯数字,其长度过长或该位置出现了太多不同的数字。

{ARMS_WORD}

URL中以/切分后的term为单词,其长度过长或该位置出现了太多不同的单词。

{ARMS_ANY}

URL中以/切分后的term为混合了字母和数字的字符串,其长度过长或在该位置出现了太多不同的字符串。

{XXX}

使用了SpringController中的注解。

含有*的字符串

说明

仅适用于探针版本小于4.x的情况。

基于探针端的内存统计机制对发散的部分进行了收敛。

收敛机制说明

以下所有收敛机制都是默认开启的。除基数空间收敛外,所有收敛机制均支持用户手动关闭。

说明

不同的收敛机制支持的数据类型不同,每个收敛机制都会注明所支持的数据类型。

自定义收敛

该功能支持用户自定义一些收敛规则,来满足一些特定的收敛需求。

收敛逻辑

逐一匹配用户配置的收敛规则,如果命中,则结束。

收敛结果

以用户配置为准。

支持的数据类型

URL

收敛触发位置

4.x及以上版本触发于探针端

4.x以下版本触发于服务端

支持的探针版本

所有

示例

用户配置的规则:匹配/api/v1/user/[\d]+/info,收敛为/api/v1/getUserInfo

对于所有命中/api/v1/user/[\d]+/info正则表达式的请求将都被收敛为/api/v1/getUserInfo

智能收敛

经过上文几个收敛动作后,依然有可能存在大量发散的URL被记录下来,针对这部分URL,ARMS会周期性基于算法自动计算出相应的收敛规则,然后替换掉原始的URL。

收敛逻辑

逻辑较为复杂,此处仅做简单介绍。

  1. 基于算法对样本URL进行分组。

  2. 对每个分组内的URL Pattern进行收敛处理,生成收敛规则。

  3. 合并各分组的收敛规则。

收敛结果

  • 发散部分如果为纯数字,将被替换为{ARMS_NUMBER}。

  • 发散部分如果为纯字母,将被替换为{ARMS_WORD}。

  • 发散部分如果同时包含数字和字母,将被替换为{ARMS_ANY}。

支持的数据类型

URL

收敛触发位置

4.x及以上版本触发于探针端

4.x以下版本触发于服务端

支持的探针版本

所有

示例

/api/product/1/info
/api/product/2/info
....
/api/product/N/info

服务端经过计算后,会生成收敛规则:/api/product/[\d]+/info(正则匹配)

收敛结果为/api/product/{ARMS_NUMBER}/info

后续符合上述正则的请求,都将被收敛为/api/product/{ARMS_NUMBER}/info

SQL规整化

由于多种情况的存在(例如分库分表、注释、明文),探针很可能会采集到大量SQL。基于这种情况,ARMS默认会对每条SQL进行处理,替换掉可能发散的部分。

规整逻辑

逻辑较为复杂,此处仅做简单介绍。

  1. 注释移除。

  2. 明文替换。

  3. 分库分表名替换。

...

规整结果

替换掉发散部分后的结果。

支持的数据类型

SQL

收敛发生位置

探针端

支持的探针版本

4.X 及以上版本

示例

select * from cache_0 where ckey='23'

将会被收敛为:

select * from cache_{NUM} where ckey=?

相关文档

ARMS收敛机制说明