监控和日志记录 - Amazon AppSync
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

监控和日志记录

要监控您的 Amazon AppSync GraphQL API 并帮助调试与请求相关的问题,您可以开启对 Ama CloudWatch zon Logs 的登录功能。

设置和配置

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

  1. 登录 Amazon Web Services Management Console 并打开AppSync控制台

  2. API 页面上,选择一个 GraphQL API 的名称。

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

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

    1. 开启启用日志记录

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

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

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

  5. 选择保存

手动配置 IAM 角色

如果您选择使用现有 IAM 角色,则该角色必须授予 Amazon AppSync 写入日志所需的权限 CloudWatch。要手动配置,您必须提供服务角色 ARN,以便在写入日志时 Amazon 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,并在为 GraphQL AP Amazon AppSync I 设置日志时使用它。

CloudWatch 指标

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

4XXError

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

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

5XXError

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

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

Latency

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

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

Requests

您的账户中的所有 API 已处理的请求(查询 + 变量)数量(按区域划分)。

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

TokensConsumed

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

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

NetworkBandwidthOutAllowanceExceeded
注意

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

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

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

EngineCPUUtilization
注意

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

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

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

实时订阅

所有指标都在一个维度中发出:GraphQLAPIId。这意味着所有指标都与 GraphQL API ID 相结合。以下指标与纯粹的 GraphQL 订阅有关: WebSockets

ConnectRequests

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

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

ConnectSuccess

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

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

ConnectClientError

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

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

ConnectServerError

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

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

DisconnectSuccess

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

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

DisconnectClientError

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

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

DisconnectServerError

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

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

SubscribeSuccess

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

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

SubscribeClientError

Amazon AppSync 由于客户端错误而被拒绝的订阅数量。如果 JSON 负载不正确,服务受到限制或未正确配置授权设置,则可能会出现该错误。

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

SubscribeServerError

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

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

UnsubscribeSuccess

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

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

UnsubscribeClientError

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

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

UnsubscribeServerError

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

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

PublishDataMessageSuccess

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

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

PublishDataMessageClientError

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

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

PublishDataMessageServerError

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

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

PublishDataMessageSize

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

单位字节

ActiveConnections

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

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

ActiveSubscriptions

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

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

ConnectionDuration

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

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

OutboundMessages

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

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

InboundMessageSuccess

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

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

InboundMessageError

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

单位计数。使用总和统计数据可获取与 API 相关的处理失败的入站消息总数。

InboundMessageFailure

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

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

InboundMessageDelayed

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

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

InboundMessageDropped

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

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

InvalidationSuccess

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

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

InvalidationRequestSuccess

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

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

InvalidationRequestError

由于 API 请求无效而导致处理失败的失效请求的数量。

单位计数。使用总和统计数据可获取与 API 相关的处理失败的失效请求总数。

InvalidationRequestFailure

由于来自 Amazon AppSync的错误而导致处理失败的失效请求的数量。

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

InvalidationRequestDropped

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

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

比较入站消息和出站消息

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

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

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

增强的指标

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

注意

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

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

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

    指标 指标维度 指标名称 单位 描述
    每个解析器的 GraphQL 错误数 api_id,解析器 GraphQLErro 计数 每个解析器发生的 GraphQL 错误数。
    每个解析者的请求数 api_id,解析器 请求 计数 请求期间发生的调用次数。这是按每个解析者记录的。
    每个解析器的延迟 api_id,解析器 延迟 毫秒 完成解析器调用的时间。延迟以毫秒为单位进行测量,并以每个解析器为单位进行记录。
    每个解析器的缓存命中数 api_id,解析器 CacheHit 计数 请求期间的缓存命中次数。只有在使用缓存时才会发出此消息。缓存命中率是按每个解析器记录的。
    每个解析器的缓存未命中次数 api_id,解析器 CacheMiss 计数 请求期间的缓存丢失次数。只有在使用缓存时才会发出此消息。缓存失误是按每个解析器记录的。
  2. 数据源指标行为:这些选项控制如何收集数据源的其他指标。您可以选择启用完整请求数据源指标(为请求中的所有数据源启用的指标)或每个数据源的指标(仅对配置设置为启用的数据源启用指标)。以下选项可用:

    指标 指标维度 指标名称 单位 描述
    每个数据源的请求数 api_id,数据源 请求 计数 请求期间发生的调用次数。请求是按数据源记录的。如果启用了完整请求,则每个数据源都将在中拥有自己的条目 CloudWatch。
    每个数据源的延迟 api_id,数据源 延迟 毫秒 完成数据源调用的时间。延迟是按每个数据源记录的。
    每个数据源的错误数 api_id,数据源 GraphQLErro 计数 调用数据源期间发生的错误数。
  3. 操作指标:启用 GraphQL 操作级指标。

    指标 指标维度 指标名称 单位 描述
    每次操作的请求数 api_id,操作 请求 计数 指定 GraphQL 操作被调用的次数。
    每次操作的 GraphQL 错误数 api_id,操作 GraphQLErro 计数 在指定的 GraphQL 操作期间发生的 GraphQL 错误数。

CloudWatch 日志

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

请求级日志

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

  • 使用的令牌数

  • 请求和响应 HTTP 标头

  • 请求中运行的 GraphQL 查询

  • 总体操作摘要

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

字段级日志

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

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

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

  • 每个字段的跟踪信息

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

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

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

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

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

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

    • 字段级别错误

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

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

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

监控优势

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

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

冲突检测和同步日志记录

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

conflictType

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

conflictHandlerConfigured

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

message

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

syncAttempt

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

data

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

  • REJECTED - Automerge 拒绝传入的字段值,而采用服务器中的值。

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

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

  • MERGED - Automerge 将传入的值合并到服务器中存在的集合值。

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

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

如果每个请求的令牌数较高,则可能表明需要优化您的请求并提高 API 性能。可能增加每个请求的令牌数的因素包括:

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

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

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

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

  • 下游数据来源的延迟。

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

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

注意

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

日志类型参考

RequestSummary

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

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

  • statusCode:HTTP 状态代码响应。

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

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

ExecutionSummary

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

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

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

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

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

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

日志格式迁移

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

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