Uso de CloudWatch para supervisar y registrar los datos de la API de GraphQL
Puede registrar y depurar su API de GraphQL mediante métricas y registros de CloudWatch. Estas herramientas permiten a los desarrolladores supervisar el rendimiento, solucionar problemas y optimizar sus operaciones de GraphQL de forma eficaz.
Las métricas de CloudWatch son una herramienta que proporciona una amplia gama de métricas para supervisar el rendimiento y el uso de las API. Estas métricas se dividen en las siguientes dos categorías principales:
-
Métricas generales de las API: estas incluyen
4XXErrory5XXErrorpara realizar un seguimiento de los errores de los clientes y servidores,Latencypara medir los tiempos de respuesta,Requestspara supervisar el total de llamadas a la API yTokensConsumedpara hacer un seguimiento del uso de los recursos. -
Métricas de suscripción en tiempo real: estas métricas se centran en las conexiones de WebSocket y en 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.
Registros de CloudWatch es una herramienta que habilita las capacidades de registro para las API de GraphQL. Los registros se pueden configurar en dos niveles de la API:
-
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.
-
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.
Puede configurar registros, interpretar las entradas de registro y utilizar los datos de registro para la solución de problemas y la optimización. AWS AppSync proporciona varios tipos de registro que muestran los datos de ejecución, análisis, validación y resolución de campo de su consulta.
Ajustes y configuración
Para activar el registro automático en una API de GraphQL, use la consola de AWS AppSync.
-
Inicie sesión en la Consola de administración de AWS y abra la consola de AppSync
. -
En la página API, elija el nombre de una API de GraphQL.
-
En el panel de navegación de la página de inicio de la API de, elija Ajustes.
-
En Logging (Registro), haga lo siguiente:
-
Active Habilitar Logs.
-
Para obtener un registro detallado a nivel de solicitud, seleccione la casilla de verificación en Incluir el contenido excesivamente detallado (opcional).
-
En Nivel de registro del solucionador de campo, elija el nivel de registro de nivel de campo que prefiera (Ninguno, Error, Información, Debug o Todo) (opcional).
-
En Crear un rol o utilizar uno existente, seleccione Nuevo rol para crear un nuevo AWS Identity and Access Management (IAM) que permita a AWS AppSync escribir registros en CloudWatch. 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.
-
-
Seleccione Save.
Configuración manual del rol de IAM
Si decide utilizar un rol de IAM existente, la función debe conceder a AWS AppSync los permisos necesarios para escribir registros en CloudWatch. Para configurarlo manualmente, debe proporcionar un ARN del rol de servicio para que AWS AppSync pueda asumir este rol al escribir los registros.
En la consola de IAMAWSAppSyncPushToCloudWatchLogsPolicy que tenga la siguiente definición:
A continuación, cree un nuevo rol con el nombre AWSAppSyncPushToCloudWatchLogsRole y adjunte la política recién creada a este rol. Edite la relación de confianza para este rol de la siguiente manera:
Copie el ARN del rol y utilícelo al configurar el registro para una API de GraphQL de AWS AppSync.
Métricas de CloudWatch
Puede utilizar las métricas de CloudWatch para supervisar y enviar alertas sobre eventos específicos que pueden provocar códigos de estado HTTP o de 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 de grupo de usuarios de Amazon Cognito o la Región de AWS no son válidos. De forma alternativa, esto también podría ocurrir si AWS AppSync encuentra 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 -
Es el tiempo que transcurre entre que AWS AppSync recibe una solicitud de un cliente y 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 + mutaciones) que han procesado todas las API de su cuenta, por Región.
Unidad: recuento. El número total de solicitudes procesadas en una Región determinada.
TokensConsumed-
Los tókenes se asignan en
Requestsfunción de la cantidad de recursos (tiempo de procesamiento y memoria utilizada) que consuma unaRequest. Por lo general, cadaRequestconsume un token. Sin embargo, si unaRequestconsume 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 consola de AWS AppSync, en la página de configuración de la memoria caché, la opción Métricas de estado de caché 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_Iden la métricaappsyncCacheNetworkBandwidthOutAllowanceExceeded.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 consola de AWS AppSync, en la página de configuración de la memoria caché, la opción Métricas de estado de caché 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_Iden la métricaappsyncCacheEngineCPUUtilization.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: GraphQLAPIId. Esto significa que todas las métricas están vinculadas a los ID de la API de GraphQL. Las siguientes métricas están relacionadas con suscripciones de GraphQL puramente a través de WebSockets:
ConnectRequests-
El número de solicitudes de conexión a WebSocket realizadas en AWS AppSync, incluidos los intentos correctos e incorrectos.
Unidad: recuento. Utilice la estadística Sum para obtener el número total de solicitudes de conexión.
ConnectSuccess-
El número de conexiones correctas de WebSocket con 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 conexiones de WebSocket que ha rechazado AWS AppSync debido a 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 desde AWS AppSync durante el procesamiento de 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 desconexiones de WebSocket correctas 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 que se originaron desde AWS AppSync durante la desconexión de las conexiones de 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 desde AWS AppSync durante la desconexión de las conexiones de 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 en AWS AppSync a través de 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-
Número de suscripciones que ha rechazado AWS AppSync debido a errores del lado 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-
Número de errores que se originaron desde AWS AppSync durante el procesamiento de 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 cancelaciones de suscripción que ha rechazado AWS AppSync debido a errores del lado 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 en AWS AppSync durante el procesamiento de 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 en AWS AppSync durante la publicación de 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-
Número de conexiones de WebSocket simultáneas entre los clientes y 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. Use la estadística Sum para obtener el número total de mensajes entrantes con errores de procesamiento relacionados con AWS AppSync.
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. Use la estadística Sum para obtener el número total de solicitudes de invalidación con errores de procesamiento relacionados con AWS AppSync.
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 clientes de WebSocket. 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 de métricas mejoradas se envían a su cuenta de CloudWatch, y es posible 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, consulte los niveles de precios de monitoreo detallado en Precios de Amazon CloudWatch
Estas métricas se pueden encontrar en varias páginas de configuración de la consola de AWS AppSync. 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,ResolverUnidad: 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,ResolverUnidad: 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,ResolverUnidad: 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,ResolverUnidad: 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,ResolverUnidad: 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 origen de datos tendrá su propia entrada en CloudWatch.
Dimensión de métrica:
API_Id,DatasourceUnidad: 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,DatasourceUnidad: 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,DatasourceUnidad: 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,OperationUnidad: 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,OperationUnidad: recuento.
Registros de CloudWatch
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 activa el registro, AWS AppSync administra los Registros de CloudWatch. 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 habilitar el registro en una API de GraphQL y hacer solicitudes, AWS AppSync crea un grupo de registros y flujos de registros 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 dicha solicitud. Esto le ayuda a filtrar los eventos de registro en CloudWatch para obtener toda la información registrada acerca de dicha solicitud. Puede obtener el RequestId de los encabezados de la respuesta de cada solicitud de GraphQL de AWS AppSync.
El registro en el nivel del campo se configura con los siguientes niveles de registro:
-
Ninguno: no se captura ningún registro en el nivel de campo.
-
- Error: se registra la siguiente información solo en 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 en los campos que se encuentran en las categorías de información y error:
-
-
Mensajes del nivel de información
-
Los mensajes de usuario enviados a través de
$util.log.infoyconsole.log. -
No se muestran los registros de rastreo y mapeo en el nivel de campo.
-
Si el registro en el nivel de campo tiene un valor igual a
INFOo superior e incluye contenido excesivamente detallado,AWS AppSync agrega los mensajes de registro de la plantilla de mapeo transformada. Contendrá cualquier información que se agregue a la plantilla de mapeo transformada o el resultado del código JavaScript ejecutado por la función o la resolución y no debe usarse si planea enviar información confidencial, como contraseñas o encabezados de autorización, a orígenes de datos descendentes y no desea que esa información aparezca en sus registros.
-
-
- Debug: registra la siguiente información solo para los campos que se encuentran en las categorías de debug, información y error:
-
-
Mensajes en el nivel de debug
-
Los mensajes de usuario enviados a través de
$util.log.info,$util.log.debug,console.logyconsole.debug. -
No se muestran los registros de rastreo y mapeo en el 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 resueltas 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. Una operación de campo de muestra en Registros de CloudWatch 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.
Desde el 8 de mayo de 2019, AWS AppSync genera eventos de registro como archivos JSON completamente estructurados. Esto le permite utilizar los servicios de análisis de registros como CloudWatch Logs Insights y Amazon OpenSearch Service para comprender el rendimiento de sus solicitudes de GraphQL y el uso de las características de los campos de 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 API de AWS AppSync tiene el registro en CloudWatch Logs configurado con el nivel de registro del solucionador de campo establecido en Todo, AWS AppSync emite información de detección y resolución de conflictos al grupo de registro. Esto proporciona información detallada sobre cómo respondió la API de AWS AppSync 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 porAutomergepara cada campo. Las acciones proporcionadas pueden ser:-
RECHAZADO: cuando
Automergerechaza el valor del campo entrante a favor del valor en el servidor. -
AGREGADO: cuando
Automergeagrega en el campo entrante debido a que no hay un valor preexistente en el servidor. -
ANEXADO: cuando
Automergeagrega los valores entrantes a los valores de la lista que existe en el servidor. -
FUSIONADO: cuando
Automergecombina 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 3350 KB/s, AWS AppSync asigna tres tókenes (redondeados al siguiente valor entero) a la solicitud. De forma predeterminada, AWS AppSync asigna un máximo de 5000 o 10 000 tókenes de solicitud por segundo a las API de su cuenta, en función de la Región de AWS en la que se haya implementado. Si cada una de sus API usa un promedio de dos tókenes por segundo, tendrá 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 Puntos de conexión y cuotas de AWS AppSync en la Guía de Referencia general de AWS 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 métricas y los registros de AWS AppSync, los clientes pueden acceder al número de tókenes consumidos en una solicitud a través del encabezado de respuesta x-amzn-appsync-TokensConsumed.
Límites de tamaño de registros
De forma predeterminada, si se ha activado la creación de registros, 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 registro ALL, puede usar métricas mejoradas para obtener métricas sobre solucionadores, operaciones de GraphQL u orígenes de datos específicos, o bien puede usar las utilidades de registro que proporciona AppSync para registrar solo la información necesaria.
Referencia de tipos de registros
RequestSummary
-
requestId: identificador único de la solicitud.
-
graphQLAPIId: ID de la API de GraphQL que realiza la solicitud.
-
statusCode: respuesta del código de estado HTTP.
-
latency (latencia): latencia integral 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.
-
graphQLAPIId: 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.
-
version (versión): la versión del 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.
-
graphQLAPIId: 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" }
Análisis de sus registros con CloudWatch 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 solicitudes de ejemplo en la consola de CloudWatch Logs Insights. En la consola de CloudWatch
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 los paneles de CloudWatch.
Análisis de sus registros con OpenSearch Service
Puede buscar, analizar y visualizar sus registros de AWS AppSync con Amazon OpenSearch Service para identificar los cuellos de botella de rendimiento y la causa de origen de los problemas operativos. Puede identificar los solucionadores con los errores y la latencia máxima. Además, puede utilizar Paneles de OpenSearch para crear paneles con visualizaciones muy útiles. Paneles de OpenSearch es una herramienta de exploración y visualización de datos de código abierto disponible en OpenSearch Service. Con los Paneles de OpenSearch, 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.
Al utilizar OpenSearch Service, use “cwl*” como el patrón de filtro para las búsquedas en los índices de OpenSearch. OpenSearch Service indexa los registros transmitidos desde CloudWatch Logs con un prefijo de “cwl-”. Para diferenciar los registros de la API de AWS AppSync de otros registros de CloudWatch enviados a OpenSearch Service, le recomendamos agregar una expresión de filtro adicional de graphQLAPIID.keyword= a la búsqueda.YourGraphQLAPIID
Migración del formato de registro
Los eventos de registro generados por AWS AppSync desde el 8 de mayo de 2019 en adelante tienen un formato JSON completamente estructurado. Para analizar las solicitudes de GraphQL anteriores al 8 de mayo de 2019, puede migrar los registros antiguos a archivos JSON completamente estructurados mediante un script disponible en el ejemplo de GitHub
También puede usar filtros de métricas en CloudWatch para convertir los datos de registro en métricas numéricas de CloudWatch que puede representar gráficamente o en las que puede configurar una alarma.