

# 使用 CloudWatch 工具和网络监测仪查询接口探索您的数据
<a name="CloudWatch-IM-view-cw-tools"></a>

除了使用网络监测仪控制面板实现应用程序的性能和可用性可视化之外，您还可以使用多种方法来深入了解网络监测仪为您生成的数据。这些方法包括将 CloudWatch 工具与存储在 CloudWatch 日志文件中的网络监测仪数据一起使用，以及使用 Internet Monitor 查询接口。您可以使用的工具包括 CloudWatch Logs Insights、CloudWatch Metrics、CloudWatch Contributor Insights 和 Amazon Athena。您可以根据需要使用其中一些或全部工具以及控制面板来探索网络监测仪数据。

网络监测仪汇总了有关应用程序流量和每个 AWS 区域 流量的 CloudWatch 指标，包括总流量影响、可用性和往返时间等数据。这些数据将发布到 CloudWatch Logs，也可以与网络监测仪查询接口一起使用。有关地理粒度以及可供探索之信息的其他方面的详细信息各不相同。

网络监测仪以 5 分钟为间隔发布的监测仪数据，然后以多种方式提供这些数据。下表列出了访问网络监测仪数据的场景，并描述了为每个场景收集的数据的特征。


****  

| 功能 | CloudWatch Logs | 导出到 S3 | 查询接口 | CloudWatch 控制面板 | 
| --- | --- | --- | --- | --- | 
| 默认情况下启用 | 是 | 否 | 是 | 是 | 
| 为其收集数据的城市网络数量 | 前 500 个（参见下面的注释） | 全部 | 全部 | 全部 | 
| 数据留存 | 受用户控制 | 受用户控制 | 30 天 | 30 天 | 
| 为其收集数据的地理粒度 | 全部（城市-网络、都会区\$1网络、分区\$1网络、国家/地区\$1网络） | 城市网络 | 全部（城市-网络、都会区\$1网络、分区\$1网络、国家/地区\$1网络） | 全部（城市-网络、都会区\$1网络、分区\$1网络、国家/地区\$1网络） | 
| 如何查询和筛选数据 | [使用 CloudWatch Logs Insights 浏览网络监测仪测量数据](CloudWatch-IM-view-cw-tools-logs-insights.md) | [使用 Amazon Athena 查询 Amazon S3 日志文件中的互联网测量数据](CloudWatch-IM-view-cw-tools.S3_athena.md) | [网络监测仪查询接口](CloudWatch-IM-view-cw-tools-cwim-query.md) | [使用 Internet Monitor 控制面板进行监控和优化](CloudWatch-IM-monitor-and-optimize.md) | 

注意：前 500 个测量值对应于城市网络；前 250 个对应于都会区\$1网络，前 100 个对应于分区\$1网络，前 50 个对应于国家/地区\$1网络。

本章介绍如何使用 CloudWatch 工具或网络监测仪查询接口来查询和探索您的数据，以及每种方法的示例。

**Topics**
+ [CloudWatch Logs Insights](CloudWatch-IM-view-cw-tools-logs-insights.md)
+ [CloudWatch Contributor Insights](CloudWatch-IM-view-cw-tools-contributor-insights.md)
+ [CloudWatch Metrics](CloudWatch-IM-view-cw-tools-metrics-dashboard.md)
+ [将 Athena 与 S3 日志搭配使用](CloudWatch-IM-view-cw-tools.S3_athena.md)
+ [网络监测仪查询接口](CloudWatch-IM-view-cw-tools-cwim-query.md)

# 使用 CloudWatch Logs Insights 浏览网络监测仪测量数据
<a name="CloudWatch-IM-view-cw-tools-logs-insights"></a>

您可以使用 CloudWatch Logs Insights 查询来筛选特定城市或地理位置（客户端位置）、客户端 ASN（ISP）和 AWS 源位置的日志子集。网络监测仪将可用性和往返时间的精细测量数据发布到 CloudWatch Logs，您可以使用 CloudWatch Logs Insights 进行浏览。

要详细了解网络监测仪中的客户端位置准确性，请参阅 [网络监测仪中的地理位置信息和准确性](CloudWatch-IM-inside-internet-monitor.md#IMGeolocationSourceAccuracy)。

本节中的示例可以帮助您创建 CloudWatch Logs Insights 查询，以了解有关您自己的应用程序流量测量数据和指标的更多信息。如果您在 CloudWatch Logs Insights 中使用这些示例，请将 *monitorName* 替换为您自己的监测仪名称。

**查看流量优化建议**

在 Internet Monitor 的**流量洞察**选项卡上，您可以按位置筛选并查看流量优化建议。要查看此选项卡上的**流量优化建议**部分中显示的相同信息，但不使用位置粒度筛选条件，您可以使用以下 CloudWatch Logs Insights 查询。

1. 在 AWS 管理控制台 中，导航到 CloudWatch Logs Insights。

1. 对于 **Log Group**（日志组），选择 `/aws/internet-monitor/monitorName/byCity` 和 `/aws/internet-monitor/monitorName/byCountry`，然后指定时间范围。

1. 添加以下查询，然后运行该查询。

```
fields @timestamp, 
clientLocation.city as @city, clientLocation.subdivision as @subdivision, clientLocation.country as @country,
`trafficInsights.timeToFirstByte.currentExperience.serviceName` as @serviceNameField,
concat(@serviceNameField, ` (`, `serviceLocation`, `)`) as @currentExperienceField,
concat(`trafficInsights.timeToFirstByte.ec2.serviceName`, ` (`, `trafficInsights.timeToFirstByte.ec2.serviceLocation`, `)`) as @ec2Field,
`trafficInsights.timeToFirstByte.cloudfront.serviceName` as @cloudfrontField,
concat(`clientLocation.networkName`, ` (AS`, `clientLocation.asn`, `)`) as @networkName
| filter ispresent(`trafficInsights.timeToFirstByte.currentExperience.value`)
| stats avg(`trafficInsights.timeToFirstByte.currentExperience.value`) as @averageTTFB,
avg(`trafficInsights.timeToFirstByte.ec2.value`) as @ec2TTFB,
avg(`trafficInsights.timeToFirstByte.cloudfront.value`) as @cloudfrontTTFB,
sum(`bytesIn` + `bytesOut`) as @totalBytes,
latest(@ec2Field) as @ec2,
latest(@currentExperienceField) as @currentExperience,
latest(@cloudfrontField) as @cloudfront,
count(*) by @networkName, @city, @subdivision, @country
| display @city, @subdivision, @country, @networkName, @totalBytes, @currentExperience, @averageTTFB, @ec2, @ec2TTFB, @cloudfront, @cloudfrontTTFB
| sort @totalBytes desc
```

**查看互联网可用性和 RTT（p50、p90 和 p95）**

要查看流量的互联网可用性和往返时间（p50、p90 和 p95），您可以使用以下 CloudWatch Logs Insights 查询。

**最终用户地理位置：**美国伊利诺伊州芝加哥

**最终用户网络（ASN）：**AS7018 

**AWS 服务位置：**美国东部（弗吉尼亚州北部）地区

要查看日志，请执行以下操作：

1. 在 AWS 管理控制台 中，导航到 CloudWatch Logs Insights。

1. 对于 **Log Group**（日志组），选择 `/aws/internet-monitor/monitorName/byCity` 和 `/aws/internet-monitor/monitorName/byCountry`，然后指定时间范围。

1. 添加以下查询，然后运行该查询。

该查询将返回在选定时间范围内从伊利诺伊州芝加哥的 AS7018 连接到美国东部（弗吉尼亚州北部）地区用户的所有性能数据。

```
fields @timestamp, 
internetHealth.availability.experienceScore as availabilityExperienceScore, 
internetHealth.availability.percentageOfTotalTrafficImpacted as percentageOfTotalTrafficImpacted,
internetHealth.performance.experienceScore as performanceExperienceScore,
internetHealth.performance.roundTripTime.p50 as roundTripTimep50, 
internetHealth.performance.roundTripTime.p90 as roundTripTimep90, 
internetHealth.performance.roundTripTime.p95 as roundTripTimep95
 | filter clientLocation.country == `United States` 
 and clientLocation.city == `Chicago` 
 and serviceLocation == `us-east-1` 
 and clientLocation.asn == 7018
```

有关更多信息，请参阅[使用 CloudWatch Logs Insights 分析日志数据](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)。

# 使用 Contributor Insights 确定主要位置和 ISP
<a name="CloudWatch-IM-view-cw-tools-contributor-insights"></a>

CloudWatch Contributor Insights 可以帮助您确定 AWS 应用程序的主要客户端位置和 ASN [通常是互联网服务提供商（ISP）]。通过以下 Contributor Insights 示例规则，开始使用对网络监测仪有用的规则。有关更多信息，请参阅 [在 CloudWatch 中创建 Contributor Insights 规则](ContributorInsights-CreateRule.md)。

要详细了解网络监测仪中的客户端位置准确性，请参阅 [网络监测仪中的地理位置信息和准确性](CloudWatch-IM-inside-internet-monitor.md#IMGeolocationSourceAccuracy)。

**注意**  
网络监测仪每五分钟存储一次互联网监测数据，因此在设置 Contributor Insights 规则后，必须将查看图表的周期调整为五分钟。

**查看受可用性影响的排名靠前的位置和 ASN**

要查看受可用性下降影响的主要客户端位置和 ASN，您可以在语法编辑器中使用以下 Contributor Insights 规则。请将 *monitor-name* 替换为您自己的监视器名称。

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "AggregateOn": "Sum",
    "Contribution": {
        "Filters": [
            {
                "Match": "$.clientLocation.city",
                "IsPresent": true
            }
        ],
        "Keys": [
            "$.clientLocation.city",
            "$.clientLocation.networkName"
        ],
        "ValueOf": "$.awsInternetHealth.availability.percentageOfTotalTrafficImpacted"
    },
    "LogFormat": "JSON",
    "LogGroupNames": [
        "/aws/internet-monitor/monitor-name/byCity"
    ]
}
```

**查看受延迟影响的主要客户端位置和 ASN**

要查看受往返时间（延迟）增加影响的主要客户端位置和 ASN，您可以在语法编辑器中使用以下 Contributor Insights 规则。请将 *monitor-name* 替换为您自己的监视器名称。

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "AggregateOn": "Sum",
    "Contribution": {
        "Filters": [            {
                "Match": "$.clientLocation.city",
                "IsPresent": true
            }
        ],
        "Keys": [
            "$.clientLocation.city",
            "$.clientLocation.networkName"
        ],
        "ValueOf": "$.awsInternetHealth.performance.percentageOfTotalTrafficImpacted"
    },
    "LogFormat": "JSON",
    "LogGroupNames": [
        "/aws/internet-monitor/monitor-name/byCity"
    ]
}
```

**查看受总流量百分比影响的主要客户端位置和 ASN**

要查看受总流量百分比影响的主要客户端位置和 ASN，您可以在语法编辑器中使用以下 Contributor Insights 规则。请将 *monitor-name* 替换为您自己的监视器名称。

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "AggregateOn": "Sum",
    "Contribution": {
        "Filters": [
            {
                "Match": "$.clientLocation.city",
                "IsPresent": true
            }
        ],
        "Keys": [
            "$.clientLocation.city",
            "$.clientLocation.networkName"
        ],
        "ValueOf": "$.percentageOfTotalTraffic"
    },
    "LogFormat": "JSON",
    "LogGroupNames": [
        "/aws/internet-monitor/monitor-name/byCity"
    ]
}
```

# 在 CloudWatch Metrics 中查看网络监测仪指标或设置警报
<a name="CloudWatch-IM-view-cw-tools-metrics-dashboard"></a>

您可以在 CloudWatch 控制台中使用 CloudWatch 警报和 CloudWatch Metrics 来查看或设置有关网络监测仪指标的警报。网络监测仪会将指标发布到您的账户，包括性能、可用性、往返时间和吞吐量（每秒字节数）等指标。要查找监测仪的所有指标，请在 CloudWatch Metrics 控制面板中使用自定义命名空间 `AWS/InternetMonitor`。

要查看使用其中几个指标来帮助确定要为监测仪选择的城市网络最大限制的示例，请参阅[选择城市-网络最大值](IMCityNetworksMaximum.md)。要详细了解如何为网络监测仪设置警报，请参阅[使用网络监测仪创建警报](CloudWatch-IM-create-alarm.md)。

这些指标跨越以下流量进行了汇总：监测仪中的 VPC、网络负载均衡器、CloudFront 分配或 WorkSpaces 目录的所有互联网流量，以及流向每个 AWS 区域 和受监测的互联网边缘站点的所有流量。区域由服务位置定义，服务位置可以是所有位置，也可以是一个特定的区域，例如 `us-east-1`。

注意：*城市-网络*是客户端位置和客户端使用的 ASN [通常是互联网服务提供商（ISP）] 的配对。

Internet Monitor 提供以下指标。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-view-cw-tools-metrics-dashboard.html)

有关更多信息，请参阅 [Amazon CloudWatch 中的指标](working_with_metrics.md)。

# 使用 Amazon Athena 查询 Amazon S3 日志文件中的互联网测量数据
<a name="CloudWatch-IM-view-cw-tools.S3_athena"></a>

您可以使用 Amazon Athena，来查询和查看网络监测仪发布到 Amazon S3 存储桶的互联网测量数据。网络监测仪中有一个选项，选择此选项后可将应用程序的互联网测量数据发布到 S3 存储桶，以了解所监测城市-网络 [客户端位置和 ASN，后者通常是互联网服务提供商（ISP）] 的互联网流量。无论您是否选择将测量数据发布到 S3，Internet Monitor 每五分钟都会自动将每个监测仪的前 500 个（按流量计）城市网络的互联网测量数据发布到 CloudWatch Logs。

本章包括如何在 Athena 中为位于 S3 日志文件中的互联网测量数据创建表的步骤，然后提供[示例查询](#CloudWatch-IM-view-cw-tools.S3_athena.athena-sample-queries)以查看测量数据的不同视图。例如，您可以按延迟影响查询受影响的前 10 个城市网络。

## 使用 Amazon Athena 在 Internet Monitor 中创建互联网测量数据表
<a name="CloudWatch-IM-view-cw-tools.S3_athena.athena-queries"></a>

要开始将 Athena 与您的网络监测仪 S3 日志文件结合使用，您首先需要为互联网测量数据创建一个表。

按照此过程中的步骤在 Athena 中根据 S3 日志文件创建表。然后，您可以在表上运行 Athena 查询，例如[这些示例互联网测量数据查询](#CloudWatch-IM-view-cw-tools.S3_athena.athena-sample-queries)，以获取有关测量数据的信息。

**创建 Athena 表**

1. 从 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/) 打开 Athena 控制台。

1. 在 Athena 查询编辑器中，输入查询语句以生成一个包含 Internet Monitor 互联网测量数据的表。将 LOCATION 参数的值替换为存储 Internet Monitor 互联网测量数据的 S3 存储桶的位置。

   ```
   CREATE EXTERNAL TABLE internet_measurements (
       version INT,
       timestamp INT,
       clientlocation STRING,
       servicelocation STRING,
       percentageoftotaltraffic DOUBLE,
       bytesin INT,
       bytesout INT,
       clientconnectioncount INT,
       internethealth STRING,
       trafficinsights STRING
   )
   PARTITIONED BY (year STRING, month STRING, day STRING)
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
   LOCATION
   's3://amzn-s3-demo-bucket/bucket_prefix/AWSLogs/account_id/internetmonitor/AWS_Region/'
   TBLPROPERTIES ('skip.header.line.count' = '1');
   ```

1. 输入一条语句来创建一个分区以读取数据。例如，以下示例查询创建了指定日期和位置的单个分区：

   ```
   ALTER TABLE internet_measurements
   ADD PARTITION (year = 'YYYY', month = 'MM', day = 'dd')
   LOCATION
   's3://amzn-s3-demo-bucket/bucket_prefix/AWSLogs/account_id/internetmonitor/AWS_Region/YYYY/MM/DD';
   ```

1. 选择**运行**。

**互联网测量数据的 Athena 语句示例**

下面是用于生成表的语句示例：

```
CREATE EXTERNAL TABLE internet_measurements (
    version INT,
    timestamp INT,
    clientlocation STRING,
    servicelocation STRING,
    percentageoftotaltraffic DOUBLE,
    bytesin INT,
    bytesout INT,
    clientconnectioncount INT,
    internethealth STRING,
    trafficinsights STRING
)
PARTITIONED BY (year STRING, month STRING, day STRING)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://internet-measurements/TestMonitor/AWSLogs/1111222233332/internetmonitor/us-east-2/'
TBLPROPERTIES ('skip.header.line.count' = '1');
```

以下是用于创建分区以读取数据的语句示例：

```
ALTER TABLE internet_measurements
ADD PARTITION (year = '2023', month = '04', day = '07')
LOCATION 's3://internet-measurements/TestMonitor/AWSLogs/1111222233332/internetmonitor/us-east-2/2023/04/07/'
```

## 用于 Internet Monitor 中互联网测量数据的 Amazon Athena 查询示例
<a name="CloudWatch-IM-view-cw-tools.S3_athena.athena-sample-queries"></a>

本节包含查询示例，您可以在 Amazon Athena 中使用这些查询来获取有关发布到 Amazon S3 的应用程序互联网测量数据的信息。

**查询前 10 个（按流量的总百分比计）受影响的客户端位置和 ASN**

运行此 Athena 查询，返回受影响的前 10 个（按流量的总百分比计）城市网络（即客户端位置和 ASN，通常是互联网服务提供商）。

```
SELECT json_extract_scalar(clientLocation, '$.city') as city,
    json_extract_scalar(clientLocation, '$.networkname') as networkName,
    sum(percentageoftotaltraffic) as percentageoftotaltraffic
FROM internet_measurements
GROUP BY json_extract_scalar(clientLocation, '$.city'),
    json_extract_scalar(clientLocation, '$.networkname')
ORDER BY percentageoftotaltraffic desc
limit 10
```

**查询受影响的前 10 个（按可用性计）客户端位置和 ASN**

运行此 Athena 查询，返回受影响的前 10 个（按流量的总百分比计）城市网络（即客户端位置和 ASN，通常是互联网服务提供商）。

```
SELECT json_extract_scalar(clientLocation, '$.city') as city,
    json_extract_scalar(clientLocation, '$.networkname') as networkName,
    sum(
        cast(
            json_extract_scalar(
                internetHealth,
                '$.availability.percentageoftotaltrafficimpacted'
            )
        as double ) 
    ) as percentageOfTotalTrafficImpacted
FROM internet_measurements
GROUP BY json_extract_scalar(clientLocation, '$.city'),
    json_extract_scalar(clientLocation, '$.networkname')
ORDER BY percentageOfTotalTrafficImpacted desc
limit 10
```

**查询受影响的前 10 个（按延迟计）客户端位置和 ASN**

运行此 Athena 查询，返回受影响的前 10 个（按延迟影响计）城市网络（即客户端位置和 ASN，通常是互联网服务提供商）。

```
SELECT json_extract_scalar(clientLocation, '$.city') as city,
    json_extract_scalar(clientLocation, '$.networkname') as networkName,
    sum(
        cast(
            json_extract_scalar(
                internetHealth,
                '$.performance.percentageoftotaltrafficimpacted'
            )
        as double ) 
    ) as percentageOfTotalTrafficImpacted
FROM internet_measurements
GROUP BY json_extract_scalar(clientLocation, '$.city'),
    json_extract_scalar(clientLocation, '$.networkname')
ORDER BY percentageOfTotalTrafficImpacted desc
limit 10
```

**查询您的客户端位置和 ASN 的流量亮点**

运行此 Athena 查询以返回流量亮点，包括可用性分数、性能分数以及城市网络（即客户端位置和 ASN，通常是互联网服务提供商）的首字节时间。

```
SELECT json_extract_scalar(clientLocation, '$.city') as city,
    json_extract_scalar(clientLocation, '$.subdivision') as subdivision,
    json_extract_scalar(clientLocation, '$.country') as country,
    avg(cast(json_extract_scalar(internetHealth, '$.availability.experiencescore') as double)) as availabilityScore,
    avg(cast(json_extract_scalar(internetHealth, '$.performance.experiencescore') as double)) performanceScore,
    avg(cast(json_extract_scalar(trafficinsights, '$.timetofirstbyte.currentexperience.value') as double)) as averageTTFB,
    sum(bytesIn) as bytesIn,
    sum(bytesOut) as bytesOut,
    sum(bytesIn + bytesOut) as totalBytes
FROM internet_measurements
where json_extract_scalar(clientLocation, '$.city') != 'N/A'
GROUP BY 
json_extract_scalar(clientLocation, '$.city'),
    json_extract_scalar(clientLocation, '$.subdivision'),
    json_extract_scalar(clientLocation, '$.country')
ORDER BY totalBytes desc
limit 100
```

有关使用 Athena 的更多信息，请参阅 [Amazon Athena 用户指南](https://docs.aws.amazon.com/athena/latest/ug/)。

# 网络监测仪查询接口
<a name="CloudWatch-IM-view-cw-tools-cwim-query"></a>

要详细了解 AWS 应用程序的互联网流量，可以选择使用网络监测仪*查询接口*。要使用该查询接口，您需要使用所选数据筛选条件创建查询，然后运行查询以返回网络监测仪数据的子集。浏览查询返回的数据可以让您深入了解应用程序在互联网上的表现。

您可以查询和探索网络监测仪使用监测仪捕获的所有指标，包括可用性和性能分数、传输的字节数、往返时间和首字节时间（TTFB）。

网络监测仪使用查询接口提供您可以在网络监测仪控制台控制面板中探索的数据。通过使用控制面板中的搜索选项（在**分析**页面或**优化**页面上），您可以查询和筛选应用程序的互联网数据。

如果您想要比控制面板更灵活的数据探索和筛选方式，则可以通过将网络监测仪 API 操作与 AWS Command Line Interface 或 AWS SDK 配合使用，自行使用查询接口。本部分介绍可与查询接口一起使用的查询类型，以及为创建数据子集可指定的筛选条件器，以便深入了解应用程序的互联网流量。

**Topics**
+ [如何使用查询接口](#CloudWatch-IM-view-cw-tools-cwim-query-use-query)
+ [查询示例](#CloudWatch-IM-view-cw-tools-cwim-query-example-queries)
+ [获取查询结果](#CloudWatch-IM-view-cw-tools-cwim-query-get-data)
+ [问题排查](#CloudWatch-IM-view-cw-tools-cwim-query-troubleshooting)

## 如何使用查询接口
<a name="CloudWatch-IM-view-cw-tools-cwim-query-use-query"></a>

您可以使用查询接口创建查询，方法是选择*查询类型*，然后指定筛选条件值，以返回所需的特定日志文件数据子集。然后，您可以使用该数据子集执行进一步筛选和排序、创建报告等操作。

查询过程的工作方式如下所示：

1. 运行查询时，网络监测仪会返回查询所特有的 `query ID`。本部分介绍可用的查询类型以及可用于筛选查询中数据的选项。要了解其工作原理，您还可以查看[查询示例](#IMQueryInterfaceExamples)部分。

1. 您可以搭配使用监测仪名称和 [GetQueryResults](https://docs.aws.amazon.com/internet-monitor/latest/api/API_GetQueryResults.html) API 操作来指定查询 ID，以返回查询的数据结果。每种查询类型都会返回不同的数据字段集。要了解更多信息，请参阅[获取查询结果](#IMGetQueryData)。

查询接口提供以下查询类型。每种查询类型都会从日志文件中返回一组不同的流量信息，如下所示。
+ **测量数据：**以 5 分钟为间隔提供可用性分数、性能分数、总流量和往返时间。
+ **排名靠前的位置：**按流量提供您正在监测的“排名靠前的位置 \$1 ASN”组合的可用性分数、性能分数、总流量和首字节时间（TTFB）信息。
+ **排名靠前的位置详情：**以 1 小时为间隔提供 Amazon CloudFront 的 TTFB、您当前的配置以及性能最佳的 Amazon EC2 配置。
+ **总体流量建议：**提供每个受监测 AWS 位置的所有流量的 TTFB（基于 30 天加权平均值）。
+ **总体流量建议详细信息：**提供了每个主要位置以及建议的 AWS 位置的 TTFB（基于 30 天加权平均值）。
+ **路由建议：**为 DNS 解析程序提供从 IP 前缀到 AWS 位置的预测平均往返时间（RTT）。RTT 以一小时为间隔计算，计算周期为一小时。

您可以使用特定条件对数据进行更多筛选。对于大多数查询类型，除了路由建议，您可以通过指定以下一个或多个条件进行筛选：
+ **AWS 位置：**对于 AWS 位置，您可以指定 CloudFront 或 AWS 区域，例如 `us-east-2`。
+ **ASN：**指定 DNS 解析程序（通常为 ISP）的自治系统编号（ASN），例如 4225。
+ **客户端位置：**对于位置，请指定城市、都会区、分区或国家/地区。
+ **建议的 AWS 位置：**指定 AWS 区域（例如 `us-east-2`）或 AWS 本地区域。您可以将此筛选器与总体流量建议详细信息查询类型一起使用。
+ **地理位置：**为某些查询指定 `geo`。对于使用 `Top locations` 查询类型的查询，此为必需项，但不允许用于其他查询类型。要了解何时为筛选参数指定 `geo`，请参阅 [Query examples](#IMQueryInterfaceExamples) 部分。

对于路由建议查询类型，您可以通过指定以下一个或多个条件，对数据进行更多筛选：
+ **当前 AWS 位置：**指定一个 AWS 区域，例如 `us-east-2`。
+ **建议的 AWS 位置：**指定 AWS 区域（例如 `us-east-2`）或 AWS 本地区域。
+ **IPv4 前缀：**指定标准格式的 IPv4 前缀，类似于 `192.0.2.0/24`。
+ **监测仪 ARN：**指定特定监测仪的 ARN。
+ **DNS 解析程序 IP：**指定 DNS 解析程序的 IP 地址。
+ **DNS 解析程序 ISP：**指定 DNS 解析程序（通常为 ISP）的名称，例如 `Cloudflare`。
+ **DNS 解析程序 ASN：**指定 DNS 解析程序的自治系统编号（ASN），例如 4225。

可用于筛选数据的运算符是 `EQUALS` 和 `NOT_EQUALS`。有关筛选参数的详细信息，请参阅 [FilterParameter](https://docs.aws.amazon.com/internet-monitor/latest/api/API_FilterParameter.html) API 操作。

要查看有关查询接口操作的详细信息，请参阅《Internet Monitor API Reference Guide》中的以下 API 操作：
+ 要创建和运行查询，请参阅 [StartQuery](https://docs.aws.amazon.com/internet-monitor/latest/api/API_StartQuery.html) API 操作。
+ 要停止查询，请参阅 [StopQuery](https://docs.aws.amazon.com/internet-monitor/latest/api/API_StopQuery.html) API 操作。
+ 要为您创建的查询返回数据，请参阅 [GetQueryResults](https://docs.aws.amazon.com/internet-monitor/latest/api/API_GetQueryResults.html) API 操作。
+ 要检索查询的状态，请参阅 [GetQueryStatus](https://docs.aws.amazon.com/internet-monitor/latest/api/API_GetQueryStatus.html) API 操作。

## 查询示例
<a name="CloudWatch-IM-view-cw-tools-cwim-query-example-queries"></a>

要创建可用于从监测仪日志文件中检索经过筛选的数据集的查询，可以使用 [StartQuery](https://docs.aws.amazon.com/internet-monitor/latest/api/API_StartQuery.html) API 操作。您可以为查询指定查询类型和筛选参数。然后，当您使用网络监测仪查询接口 API 操作通过查询获取查询结果时，它将检索您要使用的数据子集。

为了说明查询类型和筛选参数的工作原理，让我们看一些示例。

**示例 1**

假设您想要检索特定国家/地区除一个城市外的所有监测仪日志文件数据。以下示例显示了一个查询的筛选参数，您可以使用 `StartQuery` 操作为此场景创建该查询。

```
{
   MonitorName: "TestMonitor"
   StartTime: "2023-07-12T20:00:00Z"
   EndTime: "2023-07-12T21:00:00Z"
   QueryType: "MEASUREMENTS"
   FilterParameters: [
      {
       Field: "country",
       Operator: "EQUALS",
       Values: ["Germany"]
      },
      {
       Field: "city",
       Operator: "NOT_EQUALS",
       Values: ["Berlin"]
      },
    ]
}
```

**示例 2**

再举个示例，假设您想按大都会地区查看排名靠前的位置。您可以为此场景使用以下示例查询。

```
{
   MonitorName: "TestMonitor"
   StartTime: "2023-07-12T20:00:00Z"
   EndTime: "2023-07-12T21:00:00Z"
   QueryType: "TOP_LOCATIONS"
   FilterParameters: [
      {
       Field: "geo",
       Operator: "EQUALS",
       Values: ["metro"]
      },
    ]
}
```

**示例 3**

现在，假设您想查看洛杉矶都会区的主要城市网络组合。为此，请指定 `geo=city`，然后将 `metro` 设置为“洛杉矶”。现在，该查询返回的是洛杉矶都会区排名靠前的城市网络，而不是总体上排名靠前的都会区\$1网络。

以下是您可以使用的示例查询：

```
{
   MonitorName: "TestMonitor"
   StartTime: "2023-07-12T20:00:00Z"
   EndTime: "2023-07-12T21:00:00Z"
   QueryType: "TOP_LOCATIONS"
   FilterParameters: [
      {
       Field: "geo",
       Operator: "EQUALS",
       Values: ["city"]
      },
      {
       Field: "metro",
       Operator: "EQUALS",
       Values: ["Los Angeles"]
      }
    ]
}
```

**示例 4**。

然后，假设您要检索特定地区（例如美国某州）的 TTFB 数据。

您可以为此场景使用以下示例查询：

```
{
   MonitorName: "TestMonitor"
   StartTime: "2023-07-12T20:00:00Z"
   EndTime: "2023-07-12T21:00:00Z"
   QueryType: "TOP_LOCATION_DETAILS"
   FilterParameters: [
      {
       Field: "subdivision",
       Operator: "EQUALS",
       Values: ["California"]
      },
    ]
}
```

**示例 5**

现在，假设您要检索应用程序具有客户端流量的每个位置的 TTFB 数据。

您可以为此场景使用以下示例查询：

```
{
   MonitorName: "TestMonitor"
   StartTime: "2023-07-12T20:00:00Z"
   EndTime: "2023-07-12T21:00:00Z"
   QueryType: "OVERALL_TRAFFIC_SUGGESTIONS"
   FilterParameters: []
}

Results:
[us-east-1, 40, us-west-2, 30],
[us-east-1, 40, us-west-1, 35],
[us-east-1, 40, us-east-1, 44],
[us-east-1, 40, CloudFront, 22],
...
[us-east-2, 44, us-west-2, 30],
[us-east-2, 44, us-west-1, 35],
...
```

**示例 6**

假设您要检索特定新 AWS 区域的 TTFB 数据。

您可以为此场景使用以下示例查询：

```
{
   MonitorName: "TestMonitor"
   StartTime: "2023-07-12T20:00:00Z"
   EndTime: "2023-07-12T21:00:00Z"
   QueryType: "OVERALL_TRAFFIC_SUGGESTIONS_DETAILS"
   FilterParameters: [
      {
       Field: "proposed_aws_location",
       Operator: "EQUALS",
       Values: ["us-west-2"]
      },
   ]
}

Results:
[San Jose, San Jose-Santa Clara, California, United States, 7922, us-east-1, 40, 350, 350, us-west-2, 45]
[San Jose, San Jose-Santa Clara, California, United States, 7922, us-west-1, 35, 450, 450, us-west-2, 45]
```

**示例 7**

最后一个示例是检索特定 DNS 解析程序的数据。

您可以为此场景使用以下示例查询：

```
{
   MonitorName: "TestMonitor"
   StartTime: "2023-07-12T20:00:00Z"
   EndTime: "2023-07-12T21:00:00Z"
   QueryType: "ROUTING_SUGGESTIONS"
   FilterParameters: [
      {
       Field: "proposed_aws_location",
       Operator: "EQUALS",
       Values: ["us-east-1"]
      },
   ]
}

Results:
[162.158.180.245, 13335, Cloudflare, [5.4.0.0/14], us-east-2, 200.0, us-east-1, 160.0]
[162.158.180.243, 13313, Cloudflare, [5.4.0.0/10], us-east-2, 150.0, us-east-1, 125.0]
```

## 获取查询结果
<a name="CloudWatch-IM-view-cw-tools-cwim-query-get-data"></a>

定义查询后，您可以通过运行另一个网络监测仪 API 操作 [GetQueryResults](https://docs.aws.amazon.com/internet-monitor/latest/api/API_GetQueryResults.html) 来返回一组查询结果。运行 `GetQueryResults` 时 ，您可以为已定义的查询指定查询 ID 以及监测仪名称。`GetQueryResults` 会将指定查询的数据检索到结果集中。

运行查询时，请确保查询已完成运行，然后再使用 `GetQueryResults` 查看结果。您可以使用 [GetQueryStatus](https://docs.aws.amazon.com/internet-monitor/latest/api/API_GetQueryStatus.html) API 操作来确定查询是否已完成。当查询的 `Status` 为 `SUCCEEDED` 时，您可以放心查看结果。

查询完成后，您可以使用以下信息帮助查看结果。您用于创建查询的每种查询类型都包含一组来自日志文件的唯一数据字段，如以下列表中所述：

**测量值**  
`measurements` 查询类型会返回以下数据：  
`timestamp, availability, performance, bytes_in, bytes_out, rtt_p50, rtt_p90, rtt_p95`

**排名靠前的位置**  
`top locations` 查询类型会按位置对数据进行分组，并提供一段时间内的平均数据。它返回的数据包括以下各项：  
`aws_location, city, metro, subdivision, country, asn, availability, performance, bytes_in, bytes_out, current_fbl, best_ec2, best_ec2_region, best_cf_fbl`  
请注意，仅当您为 `geo` 字段选择该位置类型时，才会返回 `city`、`metro` 和 `subdivision`。根据您为 `geo` 指定的位置类型，将返回以下位置字段：  

```
city = city, metro, subdivision, country
metro = metro, subdivision, country
subdivision = subdivision, country
country = country
```

**排名靠前的位置详细信息**  
`top locations details` 查询类型会返回按小时分组的数据。该查询会返回以下数据：  
`timestamp, current_service, current_fbl, best_ec2_fbl, best_ec2_region, best_cf_fbl`

**总体流量建议**  
`overall traffic suggestions` 查询类型会返回按小时分组的数据。该查询会返回以下数据：  
`current_aws_location, proposed_aws_location, average_fbl, traffic, optimized_traffic_excluding_cf, optimized_traffic_including_cf`

**总体流量建议详细信息**  
`overall traffic suggestions details` 查询类型会返回按小时分组的数据。该查询会返回以下数据：  
`aws_location, city, metro, subdivision, country, asn, traffic, current_aws_location, fbl_data`

**路由建议**  
`routing suggestions` 查询类型会返回按小时分组的数据。该查询会返回以下数据：  
`dns_resolver_ip, dns_resolver_asn, dns_resolver_isp, ipv4_prefixes, current_aws_location, current_latency, proposed_aws_location, proposed_latency`

运行 `GetQueryResults` API 操作时，网络监测仪会在响应中返回以下各项：
+ 包含查询返回的结果的*数据字符串数组*。该信息以与 `Fields` 字段匹配的数组形式返回，也由该 API 调用返回。您可以使用 `Fields` 字段解析 `Data` 存储库中的信息，然后根据需要对其进行进一步筛选或排序。
+ 一个*字段数组*，其中列出了查询为其返回数据的字段（在 `Data` 字段响应中）。数组中的每一项都是一个名称-数据类型对，例如 `availability_score`-`float`。

## 问题排查
<a name="CloudWatch-IM-view-cw-tools-cwim-query-troubleshooting"></a>

如果您在使用查询接口 API 操作时返回错误，请确认您拥有使用网络监测仪所需的权限。具体而言，请确保您拥有以下权限：

```
internetmonitor:StartQuery
internetmonitor:GetQueryStatus
internetmonitor:GetQueryResults
internetmonitor:StopQuery
```

这些权限包含在推荐 AWS Identity and Access Management 策略中，以便在控制台中使用网络监测仪控制面板。有关更多信息，请参阅 [网络监测仪的 AWS 托管策略](CloudWatch-IM-permissions.md)。