

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

# 问题排查：一般 Amazon MQ 问题
<a name="general"></a>

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

**Contents**
+ [我无法连接到代理 Web 控制台或终端节点。](#issues-connecting-to-console-or-endpoint)
+ [我的代理正在运行，我可以使用 `telnet` 验证连接情况，但是我的客户端无法连接并且正在返回 SSL 异常情况。](#issues-ssl-certificate-exception)
+ [我创建了一个代理，但代理创建失败。](#issues-creating-a-broker)
+ [我的代理重启，我不知道原因是什么。](#w2aac40b9c13)

## 我无法连接到代理 Web 控制台或终端节点。
<a name="issues-connecting-to-console-or-endpoint"></a>

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

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

1.  检查您是否正在尝试使用 [FIPS](https://aws.amazon.com/compliance/fips/) 端点连接代理。Amazon MQ 仅在使用 API 操作时支持 FIPS 端点，而不支持与代理实例本身的线级连接。

1.  检查代理的 **Public Accessibility (公开可访问性)** 选项是否设置为 **Yes (是)**。如果设置为 **No (否)**，请检查您的子网网络[访问控制列表（ACL）](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)规则。如果您创建了自定义网络 ACLs，则可能需要更改网络 ACL 规则以提供对代理的访问权限。有关 Amazon VPC 网络的更多信息，请参阅《Amazon VPC 用户指南》**中的[启用互联网访问](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html#vpc-igw-internet-access) 

1.  检查您的代理的安全组规则。确保您允许连接到以下端口：
**注意**  
以下端口根据引擎类型分组，因为 Amazon MQ 上的 ActiveMQ 和 Amazon MQ 上的 RabbitMQ 使用不同的连接端口。

**Amazon MQ 上的 ActiveMQ**
   + Web 控制台 – 端口 `8162`
   + OpenWire — 端口 `61617`
   + AMQP – 端口 `5671`
   + STOMP — 端口 `61614`
   + MQTT – 端口 `8883`
   + WSS – 端口 `61619`

**Amazon MQ 上的 RabbitMQ**
   + Web 控制台和管理 API – 端口 ` 443` 和 `15671`
   + AMQP – 端口 `5671`

1.  为您的代理引擎类型运行以下网络连接测试。
**注意**  
 对于不可公开访问的代理，请在与 Amazon MQ 代理相同的 Amazon VPC 中从 Amazon EC2 实例运行测试并评估响应。

------
#### [ ActiveMQ on Amazon MQ ]

**测试 Amazon MQ 上的 ActiveMQ 代理的网络连接性**

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

   1.  运行以下 `nslookup` 命令，查询您的代理 DNS 记录。对于[主/备用](amazon-mq-broker-architecture.md#active-standby-broker-deployment)部署，请同时测试主备用终端节点。 active/standby 端点用后缀标识，`-1`或者`-2`添加到唯一的经纪商 ID 中。将终端节点替换为您的信息。

      ```
      $ 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 服务器上正确解析，您可以继续执行下一步。

   1.  运行以下 `telnet` 命令，测试您的代理的网络路径。将终端节点替换为您的信息。根据`8162`需要*port*替换为 Web 控制台的端口号或其他线级端口以测试其他协议。
**注意**  
 对于 active/standby 部署，如果您使用备用终端节点运行`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 '^]'.
      ```

   1. 请执行以下操作之一。
      +  如果 `telnet` 命令成功，请检查 [`EstablishedConnectionsCount`](activemq-logging-monitoring.md#security-logging-monitoring-cloudwatch-metrics) 指标，并确认代理未达到[线级连接上限](amazon-mq-limits.md)。您还可以通过查看代理 `General` 日志来确认是否达到上限。如果此指标大于零，则目前至少有一个客户端连接到该代理。如果指标显示零连接，则再次进行 `telnet` 路径测试，并等待至少一分钟才能断开连接，因为代理指标每分钟发布一次。
      +  如果 `telnet` 命令失败，请检查代理的[弹性网络接口](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)，并确认状态为 `in-use`。为每个实例的网络接口[创建 Amazon VPC 流日志](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-flow-logs.html#create-flow-log)，然后查看生成的流日志。查找运行 `telnet` 命令时的代理 IP 地址，并确认连接数据包是 `ACCEPTED`，包括返回数据包。要了解更多信息和查看流日志示例，请参阅《Amazon VPC 开发人员指南》**中的[流日志目录示例](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-records-examples.html)。

   1.  运行以下 `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>
              ...
      ```

------
#### [ RabbitMQ on Amazon MQ ]

**测试 Amazon MQ 上的 RabbitMQ 代理的网络连接性**

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

   1.  运行以下 `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
      ```

   1.  运行以下 `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 连接将在几秒钟后自动关闭。

   1. 请执行以下操作之一。
      +  如果 `telnet` 命令执行成功，请检查 [`ConnectionCount`](rabbitmq-logging-monitoring.md#security-logging-monitoring-cloudwatch-metrics-rabbitmq) 指标并确认代理未达到 [`max-connections`](rabbitmq-resource-limits-configuration.md) 默认策略中设置的值。您还可以通过查看代理 `Connection.log` 日志组来确认是否达到上限。如果此指标大于零，则目前至少有一个客户端连接到该代理。如果指标显示零连接，则再次进行 `telnet` 路径测试。如果在您的代理向其发布新的连接指标之前连接关闭，则可能需要重复此过程 CloudWatch。每分钟发布一次指标。
      +  对于不可公开访问的代理，如果 `telnet` 命令失败，请检查代理的[弹性网络接口](https://docs.aws.amazon.com/UserGuide/using-eni.html?icmpid=docs_ec2_console)，并确认状态为 `in-use`。为每个网络接口[创建 Amazon VPC 流日志](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-flow-logs.html#create-flow-log)，然后查看生成的流日志。查找调用 `telnet` 命令时的代理 IP 地址，并确认连接数据包是 `ACCEPTED`，包括返回数据包。要了解更多信息和查看流日志示例，请参阅《Amazon VPC 开发人员指南》**中的[流日志目录示例](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-records-examples.html)。
**注意**  
此步骤不适用于具有公共访问权限的 Amazon MQ 上的 RabbitMQ 代理。

   1.  运行以下 `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 异常情况。
<a name="issues-ssl-certificate-exception"></a>

 您的代理端点证书可能已在代理[维护时段](maintaining-brokers.md)期间更新。Amazon MQ 代理证书会定期轮换，以确保代理的持续可用性和安全性。

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

## 我创建了一个代理，但代理创建失败。
<a name="issues-creating-a-broker"></a>

如果您的代理处于 `CREATION_FAILED` 状态，请执行以下操作。
+  检查您的 IAM 权限。要创建代理，必须使用 AWS 托管 IAM 策略`AmazonMQFullAccess`或在自定义 IAM 策略中拥有正确的 Amazon EC2 权限集。有关您需要的 Amazon EC2 权限的更多信息，请参阅[创建 Amazon MQ 代理时所需的 IAM 权限](security-api-authentication-authorization.md#security-permissions-required-to-create-broker)。
+  检查您为代理选择的子网是否位于共享的 Amazon Virtual Private Cloud（VPC）中。要在共享的 Amazon VPC 中创建 Amazon MQ 代理，您必须在拥有 Amazon VPC 的账户中创建它。

## 我的代理重启，我不知道原因是什么。
<a name="w2aac40b9c13"></a>

如果代理已自动重启，则可能是由以下某个原因所致。
+  您的代理之所以重启，可能是因为到了每周计划维护时段。Amazon MQ 定期对消息代理的硬件、操作系统或引擎软件进行维护。维护的持续时间有所不同，但最多可持续两小时，具体取决于为消息代理安排的操作。代理可能会在两小时维护时段内的任何时间点重启。有关代理维护窗口的更多信息，请参阅 [计划 Amazon MQ 代理的维护时段](maintaining-brokers.md)。
+  您的代理实例类型可能不适合您的应用程序工作负载。例如，在 `mq.t3.micro` 上运行生产工作负载可能会导致代理耗尽资源。较高的 CPU 利用率或较高的代理内存使用率可能会导致代理意外重启。要查看您的代理使用了多少 CPU 和内存，请根据您的引擎类型使用以下 CloudWatch 指标。
  +  **Amazon MQ 上的 ActiveMQ** – 检查 `CpuUtilization` 以了解代理当前使用的已分配 Amazon EC2 compute unit 百分比。检查 `HeapUsage`，了解代理目前使用的 ActiveMQ JVM 内存限制的百分比。
  +  **Amazon MQ 上的 RabbitMQ** – 检查 `SystemCpuUtilization` 以了解代理当前使用的已分配 Amazon EC2 compute unit 百分比。检查 `RabbitMQMemUsed`，了解以字节为单位的 RAM 使用量，然后除以 `RabbitMQMemLimit`，得出 RabbitMQ 节点使用的内存百分比。

   有关代理实例类型以及如何为工作负载选择正确实例类型的更多信息，请参阅 [Broker instance types](broker-instance-types.md)。