Uso CloudWatch para monitorear y registrar datos de la API de GraphQL - AWS AppSync GraphQL

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso CloudWatch para monitorear y registrar datos de la API de GraphQL

Puedes registrar y depurar tu API de GraphQL CloudWatch mediante métricas CloudWatch y registros. Estas herramientas permiten a los desarrolladores supervisar el rendimiento, solucionar problemas y optimizar sus operaciones de GraphQL de forma eficaz.

CloudWatch metrics es una herramienta que proporciona una amplia gama de métricas para monitorear el rendimiento y el uso de la API. Estas métricas se dividen en las siguientes dos categorías principales:

  1. Métricas generales de las API: estas incluyen 4XXError y 5XXError para realizar un seguimiento de los errores de los clientes y servidores, Latency para medir los tiempos de respuesta, Requests para supervisar el total de llamadas a la API y TokensConsumed para hacer un seguimiento del uso de los recursos.

  2. Métricas de suscripción en tiempo real: estas métricas se centran en WebSocket las conexiones y las actividades de suscripción. Incluyen métricas sobre las solicitudes de conexión, las conexiones correctas, los registros de suscripciones, la publicación de mensajes, y las conexiones y suscripciones activas.

En la guía también se presentan las métricas mejoradas, que ofrecen datos más detallados sobre el rendimiento de los solucionadores, las interacciones entre los orígenes de datos y las operaciones individuales de GraphQL. Estas métricas proporcionan información más detallada, pero conllevan costes adicionales.

CloudWatch Logs es una herramienta que habilita las capacidades de registro para su GraphQL APIs. Los registros se pueden configurar en dos niveles de la API:

  1. Registros a nivel de solicitud: capturan la información general de las solicitudes, incluidos los encabezados HTTP, las consultas de GraphQL, los resúmenes de operaciones y los registros de suscripciones.

  2. Registros a nivel de campo: proporcionan información detallada sobre los solucionadores de campos individuales, incluidos los mapeos de solicitudes y respuestas y la información de seguimiento de cada campo.

Puedes configurar el registro, interpretar las entradas de registro y utilizar los datos de registro para solucionar problemas y optimizar. AWS AppSync proporciona varios tipos de registro que muestran los datos de ejecución, análisis, validación y resolución de campo de la consulta.

Ajustes y configuración

Para activar el registro automático en una API de GraphQL, usa la AWS AppSync consola.

  1. Inicia sesión en la AppSyncconsola AWS Management Console y ábrela.

  2. En la APIspágina, elige el nombre de una API de GraphQL.

  3. En el panel de navegación de la página de inicio de la API de, elija Ajustes.

  4. En Logging (Registro), haga lo siguiente:

    1. Active Habilitar Logs.

    2. Para obtener un registro detallado a nivel de solicitud, seleccione la casilla de verificación en Incluir el contenido excesivamente detallado (opcional).

    3. En Nivel de registro de resolución de campo, elige tu nivel de registro de nivel de campo preferido (Ninguno, Error, Información, Depuración o Todos). (opcional)

    4. En Crear o usar un rol existente, selecciona Nuevo rol para crear uno nuevo AWS Identity and Access Management (IAM) que permita AWS AppSync escribir CloudWatch registros. O bien, elija Rol existente para seleccionar el Nombre de recurso de Amazon (ARN) de un rol de IAM existente en su cuenta de AWS .

  5. Seleccione Guardar.

Configuración manual del rol de IAM

Si decide utilizar una función de IAM existente, la función debe conceder AWS AppSync los permisos necesarios para escribir registros en ella. CloudWatch Para configurarlo manualmente, debe proporcionar un ARN de rol de servicio para que AWS AppSync pueda asumir el rol al escribir los registros.

En la consola de IAM, cree una nueva política con el nombre AWSAppSyncPushToCloudWatchLogsPolicy que tenga la siguiente definición:

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

A continuación, cree una nueva función con ese nombre AWSAppSyncPushToCloudWatchLogsRoley adjunte la política recién creada a la función. Edite la relación de confianza para este rol de la siguiente manera:

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

Copia el ARN del rol y utilízalo al configurar el registro para una API de GraphQL AWS AppSync .

CloudWatch métricas

Puedes usar CloudWatch las métricas para monitorear y enviar alertas sobre eventos específicos que pueden resultar en códigos de estado HTTP o en la latencia. Se emiten las siguientes métricas:

4XXError

Errores derivados de solicitudes no válidas a causa de una configuración de cliente incorrecta. Normalmente, estos errores suelen ser ajenos al procesamiento de GraphQL. Por ejemplo, estos errores pueden producirse cuando la solicitud incluye una carga JSON incorrecta o una consulta incorrecta, cuando el servicio está limitado o si la configuración de la autorización es errónea.

Unidad: recuento. Use la estadística Sum para obtener el número total de apariciones de estos errores.

5XXError

Son los errores encontrados durante la ejecución de una consulta GraphQL. Por ejemplo, esto puede ocurrir al invocar una consulta para un esquema vacío o incorrecto. También puede ocurrir cuando el ID o la AWS región del grupo de usuarios de Amazon Cognito no son válidos. Como alternativa, esto también podría ocurrir si AWS AppSync se produce un problema durante el procesamiento de una solicitud.

Unidad: recuento. Use la estadística Sum para obtener el número total de apariciones de estos errores.

Latency

El tiempo que transcurre entre el momento en que se AWS AppSync recibe una solicitud de un cliente y el momento en que devuelve una respuesta al cliente. Esto no incluye la latencia de red que se encuentra una respuesta para llegar a los dispositivos finales.

Unidad: milisegundos. Utilice la estadística Average para evaluar las latencias esperadas.

Requests

El número de solicitudes (consultas y mutaciones) que todas las APIs personas de tu cuenta han procesado, por región.

Unidad: recuento. El número total de solicitudes procesadas en una Región determinada.

TokensConsumed

Los tókenes se asignan en Requests función de la cantidad de recursos (tiempo de procesamiento y memoria utilizada) que consuma una Request. Por lo general, cada Request consume un token. Sin embargo, si una Request consume una mayor cantidad de recursos, se le asignan tókenes adicionales en función de las necesidades.

Unidad: recuento. El número total de tókenes asignados a solicitudes procesadas en una Región determinada.

NetworkBandwidthOutAllowanceExceeded
nota

En la AWS AppSync consola, en la página de configuración de la memoria caché, la opción Cache Health Metrics le permite habilitar esta métrica de estado relacionada con la memoria caché.

Los paquetes de red se descartaron porque el rendimiento superó el límite de banda ancha agregado. Esto resulta útil para diagnosticar los cuellos de botella en una configuración de caché. Los datos de una API concreta se registran al especificar el API_Id en la métrica appsyncCacheNetworkBandwidthOutAllowanceExceeded.

Unidad: recuento. El número de paquetes descartados tras superar el límite de ancho de banda de una API especificada por el ID.

EngineCPUUtilization
nota

En la AWS AppSync consola, en la página de configuración de la memoria caché, la opción Cache Health Metrics le permite habilitar esta métrica de estado relacionada con la memoria caché.

El uso de la CPU (porcentaje) asignado al proceso de Redis OSS. Esto resulta útil para diagnosticar los cuellos de botella en una configuración de caché. Los datos de una API concreta se registran al especificar el API_Id en la métrica appsyncCacheEngineCPUUtilization.

Unidad: porcentaje. El porcentaje de CPU que utiliza actualmente el proceso de Redis OSS para una API especificada por el ID.

Suscripciones en tiempo real

Todas las métricas se emiten en una dimensión: Graph. QLAPIId Esto significa que todas las métricas se combinan con la API GraphQL. IDs Las siguientes métricas están relacionadas con las suscripciones de GraphQL en lugar de las puras: WebSockets

ConnectRequests

El número de solicitudes de WebSocket conexión realizadas a AWS AppSync, incluidos los intentos correctos y fallidos.

Unidad: recuento. Utilice la estadística Sum para obtener el número total de solicitudes de conexión.

ConnectSuccess

El número de WebSocket conexiones correctas a AWS AppSync. Se pueden tener conexiones sin suscripciones.

Unidad: recuento. Use la estadística Sum para obtener el número total de apariciones de conexiones correctas.

ConnectClientError

El número de WebSocket conexiones que se rechazaron AWS AppSync por errores del lado del cliente. Esto puede implicar que el servicio está limitado o que la configuración de autorización es incorrecta.

Unidad: recuento. Use la estadística Sum para obtener el número total de apariciones de errores de conexión del lado del cliente.

ConnectServerError

El número de errores que se originaron AWS AppSync al procesar las conexiones. Esto suele ocurrir cuando se produce un problema inesperado del lado del servidor.

Unidad: recuento. Use la estadística Sum para obtener el número total de apariciones de errores de conexión del lado del servidor.

DisconnectSuccess

El número de WebSocket desconexiones realizadas correctamente desde AWS AppSync.

Unidad: recuento. Use la estadística Sum para obtener el número total de apariciones de desconexiones correctas.

DisconnectClientError

El número de errores del cliente que se originaron AWS AppSync al desconectar las conexiones WebSocket .

Unidad: recuento. Use la estadística Sum para obtener el número total de apariciones de errores de desconexión.

DisconnectServerError

El número de errores del servidor que se originaron AWS AppSync al desconectar las conexiones WebSocket .

Unidad: recuento. Use la estadística Sum para obtener el número total de apariciones de errores de desconexión.

SubscribeSuccess

El número de suscripciones que se registraron correctamente AWS AppSync . WebSocket Se pueden tener conexiones sin suscripciones, pero no es posible tener suscripciones sin conexiones.

Unidad: recuento. Use la estadística Sum para obtener el número total de apariciones de suscripciones correctas.

SubscribeClientError

El número de suscripciones que se rechazaron AWS AppSync por errores del cliente. Esto puede ocurrir cuando una carga JSON es incorrecta, cuando el servicio está limitado o si la configuración de autorización es errónea.

Unidad: recuento. Use la estadística Sum para obtener el número total de apariciones de errores de suscripción del lado del cliente.

SubscribeServerError

El número de errores que se originaron AWS AppSync al procesar las suscripciones. Esto suele ocurrir cuando se produce un problema inesperado del lado del servidor.

Unidad: recuento. Use la estadística Sum para obtener el número total de apariciones de errores de suscripción del lado del servidor.

UnsubscribeSuccess

El número de solicitudes de cancelación de suscripción que se procesaron correctamente.

Unidad: recuento. Use la estadística Sum para obtener el número total de apariciones de solicitudes de cancelación de suscripción correctas.

UnsubscribeClientError

El número de solicitudes de cancelación de suscripción que fueron rechazadas AWS AppSync por errores del cliente.

Unidad: recuento. Use la estadística Sum para obtener el número total de apariciones de errores de solicitud de cancelación de suscripción del lado del cliente.

UnsubscribeServerError

El número de errores que se originaron AWS AppSync al procesar las solicitudes de cancelación de suscripción. Esto suele ocurrir cuando se produce un problema inesperado del lado del servidor.

Unidad: recuento. Use la estadística Sum para obtener el número total de apariciones de errores de solicitud de cancelación de suscripción del lado del servidor.

PublishDataMessageSuccess

Número de mensajes de eventos de suscripción que se publicaron correctamente.

Unidad: recuento. Use la estadística Sum para obtener el total de mensajes de eventos de suscripción que se publicaron correctamente.

PublishDataMessageClientError

Número de mensajes de eventos de suscripción que no se pudieron publicar debido a errores del lado del cliente.

Unit: recuento. Use la estadística Sum para obtener el número total de apariciones de errores de publicación de eventos de suscripción del lado del cliente.

PublishDataMessageServerError

El número de errores que se originaron AWS AppSync al publicar los mensajes de eventos de suscripción. Esto suele ocurrir cuando se produce un problema inesperado del lado del servidor.

Unidad: recuento. Use la estadística Sum para obtener el número total de apariciones de errores de publicación de eventos de suscripción del lado del servidor.

PublishDataMessageSize

Tamaño de los mensajes de eventos de suscripción publicados.

Unidad: bytes.

ActiveConnections

El número de WebSocket conexiones simultáneas de los clientes AWS AppSync en 1 minuto.

Unidad: recuento. Use la estadística Sum para obtener el total de conexiones abiertas.

ActiveSubscriptions

Número de suscripciones simultáneas de clientes en 1 minuto.

Unidad: recuento. Use la estadística Sum para obtener el total de suscripciones activas.

ConnectionDuration

Cantidad de tiempo que la conexión permanece abierta.

Unidad: milisegundos. Use la estadística Average para evaluar la duración de la conexión.

OutboundMessages

El número de mensajes medidos publicados correctamente. Un mensaje medido equivale a 5 kB de datos entregados.

Unidad: recuento. Use la estadística Sum para obtener el número total de mensajes medidos que se han publicado correctamente.

InboundMessageSuccess

El número de mensajes entrantes que se han procesado correctamente. Cada tipo de suscripción invocado por una mutación genera un mensaje entrante.

Unidad: recuento. Use la estadística Sum para obtener el número total de mensajes entrantes que se han procesado correctamente.

InboundMessageError

El número de mensajes entrantes que no se procesaron debido a solicitudes de API no válidas, como por ejemplo, por superar el límite de tamaño de la carga útil de la suscripción de 240 kB.

Unidad: recuento. Use la estadística Sum para obtener el número total de mensajes entrantes con errores de procesamiento relacionados con la API.

InboundMessageFailure

El número de mensajes entrantes que no se procesaron debido a errores de. AWS AppSync

Unidad: recuento. Utilice la estadística Suma para obtener el número total de mensajes entrantes con errores de procesamiento AWS AppSync relacionados.

InboundMessageDelayed

El número de mensajes entrantes retrasados. Los mensajes entrantes se pueden retrasar si se supera la cuota de velocidad de mensajes entrantes o salientes.

Unidad: recuento. Use la estadística Sum para obtener el número total de mensajes entrantes que se han retrasado.

InboundMessageDropped

El número de mensajes entrantes descartados. Los mensajes entrantes se pueden descartar si se supera la cuota de velocidad de mensajes entrantes o salientes.

Unidad: recuento. Use la estadística Sum para obtener el número total de mensajes entrantes que se han descartado.

InvalidationSuccess

El número de suscripciones invalidadas (canceladas) correctamente por una mutación con $extensions.invalidateSubscriptions().

Unidad: recuento. Use la estadística Sum para recuperar el número total de suscripciones que se cancelaron correctamente.

InvalidationRequestSuccess

El número de solicitudes de invalidación que se procesaron correctamente.

Unidad: recuento. Use la estadística Sum para obtener el número total de solicitudes de invalidación que se han procesado correctamente.

InvalidationRequestError

El número de solicitudes de invalidación que no se procesaron debido a solicitudes de API no válidas.

Unidad: recuento. Use la estadística Sum para obtener el número total de solicitudes de invalidación con errores de procesamiento relacionados con la API.

InvalidationRequestFailure

El número de solicitudes de invalidación que no se procesaron debido a errores de. AWS AppSync

Unidad: recuento. Utilice la estadística Suma para obtener el número total de solicitudes de invalidación con errores de procesamiento AWS AppSync relacionados.

InvalidationRequestDropped

El número de solicitudes de invalidación descartadas cuando se ha superado la cuota de solicitudes de invalidación.

Unidad: recuento. Utilice la estadística Sum para obtener el número total de solicitudes de invalidación descartadas.

Comparación de los mensajes entrantes y salientes

Cuando se ejecuta una mutación, se invocan campos de suscripción con la directiva @aws_subscribe para esa mutación. Cada invocación de suscripción genera un mensaje entrante. Por ejemplo, si dos campos de suscripción especifican la misma mutación en @aws_subscribe, se generarán dos mensajes entrantes cuando se llame a esa mutación.

Un mensaje saliente equivale a 5 KB de datos entregados a los WebSocket clientes. Por ejemplo, el envío de 15 kB de datos a 10 clientes da como resultado 30 mensajes salientes (15 kB * 10 clientes / 5 kB por mensaje = 30 mensajes).

Puede solicitar aumentos de cuota para mensajes entrantes o salientes. Para obtener más información, consulte Puntos de conexión y cuotas de AWS AppSync en la Guía de referencia general de AWS y las instrucciones sobre Cómo solicitar un aumento de cuota en la Guía del usuario de Service Quotas.

Métricas mejoradas

Las métricas mejoradas emiten datos detallados sobre el uso y el rendimiento de la API, como el recuento de solicitudes y errores de AWS AppSync , la latencia y los aciertos o errores de caché. Todos los datos métricos mejorados se envían a su CloudWatch cuenta y puede configurar los tipos de datos que se enviarán.

nota

Al utilizar métricas mejoradas, se aplican cargos adicionales. Para obtener más información, consulta los niveles de precios de supervisión detallados en Amazon CloudWatch Pricing.

Estas métricas se encuentran en varias páginas de configuración de la AWS AppSync consola. En la página de configuración de la API, la sección Métricas mejoradas le permite activar o desactivar los siguientes elementos:

Comportamiento de las métricas de los solucionadores: estas opciones controlan la forma en que se recopilan las métricas adicionales de los solucionadores. Puede optar por habilitar las métricas de los solucionadores de solicitudes completas (las métricas están habilitadas para todos los solucionadores en las solicitudes), o bien las métricas por solucionador (las métricas solo están habilitadas para los solucionadores cuya configuración esté habilitada). Están disponibles las siguientes opciones:

GraphQL errors per resolver (GraphQLError)

El número de errores de GraphQL que se produjeron por solucionador.

Dimensión de métrica: API_Id, Resolver

Unidad: recuento.

Requests per resolver (Request)

El número de invocaciones que se han producido durante una solicitud. Esto se registra por resolución.

Dimensión de métrica: API_Id, Resolver

Unidad: recuento.

Latency per resolver (Latency)

El tiempo necesario para completar la invocación de un solucionador. La latencia se mide en milisegundos y se registra por resolución.

Dimensión de métrica: API_Id, Resolver

Unidad: milisegundos.

Cache hits per resolver (CacheHit)

El número de aciertos de caché durante una solicitud. Solo se emitirá si se utiliza una caché. Los aciertos de caché se registran por resolución.

Dimensión de métrica: API_Id, Resolver

Unidad: recuento.

Cache misses per resolver (CacheMiss)

El número de errores de caché durante una solicitud. Solo se emitirá si se utiliza una caché. Los errores de caché se registran por resolución.

Dimensión de métrica: API_Id, Resolver

Unidad: recuento.

Comportamiento de las métricas de los orígenes de datos: estas opciones controlan la forma en que se recopilan las métricas adicionales de los orígenes de datos. Puede optar por habilitar las métricas de los orígenes de datos de solicitudes completas (las métricas están habilitadas para todos los orígenes de datos en las solicitudes), o bien las métricas por origen de datos (las métricas solo están habilitadas para los orígenes de datos cuya configuración esté habilitada). Están disponibles las siguientes opciones:

Requests per data source (Request)

El número de invocaciones que se han producido durante una solicitud. Las solicitudes se registran por origen de datos. Si las solicitudes completas están habilitadas, cada fuente de datos tendrá su propia entrada CloudWatch.

Dimensión de métrica: API_Id, Datasource

Unidad: recuento.

Latency per data source (Latency)

El tiempo necesario para completar la invocación de un origen de datos. La latencia se registra por origen de datos.

Dimensión de métrica: API_Id, Datasource

Unidad: milisegundos.

Errors per data source (GraphQLError)

El número de errores que se produjeron durante la invocación de un origen de datos.

Dimensión de métrica: API_Id, Datasource

Unidad: recuento.

Métricas de operación: habilita métricas a nivel de operación de GraphQL.

Requests per operation (Request)

El número de veces que se llamó a una operación de GraphQL específica.

Dimensión de métrica: API_Id, Operation

Unidad: recuento.

GraphQL errors per operation (GraphQLError)

El número de errores de GraphQL que se produjeron durante una operación de GraphQL específica.

Dimensión de métrica: API_Id, Operation

Unidad: recuento.

CloudWatch registros

Puede configurar dos tipos de registros en cada API de GraphQL nueva o existente, tanto en el nivel del campo como de la solicitud.

Registros en el nivel de la solicitud

Cuando se configura el registro en el nivel de solicitud (Incluir el contenido excesivamente detallado), se registra la información siguiente:

  • La cantidad de tókenes utilizados

  • Los encabezados HTTP de la solicitud y la respuesta

  • La consulta de GraphQL que se ejecuta en la solicitud

  • El resumen general de la operación

  • Las suscripciones a GraphQL nuevas y existentes que se están registrando

Registros en el nivel del campo

Cuando se configura el registro a nivel de campo, se registra la información siguiente:

  • Mapeo de solicitudes generado con origen y argumentos para cada campo

  • Mapeo de respuesta transformado para cada campo, que incluye los datos obtenidos de la resolución de dicho campo

  • Información de seguimiento de cada campo

Si activas el registro, AWS AppSync administra los CloudWatch registros. El proceso incluye la creación de grupos y flujos de registros, y la notificación a los flujos de registro con dichos registros.

Al activar el registro en una API de GraphQL y realizar solicitudes, AWS AppSync crea un grupo de registros y registra flujos en el grupo de registros. Al grupo de registro se le asigna un nombre con el formato /aws/appsync/apis/{graphql_api_id}. Dentro de cada grupo, los registros se dividen en flujos de registros. Estos se ordenan en función de la Last Event Time (Hora del último evento) según los datos registrados.

Cada evento de registro se etiqueta con el x-amzn- RequestId de esa solicitud. Esto le ayuda a filtrar los eventos de registro CloudWatch para obtener toda la información registrada sobre esa solicitud. Puedes obtenerlos RequestId de los encabezados de respuesta de cada solicitud de AWS AppSync GraphQL.

El registro en el nivel del campo se configura con los siguientes niveles de registro:

  • Ninguno: no se captura ningún registro a nivel de campo.

  • Error: registra la siguiente información solo para los campos que se encuentran en la categoría de error:
    • La sección de error en la respuesta del servidor

    • Los errores en el nivel del campo

    • Las funciones de solicitud/respuesta generadas resueltas para los campos de error

  • Información: registra la siguiente información solo para los campos que se encuentran en las categorías de información y error:
    • Mensajes a nivel de información

    • Los mensajes de usuario enviados a través de y $util.log.info console.log

    • No se muestran los registros de rastreo y mapeo a nivel de campo.

    • Si el registro a nivel de campo tiene un valor igual INFO o superior e incluye contenido detallado, agrega los mensajes de registro de la plantilla de mapeo transformada. AWS AppSync Contendrá cualquier información que se añada a la plantilla de mapeo transformada o a la salida del JavaScript código ejecutado por la función o la resolución, y no debe utilizarse si tiene previsto enviar información confidencial, como contraseñas o encabezados de autorización, a fuentes de datos posteriores y no desea que esa información aparezca en sus registros.

  • Depuración: registra la siguiente información solo para los campos que se encuentran en las categorías de depuración, información y error:
    • Mensajes a nivel de depuración

    • Los mensajes de usuario enviados a través de$util.log.info,$util.log.debug, y console.log console.debug

    • No se muestran los registros de rastreo y mapeo a nivel de campo.

  • Todo: se registra la siguiente información de todos los campos de la consulta:
    • Información de seguimiento en el nivel del campo

    • Las funciones de solicitud/respuesta generadas que se resolvieron para cada campo

Ventajas de la supervisión

Puede utilizar el registro y las métricas para identificar, solucionar problemas y optimizar sus consultas de GraphQL. Por ejemplo, le pueden ayudar a depurar problemas de latencia mediante la información de seguimiento registrada para cada campo en la consulta. Para ver una demostración, suponga que utiliza uno o varios solucionadores anidados en una consulta de GraphQL. Un ejemplo de operación de campo en CloudWatch Logs podría tener un aspecto similar al siguiente:

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

Esto podría equivaler a un esquema de GraphQL, similar al siguiente:

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

En los resultados del registro anterior, path muestra un solo elemento en los datos devueltos al ejecutar una consulta denominada singlePost(). En este ejemplo, representa el campo name en el primer índice (0). El valor de startOffset proporciona una demora desde el inicio de la operación de consulta de GraphQL. El valor de duration es el tiempo total necesario para resolver el campo. Estos valores pueden ser útiles para solucionar problemas relacionados con el motivo por el que un determinado origen de datos puede ejecutarse más lentamente de lo esperado, o si un campo específico está ralentizando toda la consulta. Por ejemplo, puede elegir aumentar el rendimiento aprovisionado de una tabla de Amazon DynamoDB o quitar un campo específico de una consulta que provoca que la ejecución vaya más lenta en general.

A partir del 8 de mayo de 2019, AWS AppSync genera eventos de registro en formato JSON completamente estructurado. Esto puede ayudarte a utilizar los servicios de análisis de CloudWatch registros, como Logs Insights y Amazon OpenSearch Service, para comprender el rendimiento de tus solicitudes de GraphQL y las características de uso de los campos de tu esquema. Por ejemplo, podrá identificar fácilmente solucionadores con latencias elevadas que podrían ser la causa de un problema de rendimiento. También podrá identificar los campos utilizados con mayor y menor frecuencia en su esquema y evaluar el impacto de dejar de usar campos de GraphQL.

Detección de conflictos y registro de sincronización

Si una AWS AppSync API tiene el registro de CloudWatch registros configurado con el nivel de registro de Field Resolver establecido en Todos, AWS AppSync emite información de detección y resolución de conflictos al grupo de registros. Esto proporciona información detallada sobre cómo respondió la AWS AppSync API a un conflicto. Para ayudarle a interpretar la respuesta, en los registros se proporciona la información siguiente:

conflictType

Se detalla si el conflicto se ha producido debido a una discrepancia de versión o a la condición proporcionada por el cliente.

conflictHandlerConfigured

Se declara el controlador de conflictos configurado en el solucionador en el momento de la solicitud.

message

Se proporciona información sobre cómo se detectó y resolvió el conflicto.

syncAttempt

Número de intentos que el servidor intentó para sincronizar los datos antes de rechazar finalmente la solicitud.

data

Si el controlador de conflictos configurado era Automerge, este campo se rellenará para mostrar la decisión tomada por Automerge para cada campo. Las acciones proporcionadas pueden ser:

  • RECHAZADO: cuando Automerge rechaza el valor del campo entrante a favor del valor en el servidor.

  • AGREGADO: cuando Automerge agrega en el campo entrante debido a que no hay un valor preexistente en el servidor.

  • ANEXADO: cuando Automerge agrega los valores entrantes a los valores de la lista que existe en el servidor.

  • FUSIONADO: cuando Automerge combina los valores entrantes con los valores del conjunto que existe en el servidor.

Uso del recuento de tókenes para optimizar sus solicitudes

A las solicitudes que utilizan 1500 KB/s de memoria y tiempo de vCPU o menos se les asigna un token. Las solicitudes con un consumo de recursos superior a 1500 KB/s se les asignan más tókenes. Por ejemplo, si una solicitud consume 3.350 KB por segundo, AWS AppSync asigna tres fichas (redondeadas al siguiente valor entero) a la solicitud. De forma predeterminada, AWS AppSync asigna un máximo de 5000 o 10 000 fichas de solicitud por segundo a tu cuenta, en función de la región APIs en la que esté desplegada. AWS Si APIs cada uno de vosotros usa una media de dos fichas por segundo, tendréis un límite de 2500 o 5000 solicitudes por segundo, respectivamente. Si necesita más tókenes por segundo de lo que se le han asignado, puede enviar una solicitud para aumentar la cuota predeterminada de tókenes de solicitud. Para obtener más información, consulte AWS AppSync puntos finales y cuotas en la Referencia general de AWS guía y Solicitar un aumento de cuota en la Guía del usuario de Service Quotas.

Un número elevado de tókenes por solicitud podría indicar que existe la posibilidad de optimizar tus solicitudes y mejorar el rendimiento de su API. Entre los factores que pueden aumentar el número de tókenes por solicitud se incluyen los siguientes:

  • El tamaño y la complejidad de su esquema de GraphQL

  • La complejidad de las plantillas de mapeo de solicitudes y respuestas

  • El número de invocaciones del solucionador por solicitud

  • La cantidad de datos devueltos por los solucionadores

  • La latencia de los orígenes de datos posteriores

  • Diseños de esquemas y consultas que requieren llamadas sucesivas al origen de datos (a diferencia de las llamadas en paralelo o por lotes)

  • Configuración de registro, especialmente el contenido a nivel de campo y de registro excesivamente detallado.

nota

Además de las AWS AppSync métricas y los registros, los clientes pueden acceder a la cantidad de fichas consumidas en una solicitud a través del encabezado x-amzn-appsync-TokensConsumed de respuesta.

Límites de tamaño de registros

De forma predeterminada, si el registro está habilitado, AWS AppSync enviará hasta 1 MB de registros por solicitud. Los registros que superen este tamaño se truncarán. Para reducir el tamaño de los registros, elija el nivel de registro ERROR para los registros a nivel de campo y deshabilite el registro VERBOSE, o bien deshabilite por completo los registros a nivel de campo si no es necesario. Como alternativa al nivel de ALL registro, puede usar Enhanced Metrics para obtener métricas sobre resoluciones, fuentes de datos u operaciones de GraphQL específicas, o utilizar las utilidades de registro proporcionadas AppSync por para registrar solo la información necesaria.

Referencia de tipos de registros

RequestSummary

  • requestId: identificador único de la solicitud.

  • grafoQLAPIId: ID de la API de GraphQL que realiza la solicitud.

  • statusCode: respuesta del código de estado HTTP.

  • latencia: End-to-end latencia de la solicitud, en nanosegundos, como número entero.

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

ExecutionSummary

  • requestId: identificador único de la solicitud.

  • grafoQLAPIId: ID de la API de GraphQL que realiza la solicitud.

  • startTime: la marca temporal de inicio del procesamiento de GraphQL para la solicitud, en formato RFC 3339.

  • endTime: la marca temporal de finalización del procesamiento de GraphQL para la solicitud, en formato RFC 3339.

  • duration: el tiempo de ejecución de GraphQL total transcurrido en nanosegundos como número entero.

  • versión: la versión de esquema de ExecutionSummary.

  • parsing (análisis):
    • startOffset: la demora en el inicio del análisis, en nanosegundos, en relación con la invocación, como número entero.

    • duration (duración): el tiempo empleado en el análisis en nanosegundos como número entero.

  • validation (validación):
    • startOffset: la demora en el inicio de la validación, en nanosegundos, en relación con la invocación, como número entero.

    • duration (duración): el tiempo empleado para realizar la validación en nanosegundos como número entero.

{ "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" }

Rastreo

  • requestId: identificador único de la solicitud.

  • grafoQLAPIId: ID de la API de GraphQL que realiza la solicitud.

  • startOffset: la demora en el inicio de la resolución de campo, en nanosegundos, en relación con la invocación, como número entero.

  • duration (duración): el tiempo empleado en la resolución de campo en nanosegundos como número entero.

  • fieldName: el nombre del campo que se está resolviendo.

  • parentType: el tipo principal del campo que se está resolviendo.

  • returnType: el tipo de retorno del campo que se está resolviendo.

  • path (ruta): una lista de los segmentos de ruta, comenzando por el origen de la respuesta y finalizando con la resolución del campo.

  • resolverArn: el ARN del solucionador utilizado para la resolución de campo. Podría no estar presente en los campos anidados.

{ "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" }

Analizar tus CloudWatch registros con Logs Insights

A continuación se muestran ejemplos de las consultas que puede ejecutar para obtener datos procesables sobre el rendimiento y el estado de las operaciones de GraphQL. Estos ejemplos están disponibles como consultas de muestra en la consola de CloudWatch Logs Insights. En la CloudWatchconsola, selecciona Logs Insights, selecciona el AWS AppSync grupo de registros para tu API de GraphQL y, a continuación, selecciona AWS AppSync consultas en Consultas de muestra.

La siguiente consulta devuelve las 10 solicitudes principales de GraphQL con que han usado el número máximo de tókenes:

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

La siguiente consulta devuelve los 10 solucionadores principales con latencia máxima:

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

La siguiente consulta devuelve los solucionadores invocados con mayor frecuencia:

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

La siguiente consulta devuelve los solucionadores con más errores en el mapeo de plantillas:

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

La siguiente consulta devuelve las estadísticas de latencia del solucionador:

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

La siguiente consulta devuelve las estadísticas de latencia del campo:

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

Los resultados de las consultas de CloudWatch Logs Insights se pueden exportar a CloudWatch paneles.

Analice sus registros con Service OpenSearch

Puedes buscar, analizar y visualizar tus AWS AppSync registros con Amazon OpenSearch Service para identificar los cuellos de botella en el rendimiento y las causas fundamentales de los problemas operativos. Puede identificar los solucionadores con los errores y la latencia máxima. Además, puede usar los paneles para crear OpenSearch paneles con visualizaciones potentes. OpenSearch Dashboards es una herramienta de exploración y visualización de datos de código abierto disponible en Service. OpenSearch Con los OpenSearch paneles de control, puede supervisar de forma continua el rendimiento y el estado de sus operaciones de GraphQL. Por ejemplo, puede crear paneles que le permitan visualizar la latencia P90 de sus solicitudes de GraphQL y profundizar en las latencias P90 de cada solucionador.

Cuando utilices el OpenSearch Servicio, utiliza «cwl*» como patrón de filtro para buscar índices. OpenSearch OpenSearch El servicio indexa los registros transmitidos desde CloudWatch Logs con el prefijo «cwl-». Para diferenciar los registros de la AWS AppSync API de otros CloudWatch registros enviados al OpenSearch Servicio, te recomendamos añadir una expresión de graphQLAPIID.keyword=YourGraphQLAPIID filtro adicional a tu búsqueda.

Migración del formato de registro

Los eventos de registro que se AWS AppSync generen a partir del 8 de mayo de 2019 tienen el formato JSON completamente estructurado. Para analizar las solicitudes de GraphQL anteriores al 8 de mayo de 2019, puedes migrar los registros más antiguos a un JSON completamente estructurado mediante un script disponible en el GitHub ejemplo. Si necesita utilizar el formato del registro anterior al 8 de mayo de 2019, cree un tique de soporte técnico con la siguiente configuración: establezca Type (Tipo) en Account Management (Administración de cuentas) y, a continuación, establezca Category (Categoría) en General Account Question (Pregunta sobre la cuenta general).

También puedes usar filtros de métricas CloudWatch para convertir los datos de registro en CloudWatch métricas numéricas, de modo que puedas graficarlos o configurarlos como una alarma.