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

问题排查:一般问题

使用本节中的信息帮助您诊断在使用 Amazon MQ 代理时可能遇到的常见问题,例如连接到代理的问题和代理重启。

我无法连接到代理 Web 控制台或终端节点。

如果您在使用 Web 控制台或线级终端节点连接到代理时遇到问题,我们建议按以下步骤操作。

  1. 检查您是否尝试从防火墙后面连接到您的代理。您可能需要配置防火墙以允许访问您的代理。

  2. 检查您是否正在尝试使用 FIPS 端点连接代理。Amazon MQ 仅在使用 API 操作时支持 FIPS 端点,而不支持与代理实例本身的线级连接。

  3. 检查代理的 Public Accessibility (公开可访问性) 选项是否设置为 Yes (是)。如果设置为 No (否),请检查您的子网网络访问控制列表(ACL)规则。如果您已创建自定义网络 ACL,则可能需要更改网络 ACL 规则以提供对代理的访问权限。有关 Amazon VPC 联网的更多信息,请参阅《Amazon VPC 用户指南》中的启用互联网访问

  4. 检查您的代理的安全组规则。确保您允许连接到以下端口:

    注意

    以下端口根据引擎类型进行分组,因为 Amazon MQ for ActiveMQ 和 Amazon MQ for RabbitMQ 使用不同的端口进行连接。

    Amazon MQ for ActiveMQ

    • Web 控制台 – 端口 8162

    • OpenWire – 端口 61617

    • AMQP – 端口 5671

    • STOPM – 端口 61614

    • MQTT – 端口 8883

    • WSS – 端口 61619

    Amazon MQ for RabbitMQ

    • Web 控制台和管理 API – 端口 44315671

    • AMQP – 端口 5671

  5. 为您的代理引擎类型运行以下网络连接测试。

    注意

    对于不可公开访问的代理,请在与 Amazon MQ 代理相同的 Amazon VPC 中从 Amazon EC2 实例运行测试并评估响应。

    Amazon MQ for ActiveMQ

    测试您的 Amazon MQ for ActiveMQ 代理的网络连接

    1. 打开新终端或命令行窗口。

    2. 运行以下 nslookup 命令,查询您的代理 DNS 记录。对于主/备用部署,请同时测试主备用终端节点。主/备用终端节点以添加到唯一代理 ID 的后缀、-1-2 标识。将终端节点替换为您的信息。

      $ nslookup b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-west-2.amazonaws.com

      如果查询成功,则将显示类似于以下内容的输出。

      Non-authoritative answer:
      Server:  dns-resolver-corp-sfo-1.sfo.corp.amazon.com
      Address:  172.10.123.456
      
      Name:    ec2-12-345-123-45.us-west-2.compute.amazonaws.com
      Address:  12.345.123.45
      Aliases:  b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-west-2.amazonaws.com

      已解析的 IP 地址应与 Amazon MQ 控制台中提供的 IP 地址相匹配。这表示域名在 DNS 服务器上正确解析,您可以继续执行下一步。

    3. 运行以下 telnet 命令,测试您的代理的网络路径。将终端节点替换为您的信息。将端口替换为 Web 控制台的端口号 8162,或根据需要替换为其他线级端口以测试更多协议。

      注意

      对于主/备用部署,如果您通过备用终端节点运行 telnet,则将收到 Connect failed 错误消息。这在预期之内,因为备用实例本身正在运行,但 ActiveMQ 进程没有运行,并且未拥有访问代理的 Amazon EFS 存储卷的权限。对 -1-2 终端节点运行该命令,以确保同时测试主备用实例。

      $ telnet b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-west-2.amazonaws.com port

      对于主动实例,将显示类似于以下内容的输出。

      Connected to b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-west-2.amazonaws.com.
      Escape character is '^]'.
    4. 请执行以下任一操作。

      • 如果 telnet 命令成功,请检查 EstablishedConnectionsCount 指标,并确认代理未达到线级连接上限。您还可以通过查看代理 General 日志来确认是否达到上限。如果此指标大于零,则目前至少有一个客户端连接到该代理。如果指标显示零连接,则再次进行 telnet 路径测试,并等待至少一分钟才能断开连接,因为代理指标每分钟发布一次。

      • 如果 telnet 命令失败,请检查代理的弹性网络接口,并确认状态为 in-use。为每个实例的网络接口创建 Amazon VPC 流日志,然后查看生成的流日志。查找运行 telnet 命令时的代理 IP 地址,并确认连接数据包是 ACCEPTED,包括返回数据包。要了解更多信息和查看流日志示例,请参阅《Amazon VPC 开发人员指南》中的流日志目录示例

    5. 运行以下 curl 命令,检查 ActiveMQ 管理 Web 控制台的连接。

      $ curl https://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-west-2.amazonaws.com:8162/index.html

      如果命令成功,则输出应是类似于以下内容的 HTML 文档。

      <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
      <html>
          <head>
              <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
              <title>Apache ActiveMQ</title>
              ...
      
    Amazon MQ for RabbitMQ

    测试您的 Amazon MQ for RabbitMQ 代理的网络连接

    1. 打开新终端或命令行窗口。

    2. 运行以下 nslookup 命令,查询您的代理 DNS 记录。将终端节点替换为您的信息。

      $ nslookup b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-west-2.amazonaws.com

      如果查询成功,则将显示类似于以下内容的输出。

      Non-authoritative answer:
      Server:  dns-resolver-corp-sfo-1.sfo.corp.amazon.com
      Address:  172.10.123.456
      
      Name:    rabbit-broker-1c23e456ca78-b9000123b4ebbab5.elb.us-west-2.amazonaws.com
      Addresses:  52.12.345.678
                52.23.234.56
                41.234.567.890
                54.123.45.678
      Aliases:  b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-west-2.amazonaws.com
    3. 运行以下 telnet 命令,测试您的代理的网络路径。将终端节点替换为您的信息。您可以将 port 替换为 Web 控制台的端口 443,并替换为 5671 以测试线级 AMQP 连接。

      $ telnet b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-west-2.amazonaws.com port

      如果命令成功,则将显示类似于以下内容的输出。

      Connected to b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-west-2.amazonaws.com.
      Escape character is '^]'.
      注意

      Telnet 连接将在几秒钟后自动关闭。

    4. 请执行以下任一操作。

      • 如果 telnet 命令成功,请检查 ConnectionCount 指标,并确认代理未达到 max-connections 默认策略中设置的值。您还可以通过查看代理 Connection.log 日志组来确认是否达到上限。如果此指标大于零,则目前至少有一个客户端连接到该代理。如果指标显示零连接,则再次进行 telnet 路径测试。如果连接在您的代理向 CloudWatch 发布新的连接指标之前关闭,您可能需要重复此过程。每分钟发布一次指标。

      • 对于不可公开访问的代理,如果 telnet 命令失败,请检查代理的弹性网络接口,并确认状态为 in-use。为每个网络接口创建 Amazon VPC 流日志,然后查看生成的流日志。查找调用 telnet 命令时的代理 IP 地址,并确认连接数据包是 ACCEPTED,包括返回数据包。要了解更多信息和查看流日志示例,请参阅《Amazon VPC 开发人员指南》中的流日志目录示例

        注意

        此步骤不适用于可公开访问的 Amazon MQ for RabbitMQ 代理。

    5. 运行以下 curl 命令,检查 RabbitMQ 管理 Web 控制台的连接。

      $ curl https://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-west-2.amazonaws.com:443/index.html

      如果命令成功,则输出应是类似于以下内容的 HTML 文档。

      <!DOCTYPE html>
      <html>
          <head>
              <meta http-equiv="X-UA-Compatible" content="IE=edge" />
              <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
              <title>RabbitMQ Management</title>
              ...

我的代理正在运行,我可以使用 telnet 验证连接情况,但是我的客户端无法连接并且正在返回 SSL 异常情况。

您的代理端点证书可能已在代理维护时段期间更新。Amazon MQ 代理证书会定期轮换,以确保代理的持续可用性和安全性。

我们建议在 Amazon Trust Services 中使用 Amazon 根证书颁发机构 (CA),在您客户端的信任存储中进行身份验证。所有 Amazon MQ 代理证书均使用此根 CA 签名。通过使用 Amazon 根 CA,您不再需要每次在代理上更新证书时下载新的 Amazon MQ 代理证书。

我创建了一个代理,但代理创建失败。

如果您的代理处于 CREATION_FAILED 状态,请执行以下操作。

  • 检查您的 IAM 权限。要创建代理,必须使用 Amazon 托管式 IAM 策略 AmazonMQFullAccess,或者在您的自定义 IAM 策略中拥有正确的 Amazon EC2 权限集。有关您需要的 Amazon EC2 权限的更多信息,请参阅创建 Amazon MQ 代理时所需的 IAM 权限

  • 检查您为代理选择的子网是否位于共享的 Amazon Virtual Private Cloud(VPC)中。要在共享的 Amazon VPC 中创建 Amazon MQ 代理,您必须在拥有 Amazon VPC 的账户中创建它。

我的代理重启,我不知道原因是什么。

如果代理已自动重启,则可能是由以下某个原因所致。

  • 您的代理之所以重启,可能是因为到了每周计划维护时段。Amazon MQ 定期对消息代理的硬件、操作系统或引擎软件进行维护。维护的持续时间有所不同,但最多可持续两小时,具体取决于为消息代理安排的操作。代理可能会在两小时维护时段内的任何时间点重启。有关代理维护时段的更多信息,请参阅 维护 Amazon MQ 代理

  • 您的代理实例类型可能不适合您的应用程序工作负载。例如,在 mq.t2.micro 上运行生产工作负载可能会导致代理耗尽资源。较高的 CPU 利用率或较高的代理内存使用率可能会导致代理意外重启。要查看您的代理使用了多少 CPU 和内存,请为您的引擎类型使用以下 CloudWatch 指标。

    • Amazon MQ for ActiveMQ – 检查 CpuUtilization,了解代理目前使用的已分配 Amazon EC2 计算单位的百分比。检查 HeapUsage,了解代理目前使用的 ActiveMQ JVM 内存限制的百分比。

    • Amazon MQ for RabbitMQ – 检查 SystemCpuUtilization,了解代理目前使用的已分配 Amazon EC2 计算单位的百分比。检查 RabbitMQMemUsed,了解以字节为单位的 RAM 使用量,然后除以 RabbitMQMemLimit,得出 RabbitMQ 节点使用的内存百分比。

    有关代理实例类型以及如何为工作负载选择合适的实例类型的更多信息,请参阅 Broker instance types