Skip to content

慢订阅统计

正常情况下 EMQX 内部消息传输耗时都很低(毫秒级以下),大部分时间消耗都集中在网络传输上,针对客户端偶尔出现订阅消息时延高,EMQX 提供了慢订阅统计功能。

原理

当消息到达 EMQX 后,EMQX 将开始计算完成消息处理以及传输整个流程所消耗的时间(时延)。

如果时延超过阈值,会将对应的订阅者及主题插入或更新到慢订阅列表中,并按照时延高低对列表进行排序。

慢订阅列表:

  • 列表中数据按照时延从大到小排名,最多可以记录前 1000 条数据。
  • 列表记录的是订阅者-主题数据,而非每一条超过阈值的消息。
  • 记录产生时,如果列表中不存在相同记录则将其插入到列表中,否则将更新其发生时间并对整个列表重新排名。
  • 记录产生后,有效时长内(默认 300 秒)没有再次触发将被移出统计列表。

消息完成传输的定义:

  • QoS 0: 消息成功发出。
  • QoS 1: EMQX 收到客户端的 PUBACK 包。
  • QoS 2: EMQX 收到客户端的 PUBCOMP 包。

影响消息时延的因素:

  • 发布者到 EMQX 网络较慢(暂不能探测,功能规划中)。
  • Hooks 执行慢,如 ACL 检查、ExHook、规则引擎等阻塞消息发布流程。
  • 队列中消息堆积太多(PUBLISH 与 SUBSCRIBE 共用同一连接,大量 PUBLISH 消息处理不及时/堆积也可能导致 SUBSCRIBE 变慢)导致发出时间超时过慢。
  • 订阅者接收速度过慢。

配置并启用慢订阅

打开 EMQX Dashboard,在 问题分析 -> 慢订阅 页面中,点击 开启 即可,如果您已经开启了慢订阅,可以点击右上角 设置 按钮进行阈值和参数设置。

EMQX 慢订阅

配置参数

  • 时延阈值:用来判断消息是否参与统计,只有时延超过该值的消息才会被记录到慢订阅列表。

  • 最大统计条数:这个字段决定慢订阅列表记录条数,列表仅记录按照时延阈值排名的前 N 条数据,最大 1000 条。

  • 有效时长:每一条记录的有效时间,时长不限,默认 300 秒。记录产生或更新后开始计时,如果在时长范围内,一直没有被再次更新,记录将被清除。

  • 时延统计类型:时延的计算方式,分别为:

    • whole:从消息到达 EMQX 时起,直到消息完成传输。
    • internal:从消息到达 EMQX 时起,直到消息开始投递。
    • response:从消息开始投递时起,直到消息完成传输。

查看慢订阅列表

启用慢订阅后,您可以在 Dashboard 问题分析 -> 慢订阅 页面中查看当前慢订阅列表,列表数据如下:

  • 客户端 ID:产生记录的客户端 ID。
  • 主题:产生记录的主题。
  • 时长:消息时延。
  • 节点:记录产生的节点。
  • 更新时间:记录产生或更新的时间。

EMQX 慢订阅记录

您可点击记录的客户端 ID 进入对应客户端详情页,排查可能导致消息时延较高的原因。

EMQX 客户端详情