CloudWatch 用于监控和记录 GraphQL 数据 API - AWS AppSync

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

CloudWatch 用于监控和记录 GraphQL 数据 API

您可以使用 CloudWatch 指标和日志记录和调试 GraphQ API L。 CloudWatch 这些工具使开发人员能够有效地监控性能、解决问题并优化 GraphQL 操作。

CloudWatch metrics 是一种工具,可提供各种指标来监控API性能和使用情况。这些指标分为两大类:

  1. 一般API指标:这些指标包括4XXError5XXError用于跟踪客户端和服务器错误、Latency测量响应时间、Requests监控总API呼叫量以及TokensConsumed跟踪资源使用情况。

  2. 实时订阅指标:这些指标侧重于 WebSocket 连接和订阅活动。它们包括连接请求、成功连接、订阅注册、消息发布以及活动连接和订阅的指标。

该指南还介绍了增强指标,这些指标提供了有关解析器性能、数据源交互和单个 GraphQL 操作的更精细的数据。这些指标提供了更深入的见解,但会带来额外的成本。

CloudWatch 日志是一种为 Graph APIs QL 启用日志功能的工具。可以在两个级别上设置日志API:

  1. 请求级日志:这些日志捕获整体请求信息,包括HTTP标头、GraphQL 查询、操作摘要和订阅注册。

  2. 字段级日志:这些日志提供有关各个字段解析的详细信息,包括请求和响应映射以及每个字段的跟踪信息。

您可以配置日志记录、解释日志条目以及使用日志数据进行故障排除和优化。 AWS AppSync 提供了各种日志类型,可显示查询的执行、解析、验证和字段解析数据。

设置和配置

要在 GraphQL 上开启自动日志功能API,请使用控制台。 AWS AppSync

  1. 登录 AWS Management Console 并打开AppSync控制台

  2. APIs页面上,选择 Graph API QL 的名称。

  3. 在您的主页API的导航窗格中,选择设置

  4. 日志记录下面,执行以下操作:

    1. 开启启用日志记录

    2. 要获取详细的请求级日志记录,请选中包含详细内容下面的复选框(可选)。

    3. 字段解析器日志级别下面,选择所需的字段级日志记录级别(错误全部)(可选)。

    4. 在 “创建或使用现有角色” 下,选择 “新建角色”,创建一个允许 AWS AppSync 向其写入日志的新 AWS Identity and Access Management (IAM) CloudWatch。或者,选择现有角色以选择您 AWS 账户中现有IAM角色的 Amazon 资源名称 (ARN)。

  5. 选择保存

手动IAM角色配置

如果您选择使用现有IAM角色,则该角色必须授予 AWS AppSync 写入日志所需的权限 CloudWatch。要手动进行配置,您必须提供一个服务角色,ARN以便在写入日志时 AWS AppSync 可以代入该角色。

IAM控制台中,使用具有以下定义AWSAppSyncPushToCloudWatchLogsPolicy的名称创建新策略:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] }

接下来,使用名称创建一个新角色 AWSAppSyncPushToCloudWatchLogsRole,并将新创建的策略附加到该角色。编辑该角色的信任关系以包含以下内容:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "appsync.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

复制该角色ARN并在为 AWS AppSync Graph API QL 设置日志时使用它。

CloudWatch 指标

您可以使用 CloudWatch 指标来监控可能导致HTTP状态代码或延迟的特定事件,并提供有关这些事件的警报。将发出以下指标:

4XXError

由于客户端配置不正确导致请求无效而产生的错误。通常,这些错误是在 GraphQL 处理以外的任何地方发生的。例如,当请求包含错误的JSON负载或错误的查询、服务受到限制或授权设置配置错误时,可能会发生这些错误。

单位计数。使用 Sum 统计数据以得出这些错误的总出现次数。

5XXError

在运行 GraphQL 查询期间遇到的错误。例如,在为空架构或不正确的架构调用查询时,可能会出现该错误。当 Amazon Cognito 用户池 ID 或 AWS 区域无效时,也可能发生这种情况。或者,如果在处理请求的过程中 AWS AppSync 遇到问题,也可能发生这种情况。

单位计数。使用 Sum 统计数据以得出这些错误的总出现次数。

Latency

从 AWS AppSync 收到来自客户端的请求到它向客户端返回响应之间的时间。这不包括响应进入终端设备所遇到的网络延迟。

单位毫秒。使用平均值统计数据可评估预期延迟。

Requests

您账户中所有APIs人已处理的请求(查询 + 突变)数量,按地区划分。

单位计数。特定区域中处理的所有请求的数量。

TokensConsumed

根据 Request 使用的资源量(处理时间和使用的内存),为 Requests 分配令牌。通常,每个 Request 使用一个令牌。不过,根据需要,将为使用大量资源的 Request 分配额外的令牌。

单位计数。为特定区域中处理的请求分配的令牌数量。

NetworkBandwidthOutAllowanceExceeded
注意

在 AWS AppSync 控制台的缓存设置页面上,Cache Healt h Metrics 选项允许您启用此与缓存相关的运行状况指标

由于吞吐量超过聚合带宽限制,网络数据包被丢弃。这对于诊断缓存配置中的瓶颈很有用。通过在appsyncCacheNetworkBandwidthOutAllowanceExceeded指标API_Id中指定API来记录特定数据。

单位计数。超过API指定的 by ID 的带宽限制后丢弃的数据包数。

EngineCPUUtilization
注意

在 AWS AppSync 控制台的缓存设置页面上,Cache Healt h Metrics 选项允许您启用此与缓存相关的运行状况指标

分配给 Redis OSS 进程的CPU利用率(百分比)。这对于诊断缓存配置中的瓶颈很有用。通过在appsyncCacheEngineCPUUtilization指标API_Id中指定API来记录特定数据。

单位百分比。Redis OSS 进程当前为API指定的 by ID 使用的CPU百分比。

实时订阅

所有指标都以一个维度发出:G raphQLAPIId。这意味着所有指标都与 Graph API IDs QL 相结合。以下指标与纯粹的 GraphQL 订阅有关: WebSockets

ConnectRequests

向发出的 WebSocket 连接请求数 AWS AppSync,包括成功和失败的尝试。

单位计数。使用总和统计数据可获取连接请求总数。

ConnectSuccess

成功 WebSocket 连接的次数 AWS AppSync。可以在没有订阅的情况下进行连接。

单位计数。使用 Sum 统计数据可得出成功连接的总出现次数。

ConnectClientError

AWS AppSync 由于客户端错误而被拒绝的 WebSocket 连接数。这可能意味着,服务受到限制或未正确配置授权设置。

单位计数。使用 Sum 统计数据以得出客户端连接错误的总出现次数。

ConnectServerError

处理连接 AWS AppSync 时产生的错误数。当出现意外的服务器端问题时,通常会发生这种错误。

单位计数。使用 Sum 统计数据以得出服务器端连接错误的总出现次数。

DisconnectSuccess

成功 WebSocket 断开连接的次数。 AWS AppSync

单位计数。使用 Sum 统计数据可得出成功断开连接的总出现次数。

DisconnectClientError

断开 WebSocket连接 AWS AppSync 时产生的客户端错误数。

单位计数。使用 Sum 统计数据可得出断开连接错误的总出现次数。

DisconnectServerError

断开 WebSocket连接 AWS AppSync 时产生的服务器错误数。

单位计数。使用 Sum 统计数据可得出断开连接错误的总出现次数。

SubscribeSuccess

AWS AppSync 通过成功注册的订阅数量 WebSocket。可以在没有订阅的情况下建立连接,但无法在没有连接的情况下进行订阅。

单位计数。使用 Sum 统计数据以得出成功订阅的总发生次数。

SubscribeClientError

AWS AppSync 由于客户端错误而被拒绝的订阅数量。当JSON负载不正确、服务受限或授权设置配置错误时,可能会发生这种情况。

单位计数。使用 Sum 统计数据以得出客户端订阅错误的总出现次数。

SubscribeServerError

处理订阅 AWS AppSync 时产生的错误数。当出现意外的服务器端问题时,通常会发生这种错误。

单位计数。使用 Sum 统计数据以得出服务器端订阅错误的总出现次数。

UnsubscribeSuccess

已成功处理的取消订阅请求数。

单位计数。可以使用 Sum 统计数据获取成功取消订阅请求的总发生次数。

UnsubscribeClientError

AWS AppSync 由于客户端错误而被拒绝的取消订阅请求的数量。

单位计数。可以使用 Sum 统计数据获取客户端取消订阅请求错误的总出现次数。

UnsubscribeServerError

处理取消订阅请求 AWS AppSync 时产生的错误数。当出现意外的服务器端问题时,通常会发生这种错误。

单位计数。可以使用 Sum 统计数据获取服务器端取消订阅请求错误的总出现次数。

PublishDataMessageSuccess

已成功发布的订阅事件消息的数量。

单位计数。使用 Sum 统计数据以得出成功发布的订阅事件消息的总数。

PublishDataMessageClientError

由于客户端错误而无法发布的订阅事件消息的数量。

Unit计数。使用 Sum 统计数据以得出客户端发布订阅事件错误的总出现次数。

PublishDataMessageServerError

发布订阅事件消息 AWS AppSync 时产生的错误数。当出现意外的服务器端问题时,通常会发生这种错误。

单位计数。使用 Sum 统计数据以得出服务器端发布订阅事件错误的总出现次数。

PublishDataMessageSize

已发布的订阅事件消息的大小。

单位字节

ActiveConnections

1 分钟内从客户端到 AWS AppSync 的并发 WebSocket 连接数。

单位计数。使用 Sum 统计数据以得出建立的连接总数。

ActiveSubscriptions

1 分钟内来自客户端的并发订阅数。

单位计数。使用 Sum 统计数据以得出有效订阅的总数。

ConnectionDuration

连接保持打开状态的时间量。

单位毫秒。使用 Average 统计数据可评估连接持续时间。

OutboundMessages

成功发布的按流量计费消息的数量。一条按流量计费的消息等于 5 KB 的传送数据。

单位计数。使用总和统计数据可获取成功发布的计量消息数。

InboundMessageSuccess

成功处理的入站消息数量。突变调用的每种订阅类型都会生成一条入站消息。

单位计数。使用总和统计数据可获取成功处理的入站消息总数。

InboundMessageError

由于API请求无效(例如超过 240 kB 的订阅有效负载大小限制)而导致处理失败的入站消息的数量。

单位计数。使用 Sum 统计数据获取出现API相关处理失败的入站邮件的总数。

InboundMessageFailure

由于来自的错误而导致无法处理的入站消息的数量 AWS AppSync。

单位计数。使用 Sum 统计数据获取出现 AWS AppSync相关处理失败的入站邮件的总数。

InboundMessageDelayed

延迟入站消息的数量。当超过入站邮件速率配额或出站邮件速率配额时,入站邮件可能会延迟。

单位计数。使用 Sum 统计数据获取延迟的入站消息总数。

InboundMessageDropped

丢弃的入站消息的数量。当超过入站邮件速率配额或出站邮件速率配额时,入站邮件可能会被丢弃。

单位计数。使用 Sum 统计数据获取丢弃的入站邮件总数。

InvalidationSuccess

变更通过 $extensions.invalidateSubscriptions() 成功使订阅失效(取消订阅)的次数。

单位计数。可以使用 Sum 统计数据检索成功取消订阅的总订阅数。

InvalidationRequestSuccess

已成功处理的失效请求数。

单位计数。使用总和统计数据可获取成功处理的失效请求总数。

InvalidationRequestError

由于请求无效而未能处理的失效API请求的数量。

单位计数。使用 Sum 统计数据来获取具有API相关处理失败的失效请求的总数。

InvalidationRequestFailure

由于的错误而导致处理失败的失效请求数。 AWS AppSync

单位计数。使用 Sum 统计数据来获取具有 AWS AppSync相关处理失败的失效请求的总数。

InvalidationRequestDropped

当超过失效请求限额时丢弃的失效请求的数量。

单位计数。使用总和统计数据可获取丢弃的失效请求的总数。

比较入站消息和出站消息

执行突变时,将调用带有该突变的 @aws_subscribe 指令的订阅字段。每次订阅调用都会生成一条入站消息。例如,如果两个订阅字段在 @aws_subscribe 中指定了相同的突变,则在调用该变异时会生成两条入站消息。

一封出站消息等于向 WebSocket 客户端传送的 5 KB 数据。例如,向 10 个客户机发送 15 kB 的数据会产生 30 条出站消息(15 kB * 10 个客户机/每条消息 5 kB = 30 条消息)。

您可以申请增加入站或出站邮件的配额。有关更多信息,请参阅《AWS 通用参考指南》中的AWS AppSync 终端节点和配额以及《S ervice Qu otas 用户指南》中有关请求增加配额的说明。

增强的指标

增强的指标会发出有关API使用情况和性能的精细数据,例如 AWS AppSync 请求和错误计数、延迟以及缓存命中/未命中。所有增强型指标数据都将发送到您的 CloudWatch 账户,您可以配置要发送的数据类型。

注意

使用增强型指标时会收取额外费用。有关更多信息,请参阅 Amazon 定价中的详细监控 CloudWatch定价等级。

这些指标可以在 AWS AppSync 控制台的各个设置页面上找到。在API设置页面上,增强指标部分允许您启用或禁用以下项目:

解析器指标行为:这些选项控制如何收集解析者的其他指标。您可以选择启用完整的请求解析器指标(为请求中的所有解析器启用的指标)或每个解析器指标(仅在配置设置为启用的解析器中启用指标)。以下选项可用:

GraphQL errors per resolver (GraphQLError)

每个解析器发生的 GraphQL 错误数。

指标维度API_IdResolver

单位计数

Requests per resolver (Request)

请求期间发生的调用次数。这是按每个解析者记录的。

指标维度API_IdResolver

单位计数

Latency per resolver (Latency)

完成解析器调用的时间。延迟以毫秒为单位进行测量,并以每个解析器为单位进行记录。

指标维度API_IdResolver

单位毫秒

Cache hits per resolver (CacheHit)

请求期间的缓存命中次数。只有在使用缓存时才会发出此消息。缓存命中率是按每个解析器记录的。

指标维度API_IdResolver

单位计数

Cache misses per resolver (CacheMiss)

请求期间的缓存丢失次数。只有在使用缓存时才会发出此消息。缓存失误是按每个解析器记录的。

指标维度API_IdResolver

单位计数

数据源指标行为:这些选项控制如何收集数据源的其他指标。您可以选择启用完整请求数据源指标(为请求中的所有数据源启用的指标)或每个数据源的指标(仅对配置设置为启用的数据源启用指标)。以下选项可用:

Requests per data source (Request)

请求期间发生的调用次数。请求是按数据源记录的。如果启用了完整请求,则每个数据源都将在中拥有自己的条目 CloudWatch。

指标维度API_IdDatasource

单位计数

Latency per data source (Latency)

完成数据源调用的时间。延迟是按每个数据源记录的。

指标维度API_IdDatasource

单位毫秒

Errors per data source (GraphQLError)

调用数据源期间发生的错误数。

指标维度API_IdDatasource

单位计数

操作指标:启用 GraphQL 操作级指标。

Requests per operation (Request)

指定 GraphQL 操作被调用的次数。

指标维度API_IdOperation

单位计数

GraphQL errors per operation (GraphQLError)

在指定的 GraphQL 操作期间发生的 GraphQL 错误数。

指标维度API_IdOperation

单位计数

CloudWatch 日志

您可以在任何新的或现有的 GraphQL 上配置两种类型的日志记录API:请求级别和字段级日志。

请求级日志

如果配置了请求级日志记录(包含详细内容),将记录以下信息:

  • 使用的令牌数

  • 请求和响应HTTP标头

  • 请求中运行的 GraphQL 查询

  • 总体操作摘要

  • 已注册的新的和现有的 GraphQL 订阅

字段级日志

如果配置了字段级日志记录,将记录以下信息:

  • 生成的请求映射,其中包含每个字段的源和参数

  • 每个字段的转换响应映射,其中包括作为该字段解析结果的数据

  • 每个字段的跟踪信息

如果您开启日志记录,则 AWS AppSync 管理日 CloudWatch 志。该过程包括创建日志组和日志流,以及向日志流报告这些日志。

当您在 GraphQL 上开启日志API并发出请求时, AWS AppSync 将在该日志组下创建一个日志组和日志流。日志组以 /aws/appsync/apis/{graphql_api_id} 格式命名。在每个日志组内,日志会进一步分成多个日志流。当报告已记录的数据时,这些日志按上次事件时间排序。

每个日志事件都标有该请求的 x-amzn-RequestId。这可以帮助您筛选日志事件 CloudWatch ,以获取有关该请求的所有已记录信息。你可以 RequestId 从每个 GraphQL AWS AppSync 请求的响应标头中获取。

字段级别日志记录配置为使用以下日志级别:

  • - 不捕获任何字段级日志。

  • 错误 - 记录出现错误的字段的以下信息:
    • 服务器响应中的错误部分

    • 字段级别错误

    • 所生成的请求/响应函数,已针对错误字段获得解析

  • 全部 - 记录查询中的所有字段的以下信息:
    • 字段级别跟踪信息

    • 所生成的请求/响应函数,已针对每个字段获得解析

监控优势

您可以使用日志记录和指标来识别、优化 GraphQL 查询和排除其问题。例如,这些将帮助您使用针对查询中的每个字段记录的跟踪信息调试延迟问题。为了对此进行演示,假设您正在使用一个或多个嵌套在 GraphQL 查询中的解析器。 CloudWatch 日志中的示例字段操作可能与以下内容类似:

{ "path": [ "singlePost", "authors", 0, "name" ], "parentType": "Post", "returnType": "String!", "fieldName": "name", "startOffset": 416563350, "duration": 11247 }

这可能对应于 GraphQL 架构,类似于以下内容:

type Post { id: ID! name: String! authors: [Author] } type Author { id: ID! name: String! } type Query { singlePost(id:ID!): Post }

在前面的日志结果中,path 显示运行名为 singlePost() 的查询而返回的数据中的单个项目。在该示例中,它表示第一个索引 (0) 处的 name 字段。startOffset给出了从 GraphQL 查询操作开始时的偏移量。duration 是解析该字段的总时间。这些值可用来排除下面这类问题:为何来自特定数据来源的数据的运行速度可能低于预期,或者特定字段是否降低了整个查询的速度等。例如,您可以选择增加 Amazon DynamoDB 表的预置吞吐量,或从查询中删除导致整体操作性能不佳的特定字段。

自 2019 年 5 月 8 日起, AWS AppSync 生成完全结构化的日志事件JSON。这可以帮助您使用 Logs Insights 和 Amazon OpenSearch 服务等 CloudWatch 日志分析服务来了解 GraphQL 请求的性能和架构字段的使用特征。例如,您可以轻松识别具有较大延迟的解析器,这可能是导致性能问题的根本原因。您还可以识别架构中最常用和最不常用的字段,并评估弃用 GraphQL 字段的影响。

冲突检测和同步日志记录

如果配置 AWS AppSync API了 CloudWatch 日志记录,并将字段解析器日志级别设置为 “全部”,则会向日志 AWS AppSync 组发送冲突检测和解决信息。这为人们如何 AWS AppSync API应对冲突提供了细致的见解。为了帮助您解释响应,在日志中提供了以下信息:

conflictType

详细说明是否由于版本不匹配或由于客户提供的状况而发生冲突。

conflictHandlerConfigured

说明请求时在解析器上配置了冲突处理程序。

message

提供有关如何检测和解决冲突的信息。

syncAttempt

服务器在最终拒绝请求之前尝试同步数据的次数。

data

如果配置的冲突处理程序为 Automerge,则填充该字段以显示 Automerge 为每个字段做出的决策。提供的操作可以是:

  • REJECTED-当Automerge拒绝传入的字段值而优先使用服务器中的值时。

  • ADDED-由于服务器中没有预先存在的值而在传入字段上Automerge添加时。

  • APPENDED-当Automerge将传入的值附加到服务器中存在的列表的值时。

  • MERGED-当将传入的值与服务器中存在的 Set 的值Automerge合并时。

使用令牌计数优化您的请求

消耗少于或等于 1,500 KB 秒的内存和 v CPU 时间的请求将分配一个令牌。对于使用超过 1,500 KB 秒资源的请求,将收到额外的令牌。例如,如果请求消耗 3,350 KB 秒,则向该请求 AWS AppSync 分配三个令牌(向上舍入到下一个整数值)。默认情况下,您账户APIs中每秒最多 AWS AppSync 分配 5,000 或 10,000 个请求令牌,具体取决于其部署所在的 AWS 区域。如果APIs每人平均每秒使用两个令牌,则每秒只能分别限制为 2,500 或 5,000 个请求。如果您每秒需要的令牌数多于分配的数量,您可以提交请求以增加请求令牌速率的默认配额。有关更多信息,请参阅AWS 一般参考 指南中的AWS AppSync 终端节点和配额以及 Servic e Quotas 用户指南中的请求增加配额

每个请求的令牌数量过高可能表明有机会优化您的请求并提高您的API性能。可能增加每个请求的令牌数的因素包括:

  • GraphQL 架构的大小和复杂性。

  • 请求映射模板和响应映射模板的复杂性。

  • 每个请求的解析器调用次数。

  • 从解析器返回的数据量。

  • 下游数据来源的延迟。

  • 需要连续调用数据来源(而不是并行或批量调用)的架构和查询设计。

  • 日志记录配置,特别是字段级和详细日志内容。

注意

除了 AWS AppSync 指标和日志外,客户端还可以通过响应标头访问请求中消耗的令牌数量x-amzn-appsync-TokensConsumed

日志大小限制

默认情况下,如果启用了日志记录, AWS AppSync 则每次请求最多可发送 1 MB 的日志。超过此大小的日志将被截断。要减小日志大小,请选择字段级ERROR日志的日志记录级别并禁用VERBOSE日志记录,或者在不需要时完全禁用字段级日志。作为ALL日志级别的替代方案,您可以使用增强指标来获取有关特定解析器、数据源或 GraphQL 操作的指标,或者利用 AppSync 提供的日志工具仅记录必要的信息。

日志类型参考

RequestSummary

  • requestId:请求的唯一标识符。

  • graphQLAPIId: API 发出请求的 GraphQL 的 ID。

  • statusCode: HTTP 状态码响应。

  • 延迟:E 请求的nd-to-end 延迟,以纳秒为单位,以整数表示。

{ "logType": "RequestSummary", "requestId": "dbe87af3-c114-4b32-ae79-8af11f3f96f1", "graphQLAPIId": "pmo28inf75eepg63qxq4ekoeg4", "statusCode": 200, "latency": 242000000 }

ExecutionSummary

  • requestId:请求的唯一标识符。

  • graphQLAPIId: API 发出请求的 GraphQL 的 ID。

  • startTime:GraphQL 处理请求的开始时间戳,格式为 3339 RFC。

  • endTime:GraphQL 处理请求的结束时间戳,格式为 3339 RFC。

  • duration:GraphQL 总处理时间,以纳秒为单位,整数值。

  • 版本:的架构版本 ExecutionSummary。

  • parsing:
    • startOffset: 相对于调用的整数进行解析的起始偏移量,以纳秒为单位。

    • duration:解析所花费的时间,以纳秒为单位,整数值。

  • validation:
    • startOffset: 验证的起始偏移量,以纳秒为单位,相对于调用,为整数。

    • duration:执行验证所花费的时间,以纳秒为单位,整数值。

{ "duration": 217406145, "logType": "ExecutionSummary", "requestId": "dbe87af3-c114-4b32-ae79-8af11f3f96f1", "startTime": "2019-01-01T06:06:18.956Z", "endTime": "2019-01-01T06:06:19.174Z", "parsing": { "startOffset": 49033, "duration": 34784 }, "version": 1, "validation": { "startOffset": 129048, "duration": 69126 }, "graphQLAPIId": "pmo28inf75eepg63qxq4ekoeg4" }

跟踪

  • requestId:请求的唯一标识符。

  • graphQLAPIId: API 发出请求的 GraphQL 的 ID。

  • startOffset: 字段分辨率的起始偏移量,以纳秒为单位,相对于调用,为整数。

  • duration:解析字段所花费的时间,以纳秒为单位,整数值。

  • fieldName:正在解析的字段的名称。

  • parentType:正在解析的字段的父类型。

  • returnType:正在解析的字段的返回类型。

  • path:路径分段列表,从响应的根开始,以所解析字段结束。

  • resolverArn:用于字段解析ARN的解析器。可能不会出现在嵌套字段中。

{ "duration": 216820346, "logType": "Tracing", "path": [ "putItem" ], "fieldName": "putItem", "startOffset": 178156, "resolverArn": "arn:aws:appsync:us-east-1:111111111111:apis/pmo28inf75eepg63qxq4ekoeg4/types/Mutation/fields/putItem", "requestId": "dbe87af3-c114-4b32-ae79-8af11f3f96f1", "parentType": "Mutation", "returnType": "Item", "graphQLAPIId": "pmo28inf75eepg63qxq4ekoeg4" }

使用 “日志见解” 分析您的 CloudWatch 日志

以下是您可以运行的查询示例,以获取有关 GraphQL 操作的性能和运行状况的可行的见解。这些示例作为示例查询在 Logs Insight CloudWatch s 控制台中提供。在CloudWatch控制台中,选择 Lo gs Insights,为 GraphQL 选择 AWS AppSync 日志组API,然后在示例AWS AppSync 查询下选择查询

以下查询返回使用令牌数最多的前 10 个 GraphQL 请求:

filter @message like "Tokens Consumed" | parse @message "* Tokens Consumed: *" as requestId, tokens | sort tokens desc | display requestId, tokens | limit 10

以下查询返回具有最大延迟的前 10 个解析器:

fields resolverArn, duration | filter logType = "Tracing" | limit 10 | sort duration desc

以下查询返回最常调用的解析器:

fields ispresent(resolverArn) as isRes | stats count() as invocationCount by resolverArn | filter isRes and logType = "Tracing" | limit 10 | sort invocationCount desc

以下查询返回映射模板中具有最多错误的解析器:

fields ispresent(resolverArn) as isRes | stats count() as errorCount by resolverArn, logType | filter isRes and (logType = "RequestMapping" or logType = "ResponseMapping") and fieldInError | limit 10 | sort errorCount desc

以下查询返回解析器延迟统计数据:

fields ispresent(resolverArn) as isRes | stats min(duration), max(duration), avg(duration) as avg_dur by resolverArn | filter isRes and logType = "Tracing" | limit 10 | sort avg_dur desc

以下查询返回字段延迟统计数据:

stats min(duration), max(duration), avg(duration) as avg_dur by concat(parentType, '/', fieldName) as fieldKey | filter logType = "Tracing" | limit 10 | sort avg_dur desc

可以将 CloudWatch Logs Insights 查询的结果导出到 CloudWatch 仪表板。

使用 OpenSearch 服务分析您的日志

您可以使用 Amazon S OpenSearch ervice 搜索、分析和可视化您的 AWS AppSync 日志,以确定性能瓶颈和操作问题的根本原因。您可以识别具有最大延迟和最多错误的解析器。此外,您还可以使用 OpenSearch 仪表板创建具有强大可视化效果的仪表板。 OpenSearch 仪表板是 S OpenSearch ervice 中提供的开源数据可视化和探索工具。使用 OpenSearch 控制面板,您可以持续监控 GraphQL 操作的性能和运行状况。例如,您可以创建控制面板以可视化 GraphQL 请求的 P90 延迟,并深入了解每个解析器的 P90 延迟。

使用 S OpenSearch ervice 时,使用 “cwl*” 作为筛选器模式来搜索索 OpenSearch 引。 OpenSearch 服务使用前缀为 “cwl-” 对从 CloudWatch 日志流式传输的日志进行索引。为了将 AWS AppSync API日志与发送到 S OpenSearch ervice 的其他 CloudWatch 日志区分开来,我们建议在搜索中graphQLAPIID.keyword=YourGraphQLAPIID添加额外的筛选表达式。

日志格式迁移

2019 年 5 月 8 日当天或之后 AWS AppSync 生成的日志事件采用完全结构化格式JSON。要分析 2019 年 5 月 8 日之前的 GraphQL 请求,您可以使用示例中提供的脚本将较旧的日志迁移到完全结构化的JSON日志。GitHub 如果需要在 2019 年 5 月 8 日之前使用日志格式,请使用以下设置创建支持服务单:将 Type (类型) 设置为 Account Management (账户管理),然后将 Category (类别) 设置为 General Account Question (一般账户问题)

您还可以使用指标筛选器将日志数据转换为数字 CloudWatch 指标,以便您可以对它们绘制图表或设置警报。 CloudWatch