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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

问题排查:Amazon MQ for ActiveMQ

使用本节中的信息帮助您诊断和解决在使用 Amazon MQ for 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 日志流。

有关为 ActiveMQ 配置 Amazon MQ 以将日志发布到 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 for ActiveMQ 代理的 general(常规)代理日志。如果已达到限制,您会在代理日志中看到 Reached Maximum Connections。有关 Amazon MQ for 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 集成的工作方式