使用 Amazon CloudWatch 网络监测仪查询接口 - Amazon CloudWatch

使用 Amazon CloudWatch 网络监测仪查询接口

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

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

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

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

如何使用查询接口

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

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

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

  2. 您可以搭配使用监测仪名称和 GetQueryResults API 操作来指定查询 ID,以返回查询的数据结果。每种查询类型都会返回不同的数据字段集。要了解更多信息,请参阅获取查询结果

查询接口提供以下查询类型。每种查询类型都会从日志文件中返回一组不同的流量信息,如下所示。

  • 测量数据:以 5 分钟为间隔提供可用性分数、性能分数、总流量和往返时间。

  • 排名靠前的位置:按流量提供您正在监测的“排名靠前的位置 + 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。您可以将此筛选器与总体流量建议详细信息查询类型一起使用。

  • 地理位置:为某些查询指定 geo。对于使用 Top locations 查询类型的查询,此为必需项,但不允许用于其他查询类型。要了解何时为筛选参数指定 geo,请参阅 Query examples 部分。

对于路由建议查询类型,您可以通过指定以下一个或多个条件,对数据进行更多筛选:

  • 当前 AWS 位置:指定一个 AWS 区域,例如 us-east-2

  • 建议的 AWS位置:指定一个 AWS 区域,例如 us-east-2

  • IPv4 前缀:指定标准格式的 IPv4 前缀,类似于 192.0.2.0/24

  • 监测仪 ARN:指定特定监测仪的 ARN。

  • DNS 解析程序 IP:指定 DNS 解析程序的 IP 地址。

  • DNS 解析程序 ISP:指定 DNS 解析程序(通常为 ISP)的名称,例如 Cloudflare

  • DNS 解析程序 ASN:指定 DNS 解析程序的自治系统编号(ASN),例如 4225。

可用于筛选数据的运算符是 EQUALSNOT_EQUALS。有关筛选参数的详细信息,请参阅 FilterParameter API 操作。

要查看有关查询接口操作的详细信息,请参阅《Amazon CloudWatch 网络监测仪 API 参考指南》中的以下 API 操作:

  • 要创建和运行查询,请参阅 StartQuery API 操作。

  • 要停止查询,请参阅 StopQuery API 操作。

  • 要为您创建的查询返回数据,请参阅 GetQueryResults API 操作。

  • 要检索查询的状态,请参阅 GetQueryStatus API 操作。

查询示例

要创建可用于从监测仪日志文件中检索经过筛选的数据集的查询,可以使用 StartQuery 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 设置为“洛杉矶”。现在,该查询返回的是洛杉矶都会区排名靠前的城市网络,而不是总体上排名靠前的都会区+网络。

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

{ 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]

获取查询结果

定义查询后,您可以通过运行另一个网络监测仪 API 操作 GetQueryResults 来返回一组查询结果。运行 GetQueryResults 时 ,您可以为已定义的查询指定查询 ID 以及监测仪名称。GetQueryResults 会将指定查询的数据检索到结果集中。

运行查询时,请确保查询已完成运行,然后再使用 GetQueryResults 查看结果。您可以使用 GetQueryStatus API 操作来确定查询是否已完成。当查询的 StatusSUCCEEDED 时,您可以放心查看结果。

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

测量值

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 字段选择该位置类型时,才会返回 citymetrosubdivision。根据您为 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

问题排查

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

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

这些权限包含在推荐 AWS Identity and Access Management 策略中,以便在控制台中使用网络监测仪控制面板。有关更多信息,请参阅 Amazon CloudWatch 网络监测仪的 AWS 托管策略