本文为您介绍如何通过消息队列RocketMQ版的监控告警功能实现生产环境的风险预警。

背景信息

消息队列RocketMQ版提供全托管的消息服务,对于每个规格的实例都有明确的SLA保障,您购买实例后即可保证消息收发TPS、消息存储等指标达到规格规定的能力。

您无需担心实例性能问题,但实际生产环境中仍需要关注实际的业务消耗、业务规模等是否达到最高水位或实例的规格限制。消息队列RocketMQ版联合阿里云云监控提供了开箱即用且免费的监控报警服务,可帮助您解决如下问题:
  • 实例规格水位监控预警

    若您实际使用的指标值超过实例的规格限制,消息队列RocketMQ版会进行强制限流。提前配置实例规格水位告警可以提前发现规格超限风险并及时升配,避免因限流导致的业务故障。

  • 业务逻辑错误监控预警

    您在消息收发时可能会收到异常报错,配置调用错误告警可以提前在业务反馈前发现异常,帮助您提前判断异常来源并及时修复。

  • 业务性能指标监控预警

    如果您的消息链路有相关性能指标要求,例如RT耗时、消息延迟等,提前配置业务指标告警可以帮助您提前治理业务风险。

告警配置原则

消息队列RocketMQ版提供了丰富的Metric指标告警监控项。各监控项可分为运行水位、收发性能、异常错误事件三类告警。

根据大量生产环境实践经验,建议您根据以下原则配置如下告警:
说明 以下核心监控项仅为基础推荐配置项,消息队列RocketMQ版提供了全面、丰富的监控指标项,您可以根据业务需求进行更细粒度更全面的告警配置。更多信息,请参见监控报警
RocketMQ监控告警分类重要监控告警最佳配置时机关注人员角色
实例运行水位和消耗指标实例API调用频率
  • 配置时机:实例创建成功后立即配。
  • 原因分析:实例级的水位消耗和单个Topic、Group无关,应该考虑整体水位是否超限。
资源运维人员
消息收发性能指标
  • 具体Topic的发送TPS
  • 具体Group的消费TPS
  • Group消费堆积
  • Group消费延迟时间
  • 配置时机:业务开发上线后立即配置。
  • 原因分析:每个业务上线后需要对当前业务的收发性能容忍能力做预警。
  • 资源运维人员
  • 业务开发人员
消息收发异常事件
  • 死信消息产生
  • 限流次数
  • 配置时机:业务开发上线后立即配置。
  • 原因分析:每个业务上线后需要对失败情况做预警,方便分析生产问题。
  • 资源运维人员
  • 业务开发人员

配置实例API调用频率告警最佳实践

  • 背景:消息队列RocketMQ每个实例都明确了消息收发API调用TPS,例如,标准版实例支持每秒5000次API调用,若实例消息收发API调用频率超过规格限制,会导致实例被限流。
  • 未配置风险:若未配置该监控告警,实例消息收发API调用超限不会提前预警,实例被限流后,导致部分消息收发请求失败。
  • 配置时机:建议实例创建完成后配置告警。
  • 建议阈值:建议设置为规格上限的70%。例如,您购买的实例消息收发TPS上限为10000,则告警阈值建议设置为7000。
  • 告警处理:收到实例API调用频率告警后,建议按照如下步骤处理:
    1. 进入消息队列RocketMQ版控制台的仪表盘页面,查看发送流量Top数据的变化趋势,分析业务变化是否合理。
    2. 如果业务变化异常,则应该联系业务方进一步分析异常原因。
    3. 如果业务变化正常,说明实例规格不足以支撑业务流量,建议立即升配调整实例规格。

配置Topic发送/Group消费TPS告警最佳实践

  • 背景:消息队列RocketMQ支持监控Topic和Group级别的消息收发TPS指标,通过该监控项可针对特定业务的消息收发TPS进行预警,帮助您及时了解业务规模。
  • 未配置风险:Topic的消息收发TPS代表业务的调用频率,如未配置该告警,流量跌零或突发暴涨不会提前预警,有可能会产生业务预期之外的风险。
  • 配置时机:建议业务上线且流量平稳后配置告警。
  • 建议阈值:业务侧上线后根据实际平稳期流量预估报警阈值。
  • 告警处理:收到消息收发TPS告警后,建议按照如下步骤处理:
    1. 进入消息队列RocketMQ版控制台的仪表盘页面,查看指定Topic或Group的消息收发TPS曲线,分析流量的变化趋势是否正常。
    2. 基于业务模型判断流量趋势的合理性,分析是否异常。

配置消息堆积量告警最佳实践

说明 消息堆积量统计存在一定的波动性和误差,几十条规模的消息堆积不建议配置为监控阈值,如果业务对少量堆积也非常敏感,建议使用消费堆积延迟时间阈值来监控。

  • 背景:消息队列RocketMQ支持按照ConsumerGroup粒度监控消息堆积量,可以用来预警下游消费堆积故障场景。
  • 未配置风险:消息堆积是消息队列RocketMQ的典型场景和能力,但是对于部分需要实时处理消息的场景,需要及时关注并控制未处理的消息量,避免因为消费堆积造成业务受损。
  • 配置时机:建议业务上线且流量平稳后配置告警。
  • 建议阈值:业务侧上线后根据可容忍的经验评估报警阈值。
  • 告警处理:收到消息堆积量告警后,建议按照如下步骤处理:
    1. 进入消息队列RocketMQ版控制台的仪表盘页面,查看指定Group的消息堆积曲线,分析堆积量的变化趋势,找到初始产生堆积的时刻。
    2. 基于业务的变更及应用日志,分析初始堆积时刻的变化因素,找到堆积原因。具体消费堆积原理,请参见如何处理消息堆积
    3. 根据堆积原因,判断是进行消费者应用扩容还是消费逻辑缺陷修复。

配置消费堆积延迟时间告警最佳实践

说明 消费堆积延迟时间是根据当前消费组所有未消费消息中,最早一条堆积消息的延迟时间计算,因此具备累积性和敏感性。收到消费堆积延迟时间告警后,您需要先判断业务受损是少量消息消费被卡住还是全局的消费延迟。

  • 背景:消息队列RocketMQ版支持按照ConsumerGroup粒度监控消费堆积延迟时间,可以为消费堆积场景提供更具体地分析指标。
  • 未配置风险:消息堆积是消息队列RocketMQ的典型场景和能力,但是对于部分需要实时处理消息的场景,需要及时关注并控制堆积消息的延时时间,避免因为消费延迟造成业务受损。
  • 配置时机:建议业务上线且流量平稳后配置告警。
  • 建议阈值:业务侧上线后根据可容忍的经验评估报警阈值。
  • 告警处理:收到消费堆积延迟时间告警后,建议按照如下步骤处理:
    1. 进入消息队列RocketMQ版控制台的仪表盘页面,查看指定Group的消息堆积曲线,分析堆积量的变化趋势,找到初始产生堆积的时刻。
    2. 基于业务的变更及应用日志,分析初始堆积时刻的变化因素,找到堆积原因。具体消费堆积原理,请参见如何处理消息堆积
    3. 根据堆积原因,判断是进行消费者应用扩容还是消费逻辑缺陷修复。

配置死信消息告警最佳实践

  • 背景:消息队列RocketMQ版支持死信消息,将消费失败并超过重试次数的消息投递至死信队列,以便您后续进行人工处理。监控进入死信队列的消息量可以帮助您及时预警当前业务出现的非预期且无法判断的异常问题。
  • 未配置风险:死信消息代表消费者无法正确处理消息,需要消费应用进行异常处理。如果没有配置监控忽略了死信消息,可能造成消费业务不完整。
  • 配置时机:建议业务侧上线且流量平稳后配置告警。
  • 建议阈值:建议业务上线且平稳后根据可容忍的经验值预估告警阈值。
  • 告警处理:收到死信消息数量的告警后,建议按照如下步骤处理:
    1. 查询死信消息,分析死信消息的源消息列表。具体操作,请参见死信队列
    2. 根据死信消息的源消息Topic和Message ID,查询消息的消费轨迹,分析消费失败原因。具体操作,请参见查询消息轨迹
    3. 基于消息消费失败的原因,确定具体的问题修复措施。

配置限流次数告警最佳实践

  • 背景:消息队列RocketMQ版支持将指定实例触发限流的事件作为监控项,通过对限流次数的监控,可以帮助您了解当前业务的受损情况。
  • 未配置风险:限流次数越多,说明实例规格超限越严重,应该及时升级实例规格。
  • 配置时机:业务上线且流量平稳后。
    • 实例级限流次数:建议实例创建后配置告警。
    • Topic和Group级别限流次数:建议业务上线且流量平稳后配置告警。
  • 建议阈值:业务侧上线后根据可容忍的经验评估报警阈值。
  • 告警处理:收到限流次数告警后,建议按照如下步骤处理:
    1. 进入消息队列RocketMQ版控制台的仪表盘页面,查看指定实例、Topic或Group的消息收发TPS曲线,分析限流出现的时间点和规律。
    2. 根据仪表盘的统计数据,排查消息收发Top级数据的Topic或Group,判断是否流量上涨是否符合业务预期。
    3. 基于以上原因分析,如果流量上涨符合预期,则进行规格升配;若不符合预期,则排查异常流量来源。