

# 使用网络分析器实时监控无线资源机群
<a name="network-analyzer-overview"></a>

网络分析器使用默认 WebSocket 连接接收无线连接资源的实时跟踪消息日志。通过使用网络分析器，您可以添加要监控的资源、激活跟踪消息传递会话以及开始实时接收跟踪消息。

要监控您的资源，还可以使用 Amazon CloudWatch。要使用 CloudWatch，您需要设置 IAM 角色来配置日志记录，然后等待日志条目在控制台中显示。网络分析器显著缩短了建立连接和开始接收跟踪消息所需的时间，为您的资源机群提供了即时日志信息。有关使用 CloudWatch 监控的信息，请参阅 [使用 Amazon CloudWatch Logs 监控 AWS IoT Wireless 资源](monitoring-cloudwatch.md)。

通过缩短设置时间并使用跟踪消息中的信息，您可以更有效地监控资源、获得有意义的见解并排查错误。您可以监控 LoRaWAN 设备和 LoRaWAN 网关。例如，在登记其中一台 LoRaWAN 设备时，您可以快速识别加入错误。要调试错误，请使用提供的跟踪消息日志中的信息。

**如何使用网络分析器**  
要监控资源机群并开始接收跟踪消息，请执行以下步骤

1. 

**创建网络分析器配置并添加资源**  
在激活跟踪消息收发之前，请创建网络分析器配置并向配置添加资源。首先，指定配置设置，其中包括日志级别和无线设备帧信息。然后，通过使用无线网关和无线设备标识符添加要监控的无线资源。

1. 

**使用 WebSockets 流式传输跟踪消息**  
您可以使用 IAM 角色的凭据生成预签名的请求 URL，使用 WebSocket 协议流式传输网络分析器跟踪消息。

1. 

**激活跟踪消息收发会话并监控跟踪消息**  
要开始接收跟踪消息，请激活跟踪消息会话。为了避免产生额外费用，您可以停用或关闭网络分析器跟踪消息会话。

 下面的视频不仅会介绍 适用于 LoRaWAN 的 AWS IoT Core 网络分析器的工作原理，还会全程指导您使用网络分析器添加资源和跟踪加入活动。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/Qk9pkhL8xjc/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/Qk9pkhL8xjc)


下面的主题介绍了如何创建配置、添加资源和激活跟踪消息收发会话。

**Topics**
+ [为网络分析器添加必要的 IAM 角色](network-analyzer-iam.md)
+ [创建网络分析器配置并添加资源](network-analyzer-create-resources.md)
+ [使用 WebSockets 串流网络分析器跟踪消息](network-analyzer-api.md)
+ [实时查看和监控网络分析器跟踪消息日志](network-analyzer-logs.md)
+ [使用网络分析器对多播组和 FUOTA 任务进行调试和故障排除](lorawan-network-analyzer-fuota.md)

# 为网络分析器添加必要的 IAM 角色
<a name="network-analyzer-iam"></a>

使用网络分析器时，必须授予用户使用 API 操作 [UpdateNetworkAnalyzerConfiguration](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_UpdateNetworkAnalyzerConfiguration.html) 和 [GetNetworkAnalyzerConfiguration](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_GetNetworkAnalyzerConfiguration.html) 访问网络分析器资源的权限。下面显示了您用于授予权限的 IAM 策略。

## 网络分析器的 IAM 策略
<a name="network-analyzer-policies"></a>

请使用以下任一项：
+ 

**完全访问无线策略**  
通过将策略 **AWSIoTWirelessFullAccess** 附加到您的角色，授予 适用于 LoRaWAN 的 AWS IoT Core 完全访问策略。有关更多信息，请参阅 [`AWSIoTWirelessFullAccess` 策略摘要](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTWirelessFullAccess$serviceLevelSummary)。
+ 

**用于获取和更新 API 的限定范围的 IAM 策略**  
通过转到 IAM 控制台的 [Create policy](https://console.aws.amazon.com/iam/home#/policies$new?step=edit)（创建策略）页面，并在 **Visual editor**（可视化编辑器）选项卡上创建以下 IAM 策略：

  1. 对于 **Service**（服务），选择 **IoTWireless**。

  1. 在 **Access level**（访问级别）下，展开 **Read**（读取）并选择 **GetNetworkAnalyzerConfiguration**，然后展开 **Write**（写入）并选择 **UpdateNetworkAnalyzerConfiguration**。

  1. 选择 **Next:Tags**（下一步：标签），然后输入策略的 **Name**（名称），例如 **IoTWirelessNetworkAnalyzerPolicy**。选择**创建策略**。

  以下内容显示您创建的策略 **IoTWirelessNetworkAnalyzerPolicy**。有关创建策略的更多信息，请参阅[创建 IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create)。

  ```
  {
      "Version": "2012-10-17",
      "Statement": [
          {
              "Sid": "VisualEditor0",
              "Effect": "Allow",
              "Action": [
                  "iotwireless:GetNetworkAnalyzerConfiguration",
                  "iotwireless:UpdateNetworkAnalyzerConfiguration"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

**用于访问特定资源的限定范围的策略**  
要配置更精细的访问控制，您必须将无线网关和设备添加到 **Resource**（资源）字段中。以下策略使用通配符 ARN 授予对所有网关和设备的访问权限。您可以使用 `WirelessGatewayId` 和 `WirelessDeviceId` 来控制对特定网关和设备的访问权限。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "iotwireless:GetNetworkAnalyzerConfiguration",
                "iotwireless:UpdateNetworkAnalyzerConfiguration"
            ],
            "Resource": [
                "arn:aws:iotwireless:*:{accountId}:WirelessDevice/*", 
                "arn:aws:iotwireless:*:{accountId}:WirelessGateway/*", 
                "arn:aws:iotwireless:*:{accountId}:NetworkAnalyzerConfiguration/*"
            ]
        }
    ]
}
```

要授予用户使用网络分析器但不使用任何无线网关或设备的权限，请使用以下策略。除非指定，否则隐式拒绝使用资源的权限。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "iotwireless:GetNetworkAnalyzerConfiguration",
                "iotwireless:UpdateNetworkAnalyzerConfiguration"
            ],
            "Resource": [                
                "arn:aws:iotwireless:*:{accountId}:NetworkAnalyzerConfiguration/*"
            ]
        }
    ]
}
```

## 后续步骤
<a name="network-analyzer-iam-next"></a>

现在您已创建策略，您可以将资源添加到网络分析器配置中，并接收这些资源的跟踪消息收发信息。有关更多信息，请参阅[创建网络分析器配置并添加资源](network-analyzer-create-resources.md)。

# 创建网络分析器配置并添加资源
<a name="network-analyzer-create-resources"></a>

在流式传输跟踪消息之前，请创建网络分析器配置并将要监控的资源添加到此配置中。创建配置时，您可以：
+ 指定配置名称和可选说明。
+ 自定义配置设置，例如帧信息和日志消息的详细级别。
+ 确定您要监控的资源。资源可以是无线网关和/或无线设备。

您指定的配置设置将决定您将针对添加到配置的资源收到的跟踪消息收发信息。您可能还需要根据监控用例创建多个配置。

下面的内容说明了如何创建配置和添加资源。

**Topics**
+ [创建网络分析器配置](network-analyzer-create.md)
+ [添加资源并更新网络分析器配置](network-analyzer-resources.md)

# 创建网络分析器配置
<a name="network-analyzer-create"></a>

必须先创建网络分析器配置，然后才能监控无线网关或无线设备。创建配置时，只需指定配置名称。即使在创建配置之后，您也可以自定义配置设置并将希望监控的资源添加到配置中。配置设置决定了您将针对这些资源收到的跟踪消息收发信息。

根据要监控的资源以及希望为其接收的信息级别，您可能需要创建多个配置。例如，您可以创建一个仅显示您的 AWS 账户中一组网关的错误信息的配置。您还可以创建一个配置，以显示有关要监控的无线设备的所有信息。

以下各节介绍了各种配置设置以及如何创建配置。

## 配置设置
<a name="network-analyzer-config-settings"></a>

在创建或更新网络分析器配置时，还可以自定义以下参数以筛选日志流信息。
+ 

**帧信息**  
此设置是跟踪消息的无线设备资源的帧信息。帧信息可用于调试网络服务器与终端设备之间的通信。该功能默认已启用。
+ 

**日志级别**  
您可以查看信息或错误日志，也可以关闭日志记录。
  + 

**信息**  
日志级别为 **Info**（信息）的日志更详细，其中包含错误日志流和信息日志流。信息日志可用于查看设备或网关状态的变化。
**注意**  
收集更多详细的日志流可能会产生额外的成本。有关定价的更多信息，请参阅 [AWS IoT Core 定价](https://aws.amazon.com/iot-core/pricing/)。
  + 

**错误**  
日志级别为 **Error** 的日志不那么详细，只显示错误信息。当应用程序出错（例如设备连接错误）时，可以使用这些日志。通过使用日志流中的信息，您可以识别机群中资源的错误并对其进行故障排除。

## 使用控制台创建配置
<a name="network-analyzer-create-configuration-console"></a>

通过使用 AWS IoT 控制台或 AWS IoT Wireless API，您可以创建网络分析器配置和自定义可选参数。还可以创建多个配置，之后删除任何不再使用的配置。

**创建网络分析器配置**  


1. 打开 [AWS IoT 控制台的网络分析器中心](https://console.aws.amazon.com/iot/home#/wireless/networkAnalyzer)并选择 **Create configuration**（创建配置）。

1. 指定配置设置。
   + 

**名称、描述和标签**  
指定一个唯一的 **Configuration name**（配置名称），其中仅包含字母、数字、连字符或下划线。使用可选的 **Description**（说明）字段以提供有关配置的信息，并使用 **Tags**（标签）字段以添加有关配置的元数据的键值对。有关命名和描述资源的更多信息，请参阅 [描述您的 AWS IoT Wireless 资源](iotwireless-describe-resources.md)。
   + 

**配置设置**  
选择是否禁用帧信息，并使用**选择日志级别**来选择希望用来跟踪消息日志的日志级别。选择**下一步**。

1. 向配置添加资源。您可以立即添加资源，也可以选择 **Create**（创建）并在以后添加您的资源。要以后添加资源，请选择 **Create**（创建）。

   在 **Network Analyzer hub page**（网络分析器中心页面）中，您将看到创建的配置及其设置。要查看新配置的详细信息，请选择配置名称。

**删除网络分析器配置**  


您可以创建多个网络分析器配置，具体取决于要监视的资源以及希望针对这些资源接收的跟踪消息收发信息的级别。

**从控制台中删除配置**

1. 转至 [AWS IoT 控制台的网络分析器中心](https://console.aws.amazon.com/iot/home#/wireless/networkAnalyzer)，然后选择要删除的配置。

1. 选择**操作**，然后选择**删除**。

## 使用 API 创建控制台
<a name="network-analyzer-create-configuration-api"></a>

要使用 API 创建网络分析器配置，请使用 [CreateNetworkAnalyzerConfiguration](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_CreateNetworkAnalyzerConfiguration.html) API 操作或 [create-network-analyzer-configuration](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/create-network-analyzer-configuration.html) CLI 命令。

创建配置时，只需指定配置名称。还可以使用此 API 操作在创建配置时指定配置设置和添加资源。或者，您可以在以后使用 [UpdateNetworkAnalyzerConfiguration](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_UpdateNetworkAnalyzerConfiguration.html) API 操作或 [update-network-analyzer-configuration](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/update-network-analyzer-configuration.html) CLI 来指定它们。
+ 

**创建配置**  
创建配置时，必须指定名称。例如，以下命令通过仅提供名称和可选描述来创建配置。默认情况下，配置激活了帧信息，并使用 `INFO` 日志级别。

  ```
  aws iotwireless create-network-analyzer-configuration \ 
      --configuration-name My_Network_Analyzer_Config \ 
      --description "My first network analyzer configuration"
  ```

  运行此命令将显示网络分析器配置的 ARN 和 ID。

  ```
  {
      "Arn": "arn:aws:iotwireless:us-east-1:123456789012:NetworkAnalyzerConfiguration/12345678-a1b2-3c45-67d8-e90fa1b2c34d",
      "Id": "12345678-a1b2-3c45-67d8-e90fa1b2c34d"
  }
  ```
+ 

**使用资源创建配置**  
要自定义这些配置设置，请使用 `trace-content` 参数。要添加资源，请使用 `WirelessDevices` 和 `WirelessGateways` 参数指定要添加到配置中的网关和/或设备。例如，以下命令自定义配置设置并将无线资源（由其 `WirelessGatewayID` 和 `WirelessDeviceID` 指定）添加到配置中。

  ```
  aws iotwireless create-network-analyzer-configuration \ 
      --configuration-name My_NetworkAnalyzer_Config \ 
      --trace-content WirelessDeviceFrameInfo=DISABLED,LogLevel="ERROR" \ 
      --wireless-gateways "12345678-a1b2-3c45-67d8-e90fa1b2c34d" "90123456-de1f-2b3b-4c5c-bb1112223cd1"   
      --wireless-devices "1ffd32c8-8130-4194-96df-622f072a315f"
  ```

  下面的示例显示了运行此命令的输出：

  ```
  {
      "Arn": "arn:aws:iotwireless:us-east-1:123456789012:NetworkAnalyzerConfiguration/12345678-a1b2-3c45-67d8-e90fa1b2c34d",
      "Id": "12345678-a1b2-3c45-67d8-e90fa1b2c34d"
  }
  ```

**列出网络分析器配置**  
您可以创建多个网络分析器配置，具体取决于要监视的资源以及要针对这些资源接收的跟踪消息收发信息的详细程度。创建这些配置后，可以使用 [ListNetworkAnalyzerConfigurations](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListNetworkAnalyzerConfigurations.html) API 操作或 [ list-network-analyzer-configuration](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/list-network-analyzer-configuration.html) CLI 命令以获取这些配置的列表。

```
aws iotwireless list-network-analyzer-configurations
```

运行此命令会显示您的 AWS 账户 中的所有网络分析器配置。也可以使用 `max-results` 参数来指定要显示多少个配置。下面的内容显示运行此命令的输出。

```
{
   "NetworkAnalyzerConfigurationList": [ 
      { 
         "Arn": "arn:aws:iotwireless:us-east-1:123456789012:NetworkAnalyzerConfiguration/12345678-a1b2-3c45-67d8-e90fa1b2c34d",
         "Name": "My_Network_Analyzer_Config1"
      },
      { 
         "Arn": "arn:aws:iotwireless:us-east-1:123456789012:NetworkAnalyzerConfiguration/90123456-a1a2-9a87-65b4-c12bf3c2d09a",
         "Name": "My_Network_Analyzer_Config2"
      }
   ]
}
```

**删除网络分析器配置**  
您可以通过 [DeleteNetworkAnalyzerConfiguration](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_DeleteNetworkAnalyzerConfiguration.html) API 操作或 [ delete-network-analyzer-configuration](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/delete-network-analyzer-configuration.html) CLI 命令删除不再使用的配置。

```
aws iotwireless delete-network-analyzer-configuration \ 
    --configuration-name My_NetworkAnalyzer_Config
```

运行此命令不会生成任何输出。要查看可用配置，可以使用 `ListNetworkAnalyzerConfigurations` API 操作。

## 后续步骤
<a name="network-analyzer-create-next"></a>

现在您已创建网络分析器配置，可以向配置中添加资源或更新配置设置。有关更多信息，请参阅[添加资源并更新网络分析器配置](network-analyzer-resources.md)。

# 添加资源并更新网络分析器配置
<a name="network-analyzer-resources"></a>

在激活跟踪消息传递之前，您必须向配置中添加资源。您只能使用单个默认的网络分析器配置。适用于 LoRaWAN 的 AWS IoT Core 将名称 **NetworkAnalyzerConfig\$1Default** 分配给此配置，因此该字段无法编辑。当您在控制台使用网络分析器时，此配置会自动添加到您的 AWS 账户 中。

您可以将想要监控的资源添加到此原定设置配置中。资源可以是 LoRaWAN 设备和 LoRaWAN 网关之一，也可以是两者。要将每个单独的资源添加到配置中，请使用无线网关和无线设备标识符。

## 配置设置
<a name="resources-config-settings"></a>

要配置设置，首先将资源添加到原定设置配置中，然后激活跟踪消息。收到跟踪消息日志后，您还可以自定义以下参数更新原定设置配置并筛选日志流。
+ 

**帧信息**  
此设置是跟踪消息的无线设备资源的帧信息。预设情况下，帧信息处于启用状态，可用于调试网络服务器与终端设备之间的通信。
+ 

**日志级别**  
您可以查看信息或错误日志，也可以关闭日志记录。
  + 

**信息**  
日志级别为 **Info** 的日志更详细，包含信息丰富和错误的日志流。信息日志可用于查看设备或网关状态的更改。
**注意**  
收集更多详细的日志流可能会产生额外的成本。有关定价的更多信息，请参阅 [AWS IoT Core 定价](https://aws.amazon.com/iot-core/pricing/)。
  + 

**错误**  
日志级别为 **Error** 的日志不那么详细，只显示错误信息。当应用程序出错（例如设备连接错误）时，可以使用这些日志。通过使用日志流中的信息，您可以识别机群中资源的错误并对其进行故障排除。

## 先决条件
<a name="resources-prereq"></a>

在添加资源之前，必须将您要监控的网关和设备登记到 适用于 LoRaWAN 的 AWS IoT Core。有关更多信息，请参阅[将网关和设备连接到 适用于 LoRaWAN 的 AWS IoT Core](lorawan-getting-started.md)。

## 使用控制台添加资源并更新网络分析器配置
<a name="add-resources-console"></a>

通过使用 AWS IoT 控制台或 AWS IoT Wireless API，您可以添加资源和自定义可选参数。除了资源之外，您还可以编辑配置设置并保存更新的配置。

**向配置添加资源（控制台）**  


1. 打开 AWS IoT控制台[的网络分析器中心](https://console.aws.amazon.com/iot/home#/wireless/networkAnalyzer)然后选择网络分析器配置，**Network Analyszerconfig\$1DEFAULT**。

1. 选择 **Add resource** (添加资源)。

1. 使用无线网关和无线设备标识符添加要监控的资源。您可以添加最多 250 个无线网关或无线设备。添加资源：

   1. 使用**查看网关**或**查看设备**选项卡查看已添加到 AWS 账户的网关和设备列表。

   1. 复制要监控的设备或网关的 `WirelessDeviceID`或 `WirelessGatewayID`，然后输入相应资源的标识符值。

   1. 要继续添加资源，请选择 **Add gateway** （添加网关）或 **Add device**（添加设备），然后添加无线网关或设备。如果您添加了不再想监控的资源，请选择 **Remove resource**（删除资源）。

1. 在添加所有资源后，请选择**Add**（添加）。

   您将在**网络分析器中心页面**中看到添加的网关和设备的数量。在激活跟踪消息会话之前，您仍然可以继续添加网关和设备。激活会话后，要添加资源，您必须停用会话。

**编辑网络分析器配置（控制台）**  
您还可以编辑网络分析器配置，并选择是否禁用帧信息和跟踪消息日志的日志级别。

1. 打开 AWS IoT控制台[的网络分析器中心](https://console.aws.amazon.com/iot/home#/wireless/networkAnalyzer)然后选择网络分析器配置，**Network Analyszerconfig\$1DEFAULT**。

1. 选择**编辑**。

1. 选择是否禁用帧信息并使用**选择日志级别**来选择希望用来跟踪消息日志的日志级别。选择**保存**。

   您将看到在网络分析器配置的详细信息页面中指定的配置设置。

## 使用 API 添加资源并更新网络分析器配置
<a name="network-analyzer-add-resources-api"></a>

您可以使用 [AWS IoT Wireless API 操作](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/)或 [AWS IoT Wireless CLI 命令](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/index.html)添加资源并更新网络分析器配置的配置设置。
+ 要添加资源和更新网络分析器配置，请使用 [UpdateNetworkAnalyzerConfiguration](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_UpdateNetworkAnalyzerConfiguration.html) API 或 [update-network-analyzer-configuration](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/update-network-analyzer-configuration.html) CLI。
  + 

**添加资源**  
对于要添加的无线设备，请使用 `WirelessDevicesToAdd`输入设备的 `WirelessDeviceID`，作为字符串数组。对于要添加的无线网关，请使用 `WirelessGatewaysToAdd`输入 网关 `WirelessGatewayID`，作为字符串数组。
  + 

**编辑配置**  
要编辑网络分析器配置，请使用 `TraceContent`参数来指定是否 `WirelessDeviceFrameInfo`应为 `ENABLED`或 `DISABLED`，以及 `LogLevel`参数是否应为 `INFO`、`ERROR` 或者 `DISABLED`。

  ```
  {
     "TraceContent": { 
        "LogLevel": "string",
        "WirelessDeviceFrameInfo": "string"
     },
     "WirelessDevicesToAdd": [ "string" ],
     "WirelessDevicesToRemove": [ "string" ],
     "WirelessGatewaysToAdd": [ "string" ],
     "WirelessGatewaysToRemove": [ "string" ]
  }
  ```
+ 要获取有关您添加的配置和资源的信息，请使用 [GetNetworkAnalyzerConfiguration](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_UpdateNetworkAnalyzerConfiguration.html) API 操作或 [get-network-analyzer-configuration](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/get-network-analyzer-configuration.html) 命令。提供网络分析器配置的名称，`NetworkAnalyzerConfig_Default`，作为输入。

## 后续步骤
<a name="network-analyzer-resources-next"></a>

现在，您已经添加了资源并为配置指定了任何可选的配置设置，接下来，您可以使用 WebSocket 协议通过与 适用于 LoRaWAN 的 AWS IoT Core 建立连接来使用网络分析器。然后，您可以激活跟踪消息并开始接收资源的跟踪消息。有关更多信息，请参阅[使用 WebSockets 串流网络分析器跟踪消息](network-analyzer-api.md)。

# 使用 WebSockets 串流网络分析器跟踪消息
<a name="network-analyzer-api"></a>

当使用 WebSocket 协议时，您可以实时流式传输网络分析器跟踪消息。当您发送请求时，该服务会使用 JSON 结构响应。激活跟踪消息后，您可以使用消息日志获取有关资源的信息并排查错误。有关更多信息，请参阅[WebSocket Numbers](https://tools.ietf.org/html/rfc6455)。

下面展示了如何使用 WebSockets 流式传输网络分析器跟踪消息。

**Topics**
+ [使用 WebSocket 库生成预签名请求](network-analyzer-generate-request.md)
+ [WebSocket 消息和状态码](network-analyer-messages-status.md)

# 使用 WebSocket 库生成预签名请求
<a name="network-analyzer-generate-request"></a>

下面显示如何生成预签名请求，这样，您就可以使用 WebSocket 库向服务发送请求。

## 将 WebSocket 请求的策略添加到您的 IAM 角色
<a name="network-analyzer-iam"></a>

要使用 WebSocket 协议调用网络分析器，您需要将以下策略附加到发出请求的 AWS Identity and Access Management(IAM) 角色。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iotwireless:StartNetworkAnalyzerStream",
            "Resource": "*"
        }
    ]
}
```

## 创建预签名 URL
<a name="network-analyzer-presigned-url"></a>

为 WebSocket 请求构造一个 URL，该请求中包含在应用程序和网络分析器 之间建立通信所需的信息。要验证请求的标识，WebSocket 流式处理使用 Amazon 签名版本 4 流程处理签名请求。有关签名版本4的更多信息，请参阅 *Amazon Web Services 一般参考*中的[签名 AWSAPI 请求](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html)。

要调用网络分析器，请使用 `StartNetworkAnalyzerStream`请求 URL。使用之前提到的 IAM 角色凭据对请求进行签名。URL的格式如下，出于可读性目的，添加了换行符。

```
GET wss://api.iotwireless.<region>.amazonaws.com/start-network-analyzer-stream?X-Amz-Algorithm=AWS4-HMAC-SHA256
   &X-Amz-Credential=Signature Version 4 credential scope
   &X-Amz-Date=date
   &X-Amz-Expires=time in seconds until expiration
   &X-Amz-Security-Token=security-token
   &X-Amz-Signature=Signature Version 4 signature 
   &X-Amz-SignedHeaders=host
```

对于签名版本 4 参数，请使用以下值：
+ **X-Amz-Algorithm** – 您在签名过程中使用的算法。唯一有效值为 `AWS4-HMAC-SHA256`。
+ **X-Amz-Credential** – 以斜杠（“/”）分隔的字符串，它通过将您的访问密钥 ID 和凭证范围组件串联起来而形成。凭证范围包括采用 YYYYMMDD 格式的日期、AWS 区域、服务名称和终止字符串 (aws4\$1request)。
+ **X-Amz-Date** – 创建签名的日期和时间。根据 *Amazon Web Services 一般参考*中[签名版本 4 中处理日期](https://docs.aws.amazon.com/general/latest/gr/sigv4-date-handling.html)的说明生成日期和时间。
+ **X-Amz-Expires** – 凭证到期之前的时间长度（以秒为单位）。最大值为 300 秒（5 分钟）。
+ **X-Amz-Security-Token** – 临时凭证的签名版本 4 令牌。如果您指定此参数，则将其包含在规范请求中。更多信息，请参阅 *AWSIdentity and Access Management *中的[请求临时安全凭据。](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)
+ **X-Amz-Signature** – 您为请求生成的签名版本 4 签名。
+ **X-Amz-SignedHeaders** – 在为请求创建签名时签名的标头。唯一有效值为 `host`。

## 构建请求 URL 并创建签名版本 4 签名
<a name="connect-iot-network-analyzer-construct-url-sign"></a>

要构造请求的 URL 并创建签名版本 4 签名，请使用以下步骤。这些示例是伪代码。

### 任务 1：创建规范请求
<a name="canonical-request"></a>

创建一个字符串，其中包含来自标准格式的请求的信息。这可确保 AWS在收到请求时，计算出的签名与您在 [任务 3：计算签名](#calculate-signature)中计算出的签名相同。有关更多信息，请参阅 *Amazon Web Services 一般参考*中的 [创建签名版本 4 的规范请求](https://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html)。

1. 为您应用程序中的请求定义变量。

   ```
   # HTTP verb
   method = "GET"
   # Service name
   service = "iotwireless"
   # AWS 区域
   region = "AWS 区域"
   # Service streaming endpoint
   endpoint = "wss://api.iotwireless.region.amazonaws.com"
   # Host
   host = "api.iotwireless.<region>.amazonaws.com"
   # Date and time of request
   amz-date = YYYYMMDD'T'HHMMSS'Z'
   # Date without time for credential scope
   datestamp = YYYYMMDD
   ```

1. 创建规范 URI（统一资源标识符）。规范 URI 是域与查询字符串之间的 URI 部分。

   ```
   canonical_uri = "/start-network-analyzer-stream"
   ```

1. 创建规范标头和签名标头。请注意规范标头尾部的 `\n`。
   + 追加小写标头名称，后跟冒号。
   + 追加该标头的值的逗号分隔列表。请勿对有多个值的标头进行值排序。
   + 追加一个新行(`\n`)。

   ```
   canonical_headers = "host:" + host + "\n"
   signed_headers = "host"
   ```

1. 将算法与哈希算法匹配。您必须使用 SHA-256。

   ```
   algorithm = "AWS4-HMAC-SHA256"
   ```

1. 创建凭证范围，该范围将派生密钥范围限定为发出请求的日期以及将请求发送到的区域和服务。

   ```
   credential_scope = datestamp + "/" + region + "/" + service + "/" + "aws4_request"
   ```

1. 创建规范查询字符串。查询字符串值必须是 URL 编码，并且按名称排序。
   + 按字符代码点以升序顺序对参数名称进行排序。具有重复名称的参数应按值进行排序。例如，以大写字母 F 开头的参数名称排在以小写字母 b 开头的参数名称之前。
   + 请勿对 [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) 定义的任何非预留字符进行 URI 编码，这些字符包括：A-Z、a-z、0-9、连字符 (-)、下划线 (\$1)、句点 (.) 和波形符 (\$1)。
   + 使用 %XY 对所有其他字符进行百分比编码，其中“X”和“Y”为十六进制字符（0-9 和大写字母 A-F）。例如，空格字符必须编码为 %20（不像某些编码方案那样使用“\$1”)，扩展 UTF-8 字符必须采用格式 %XY%ZA%BC。
   + 对参数值中的任何等于 (=) 字符进行双重编码。

   ```
   canonical_querystring  = "X-Amz-Algorithm=" + algorithm
   canonical_querystring += "&X-Amz-Credential="+ URI-encode(access key + "/" + credential_scope)
   canonical_querystring += "&X-Amz-Date=" + amz_date 
   canonical_querystring += "&X-Amz-Expires=300"
   canonical_querystring += "&X-Amz-Security-Token=" + token
   canonical_querystring += "&X-Amz-SignedHeaders=" + signed_headers
   canonical_querystring += "&language-code=en-US&media-encoding=pcm&sample-rate=16000"
   ```

1. 创建负载的哈希。对于 GET 请求，负载为空字符串。

   ```
   payload_hash = HashSHA256(("").Encode("utf-8")).HexDigest()
   ```

1. 组合所有元素以创建规范请求。

   ```
   canonical_request = method + '\n' 
      + canonical_uri + '\n' 
      + canonical_querystring + '\n' 
      + canonical_headers + '\n' 
      + signed_headers + '\n' 
      + payload_hash
   ```

### 任务 2：创建待签字符串
<a name="create-urlsign"></a>

待签字符串包含您的请求的元信息。在计算请求签名时，您可以使用该字符串登录下一步。有关更多信息，请参阅《Amazon Web Services 一般参考》**中的[创建签名版本 4 签名字符串](https://docs.aws.amazon.com/general/latest/gr/sigv4-create-string-to-sign.html)。

```
string_to_sign=algorithm + "\n"
   + amz_date + "\n"
   + credential_scope + "\n"
   + HashSHA256(canonical_request.Encode("utf-8")).HexDigest()
```

### 任务 3：计算签名
<a name="calculate-signature"></a>

您可以从您的 AWS秘密访问密钥派生签名密钥。为了实现更高程度的保护，派生密钥特定于日期、服务和 AWS区域。您可以使用派生密钥签名请求。有关更多信息，请参阅《Amazon Web Services 一般参考》[https://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html](https://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html)中的*为 AWS 签名版本 4 计算签名*。

该代码假定您实施了函数 `GetSignatureKey`来派生签名密钥。有关更多信息，请参阅 [Amazon Web Services 一般参考](https://docs.aws.amazon.com/general/latest/gr/signature-v4-examples.html)中的*如何为签名版本 4 派生签名密钥的示例*。

函数 `HMAC(key, data)`表示以二进制格式返回结果的 HMAC-SHA256 函数。

```
#Create the signing key
signing_key = GetSignatureKey(secret_key, datestamp, region, service)
                
# Sign the string_to_sign using the signing key
signature = HMAC.new(signing_key, (string_to_sign).Encode("utf-8"), Sha256()).HexDigest
```

### 任务 4：将签名信息添加到请求中并创建请求 URL
<a name="sign-request"></a>

在计算签名之后，将它添加到查询字符串。有关更多信息，请参阅 *Amazon Web Services 一般参考*中的[向请求添加签名](https://docs.aws.amazon.com/general/latest/gr/sigv4-add-signature-to-request.html)。

```
#Add the authentication information to the query string
canonical_querystring += "&X-Amz-Signature=" + signature
                
# Sign the string_to_sign using the signing key
request_url = endpoint + canonical_uri + "?" + canonical_querystring
```

## 后续步骤
<a name="network-analyzer-request-next"></a>

现在，您可以在 WebSocket 库中使用请求 URL 向服务发出请求并观察消息。有关更多信息，请参阅[WebSocket 消息和状态码](network-analyer-messages-status.md)。

# WebSocket 消息和状态码
<a name="network-analyer-messages-status"></a>

创建预签名请求后，您可以将请求 URL 与 WebSocket 库或适合您的编程语言的库一起使用，向服务发出请求。有关如何生成此预签请求的更多信息，请参阅 [使用 WebSocket 库生成预签名请求](network-analyzer-generate-request.md)。

## WebSocket 消息
<a name="network-analyer-messages"></a>

可以使用 WebSocket 协议建立双向连接 消息可以从客户端传输到服务器，从服务器传输到客户端。但是，网络分析器仅支持从服务器发送到客户端的消息。从客户端收到的任何消息都是意外的，如果从客户端收到消息，服务器将自动关闭 WebSocket 连接。

收到请求并启动跟踪消息会话时，服务器将使用 JSON 结构（即有效负载）进行响应。有关有效负载以及如何从 AWS 管理控制台激活跟踪消息的更多信息，请参阅 [实时查看和监控网络分析器跟踪消息日志](network-analyzer-logs.md)。

## WebSocket 状态代码
<a name="network-analyer-status-codes"></a>

下面显示了从服务器到客户端的通信的 WebSocket 状态码。WebSocket 状态码遵循 [RFC 正常关闭连接标准](https://datatracker.ietf.org/doc/html/rfc6455#section-7.3)。

下面显示了支持的状态代码：
+ 

**1000**  
此状态代码表示正常关闭，这意味着 WebSocket 连接已建立并且请求已完成。会话处于空闲状态时，可以观察到此状态，从而导致连接超时。
+ 

**1002**  
此状态代码表示端点由于协议错误而终止连接。
+ 

**1003**  
此状态代码表示错误状态，其中端点以无法接受的格式接收数据而终止连接。端点仅支持文本数据，如果它收到来自客户端的二进制消息或使用不受支持的格式的消息，可能会显示此状态代码。
+ 

**1008**  
此状态代码表示错误状态，端点因收到违反其策略的消息而终止连接。此状态为通用状态，当其他状态代码（例如 1003 或 1009）不适用时显示。如果需要隐藏策略或授权失败（例如签名过期），您还会看到此状态显示。
+ 

**1011**  
此状态代码表示错误状态，其中服务器因遇到意外情况或内部错误而导致无法完成请求而终止连接。

## 后续步骤
<a name="network-analyzer-websockets-next"></a>

现在您已经学会了如何生成预签名请求以及如何使用 WebSocket 连接观察来自服务器的消息，现在您可以激活跟踪消息并开始接收无线网关和无线设备资源的消息日志。有关更多信息，请参阅[实时查看和监控网络分析器跟踪消息日志](network-analyzer-logs.md)。

# 实时查看和监控网络分析器跟踪消息日志
<a name="network-analyzer-logs"></a>

如果已将资源添加到网络分析器配置中，可以激活跟踪消息开始接收资源的跟踪消息。您可以使用 AWS 管理控制台、AWS IoT Wireless API 或 AWS CLI。

## 先决条件
<a name="network-analyzer-logs-prereq"></a>

在使用网络分析器激活跟踪消息传送之前，您必须：
+ 将希望监控的资源添加到默认网络分析器配置中。有关更多信息，请参阅[添加资源并更新网络分析器配置](network-analyzer-resources.md)。
+ 通过使用 `StartNetworkAnalyzerStream`请求 URL 生成预签请求。将使用发出此请求的 AWS Identity and Access Management角色的凭据对请求进行签名。有关更多信息，请参阅[创建预签名 URL](network-analyzer-generate-request.md#network-analyzer-presigned-url)。

## 使用控制台激活跟踪消息
<a name="network-analyzer-activate-console"></a>

要激活跟踪消息

1. 打开 AWS IoT控制台[的网络分析器中心](https://console.aws.amazon.com/iot/home#/wireless/networkAnalyzer)然后选择网络分析器配置，**Network Analyszerconfig\$1DEFAULT**。

1. 在网络分析仪配置的详细信息页面中，选择**Activate trace messaging**（激活跟踪消息），然后选择**Activate**（激活）。

   您将开始接收跟踪消息，其中最新的跟踪消息首先出现在控制台中。
**注意**  
消息传递会话开始后，在您停用会话或退出跟踪会话之前，接收跟踪消息可能会产生额外费用。有关定价的更多信息，请参阅 [AWS IoT Core 定价](https://aws.amazon.com/iot-core/pricing/)。

## 查看和监控跟踪消息
<a name="network-analyzer-view-trace"></a>

激活跟踪消息后，将建立 WebSocket 连接，并且跟踪消息开始实时出现，首先是最新消息。您可以自定义首选项以指定要在每个页面中显示的跟踪消息的数量，并仅显示每条消息的相关字段。例如，您可以自定义跟踪消息日志以仅显示具有**日志级别**设置为 `ERROR`，以便您可以快速识别和调试网关的错误。跟踪消息包含以下信息。
+ **消息编号**：显示首先收到的最后一条消息的唯一编号。
+ **资源 ID**：资源的无线网关或无线设备 ID。
+ **时间戳**：收到消息的时间。
+ **消息 ID**：适用于 LoRaWAN 的 AWS IoT Core 分配给每条收到的消息的标识符。
+ **FPort**：使用 WebSocket 连接与设备通信的频率端口。
+ **DevEui**：无线设备的扩展唯一标识符 (EUI)。
+ **资源**：受监控的资源是无线设备还是无线网关。
+ **事件**：无线设备的日志消息的事件，可以是 **Join**、**Rejoin**、**Uplink\$1Data**、**Downlink\$1Data** 或 **Registration**。
+ **日志级别**：有关设备的 `INFO` 或 `ERROR` 日志流的信息。

## 网络分析器 JSON 日志消息
<a name="connect-iot-network-analyzer-trace-logs"></a>

您还可以一次选择一条跟踪消息来查看该消息的 JSON 有效负载。根据在跟踪消息日志中选择的消息，您将在 JSON 负载中看到指示包含两部分的信息：**CustomerLog** 和 **LoRaFrame**。

**CustomerLog**  
JSON 的**客户日志**部分显示接收消息的资源的类型和标识符、日志级别和消息内容。以下示例显示了 **CustomerLog** 日志消息。您可以使用 JSON 中的 `message`字段来获取有关错误以及如何解决错误的更多信息。

**LoRaFrame**  
JSON 的 **lorRaFrame** 部分有**消息 ID** 并包含有关设备的物理负载和无线元数据的信息。

以下示例显示了追踪消息的结构。

```
export type TraceMessage = {
  ResourceId: string;
  Timestamp: string;
  LoRaFrame: 
  {
    MessageId: string;
    PhysicalPayload: any;
    WirelessMetadata: 
    {
      fPort: number;
      dataRate: number;
      devEui: string;
      frequency: number,
      timestamp: string;
    },
  }
  CustomerLog: 
  {
    resource: string;
    wirelessDeviceId: string;
    wirelessDeviceType: string;
    event: string;
    logLevel: string;
    messageId: string;
    message: string;
  },
};
```

## 回顾和后续步骤
<a name="network-analyzer-review"></a>

在本节中，您查看了跟踪消息，并了解了如何使用这些信息调试错误。查看所有消息后，您可以：
+ 

**停用跟踪消息**  
为避免产生任何额外费用，您可以停用跟踪消息传送会话。取消激活会话会断开 WebSocket 连接的连接，因此您将不会收到任何其他跟踪消息。您仍然可以继续在控制台中查看现有消息。
+ 

**编辑配置的帧信息**  
您可以编辑网络分析器配置，然后选择是否停用帧信息并选择消息的日志级别。在更新配置之前，请考虑停用跟踪消息传送会话。要进行这些编辑，请打开 AWS IoT控制台中的[网络分析器详细信息页面](https://console.aws.amazon.com/iot/home#/wireless/networkAnalyzer/details/NetworkAnalyzerConfig_Default)，然后选择 **Edit**（编辑）。然后，您可以使用新的配置设置更新配置，并激活跟踪消息查看更新的消息。
+ 

**向配置添加资源**  
您还可以向网络分析器配置添加更多资源并实时监控。您最多可以合计 250 个无线网关和无线设备资源。要添加资源，请在 AWS IoT控制台的[网络分析器详细信息](https://console.aws.amazon.com/iot/home#/wireless/networkAnalyzer/details/NetworkAnalyzerConfig_Default)页面上，选择 **Resources**（资源）选项卡，然后选择 **Add resources**（添加资源）。然后，您可以使用新资源更新配置并激活跟踪消息查看其他资源的更新消息。

有关通过编辑配置设置和添加资源来更新网络分析器配置的详细信息，请参阅 [添加资源并更新网络分析器配置](network-analyzer-resources.md)。

# 使用网络分析器对多播组和 FUOTA 任务进行调试和故障排除
<a name="lorawan-network-analyzer-fuota"></a>

您可以监控的无线资源包括 LoRaWAN 设备、LoRaWAN 网关和多播组。您还可以使用网络分析器来调试和排查 FUOTA 任务的任何问题。您还可以在 FUOTA 任务进行时，监控和跟踪与设置、数据传输和状态查询相关的消息。

要监控您的 FUOTA 任务，如果该任务包含多播组，则必须将多播组和组中的设备添加到网络分析器配置中。您还必须激活帧信息和组播帧信息，以跟踪在 FUOTA 任务进行过程中与多播组和设备交换的单播和组播上行和下行消息。

要监控多播组，可以将它们添加到网络分析器配置中，并使用组播帧信息，排查发送到这些组的组播下行链路消息的问题。要对尝试加入使用单播通信的组的设备进行故障排除，还必须将这些设备包括在网络分析器配置中。要仅监控与组中设备的单播通信，请激活无线设备的帧信息。这种方法可确保对多播组和加入该组的设备进行全面的监控和诊断。

以下各节介绍如何使用网络分析器对多播组和 FUOTA 任务进行调试和故障排除。

**Topics**
+ [调试仅包含设备的 FUOTA 任务](#lorawan-network-analyzer-fuota-devices)
+ [使用多播组调试 FUOTA 任务](#lorawan-network-analyzer-fuota-multicast)
+ [调试试图加入多播组的设备](#lorawan-network-analyzer-fuota-multicast)
+ [调试多播组会话](#lorawan-network-analyzer-fuota-multicastsession)

## 调试仅包含设备的 FUOTA 任务
<a name="lorawan-network-analyzer-fuota-devices"></a>

您可以使用网络分析器调试其中只添加了 LoRaWAN 设备的 FUOTA 任务。有关向 FUOTA 任务添加设备的信息，请参阅[将设备和多播组添加到 FUOTA 任务并调度 FUOTA 会话](lorawan-fuota-add-devices.md)。要调试 FUOTA 任务，请执行以下步骤：

1. 通过激活无线设备的帧信息，创建网络分析器配置，这样您就可以监控在任务进行时与设备交换的 FUOTA 上行链路和下行链路消息。

1. 使用 FUOTA 任务中设备的无线设备标识符，将这些设备添加到网络分析仪配置中。

1. 激活跟踪消息，以开始接收网络分析器配置中的设备的跟踪消息。

在跟踪消息信息的 `applicationCommandType` 列中，您将开始接收与数据传输和分段设置相关的单播下行链路消息。

**注意**  
如果您在跟踪消息表中看不到 `applicationCommandType` 列，则可以调整表设置以在表中显示该列。

您还可以在 JSON 日志消息的 **WirelessMetadata > ApplicationInfo** 下查看 `applicationCommandType` 和其他详细消息。

## 使用多播组调试 FUOTA 任务
<a name="lorawan-network-analyzer-fuota-multicast"></a>

您可以使用网络分析器调试具有多播组且已将 LoRaWAN 设备添加到该组的 FUOTA 任务。有关向 FUOTA 任务添加设备的信息，请参阅[将设备和多播组添加到 FUOTA 任务并调度 FUOTA 会话](lorawan-fuota-add-devices.md)。要调试 FUOTA 任务，请执行以下步骤：

1. 通过激活无线设备和多播组的帧信息和组播帧信息设置，创建网络分析器配置。

1. 使用 FUOTA 任务中多播组的多播组标识符，将该多播组添加到网络分析器配置中。通过启用组播帧信息，您可以调试在 FUOTA 任务进行时发送给该组的固件数据消息和 FUOTA 状态查询消息。

1. 使用多播组中设备的无线设备标识符，将这些设备添加到网络分析器配置中。通过激活帧信息，您可以监控在 FUOTA 任务进行时直接与设备交换的上行链路和下行链路消息。

1. 激活跟踪消息，以开始接收网络分析器配置中的设备和多播组的跟踪消息。

然后，如 [调试仅包含设备的 FUOTA 任务](#lorawan-network-analyzer-fuota-devices) 中所述，您可以使用跟踪消息表的 `applicationCommandType` 列以及 JSON 日志消息中的详细信息来查看跟踪消息并对其进行调试。

## 调试试图加入多播组的设备
<a name="lorawan-network-analyzer-fuota-multicast"></a>

您可以使用网络分析器来调试试图加入多播组的设备。有关向多播组添加设备的信息，请参阅[创建多播组并将设备添加到组](lorawan-create-multicast-groups.md)。要调试多播组，请执行以下步骤：

1. 通过激活无线设备的帧信息来创建网络分析器配置。

1. 使用要监控的设备的无线设备标识符，将这些设备添加到网络分析器配置中。

1. 激活跟踪消息，以开始接收网络分析器配置中的设备的跟踪消息。

1. 为多播组中的设备激活跟踪消息后，开始将设备与多播组相关联。

## 调试多播组会话
<a name="lorawan-network-analyzer-fuota-multicastsession"></a>

您可以使用网络分析器调试多播组会话。有关更多信息，请参阅[调度向多播组中的设备发送下行链路消息](lorawan-multicast-schedule-downlink.md)。要调试多播组会话，请执行以下步骤：

1. 通过激活多播组的组播帧信息，创建网络分析器配置。

1. 使用要监控的多播组的多播组标识符，将此多播组添加到网络分析器配置中。

1. 在组播会话开始之前，激活跟踪消息以开始接收多播组会话的跟踪消息。

1. 启动多播组会话，并通过查看跟踪消息表中显示的消息和 JSON 日志消息来监控状态。

在跟踪消息表中，`MulticastAddr` 将显示在 `DevAddr` 列中。在 JSON 日志消息中，您可以查看详细信息，例如 **WirelessMetadata > ApplicationInfo** 下的 `MulticastGroupId`。