Amazon MQ 上的 ActiveMQ 问题排查 - Amazon MQ
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon MQ 上的 ActiveMQ 问题排查

使用本节信息帮助您诊断和解决使用 Amazon MQ 代理上的 ActiveMQ 时可能遇到的常见问题。

即使我已激活日志记录,我也无法在 CloudWatch Logs 中看到代理的常规或审计日志。

如果您无法在 CloudWatch Logs 中查看代理的日志,请执行以下操作。

  1. 检查创建或重启代理程序的用户是否具有 logs:CreateLogGroup 权限。如果您未在用户创建或重启代理之前将 CreateLogGroup 权限添加给该用户,则 Amazon MQ 不会创建日志组。

  2. 检查您是否已配置了基于资源的策略,以允许 Amazon MQ 将日志发布到 CloudWatch Logs。要允许 Amazon MQ 将日志发布到 CloudWatch Logs 日志组,请配置一个基于资源的策略来将 Amazon MQ 访问权限授予以下 CloudWatch Logs API 操作:

    • CreateLogStream – 为指定的日志组创建 CloudWatch Logs 日志流。

    • PutLogEvents – 将事件传送到指定的 CloudWatch Logs 日志流。

有关配置 Amazon MQ 上的 ActiveMQ 将日志发布到 CloudWatch Logs 的更多信息,请参阅配置日志记录

代理重启或维护时段后,即使状态为 RUNNING,我也无法连接到我的代理。为什么?

您可能会在您启动的代理重启后、计划的维护时段完成后或在故障事件中遇到连接问题,此时备用实例会激活。无论是哪种情况,代理重启后的连接问题很可能是由于在您代理的 Amazon EFS 或 Amazon EBS 存储卷中保留了异常大量的消息引起的。在重启期间,Amazon MQ 会将储存的消息从存储移动到代理内存。要确认此诊断,您可以在 CloudWatch 上为您的 Amazon MQ for ActiveMQ 代理监控以下指标:

  • StoragePercentUsage - 达到或接近 100% 的大百分比会导致代理拒绝连接。

  • JournalFilesForFullRecovery - 表示在不正常关闭和重启后将重播的日志文件数。值增加或持续高于 1 表示存在未解决的事务,可能会在重启后导致连接问题。

  • OpenTransactionCount - 重启后的数字大于零表示代理将尝试存储以前使用的消息,从而导致连接问题。

要解决此问题,我们建议您使用 rollback()commit() 来解决 XA 事务。有关更多信息,以及要查看使用 rollback() 解决 XA 事务的代码示例,请参阅恢复 XA 事务

我看到我的一些客户端可以连接到代理,而其他客户端则无法连接。

如果您的代理处于 RUNNING 状态并且一些客户端能够成功连接到代理,而其他客户端无法连接,您可能已经达到了代理的线级连接数限制。要验证您是否已达到线级连接数限制,请执行以下操作:

  • 在 CloudWatch Logs 中检查您的 Amazon MQ 上的 ActiveMQ 代理的常规代理日志。如果已达到限制,您会在代理日志中看到 Reached Maximum Connections。有关 Amazon MQ 上的 ActiveMQ 代理的 CloudWatch Logs 的更多信息,请参阅 了解 CloudWatch Logs 中的日志记录的结构

一旦达到线级连接数限制,代理将主动拒绝额外的传入连接。要解决此问题,我们建议升级您的代理实例类型。有关为工作负载选择最佳实例类型的更多信息,请参阅Broker instance types

如果您确认线级连接数低于代理的连接数限制,则问题可能与重新启动客户端有关。检查您的代理日志,查找大量且重复出现的 ... Inactive for longer than 600000 ms - removing ... 条目。日志条目能够表明客户端重启或连接问题。当客户端通过 Network Load Balancer (NLB) 连接到代理,并经常断开连接而重新连接到代理时,这种迹象就会更加明显。这在基于容器的客户端中更为常见。

请检查客户端日志,了解更多详细信息。代理将在 600000 毫秒后清理不活动的 TCP 连接,并释放连接套接字。

我在执行操作时,在 ActiveMQ 控制台上看到 org.apache.jasper.JasperException: An exception occurred processing JSP page 异常。

如果您在授权队列和主题时使用简单的身份验证和配置 AuthorizationPlugin,请确保使用 XML 配置文件中的 AuthorizationEntries 元素,并允许 activemq-webconsole 群组拥有所有队列和主题的权限。这可以确保 ActiveMQ Web 控制台能够与 ActiveMQ 代理进行通信。

以下示例 AuthorizationEntry 将所有队列和主题的读取和写入权限授予 activemq-webconsole 群组。

<authorizationEntries> <authorizationEntry admin="activemq-webconsole,admins,users" topic=">" read="activemq-webconsole,admins,users" write="activemq-webconsole,admins,users" /> <authorizationEntry admin="activemq-webconsole,admins,users" queue=">" read="activemq-webconsole,admins,users" write="activemq-webconsole,admins,users" /> </authorizationEntries>

同样,当您的代理与 LDAP 集成时,请确保将权限授予 amazonmq-console-admins 群组。有关 LDAP 集成的更多信息,请参阅 LDAP 集成的工作方式