Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisation CloudWatch pour surveiller et enregistrer les données de l'API GraphQL
Vous pouvez enregistrer et déboguer votre API GraphQL à l'aide de CloudWatch métriques et CloudWatch de journaux. Ces outils permettent aux développeurs de surveiller les performances, de résoudre les problèmes et d'optimiser efficacement leurs opérations GraphQL.
CloudWatch metrics est un outil qui fournit un large éventail de mesures pour surveiller les performances et l'utilisation des API. Ces indicateurs se répartissent en deux catégories principales :
-
Métriques générales de l'API : elles
4XXErrorpermettent notamment5XXErrorde suivre les erreurs des clients et des serveurs,Latencyde mesurer les temps de réponse,Requestsde surveiller le nombre total d'appels d'API etTokensConsumedde suivre l'utilisation des ressources. -
Real-time Statistiques d'abonnement : ces mesures se concentrent sur les WebSocket connexions et les activités d'abonnement. Ils incluent des mesures relatives aux demandes de connexion, aux connexions réussies, aux inscriptions à des abonnements, à la publication de messages, ainsi qu'aux connexions et abonnements actifs.
Le guide présente également les mesures améliorées, qui fournissent des données plus détaillées sur les performances du résolveur, les interactions entre les sources de données et les opérations GraphQL individuelles. Ces indicateurs fournissent des informations plus détaillées mais entraînent des coûts supplémentaires.
CloudWatch Logs est un outil qui active les fonctionnalités de journalisation pour vos API GraphQL. Les journaux peuvent être définis à deux niveaux de l'API :
-
Request-level Journaux : ils capturent les informations générales des demandes, y compris les en-têtes HTTP, les requêtes GraphQL, les résumés des opérations et les enregistrements d'abonnements.
-
Field-level Journaux : ils fournissent des informations détaillées sur les résolutions de chaque champ, y compris les mappages des demandes et des réponses, ainsi que des informations de suivi pour chaque champ.
Vous pouvez configurer la journalisation, interpréter les entrées du journal et utiliser les données du journal à des fins de dépannage et d'optimisation. AWS AppSync fournit différents types de journaux qui révèlent les données d'exécution, d'analyse, de validation et de résolution des champs de votre requête.
Installation et configuration
Pour activer la journalisation automatique sur une API GraphQL, utilisez la AWS AppSync console.
-
Connectez-vous à la AppSync console Console de gestion AWS et ouvrez-la
. -
Sur la page API, choisissez le nom d'une API GraphQL.
-
Sur la page d'accueil de votre API, dans le volet de navigation, choisissez Paramètres.
-
Sous Journalisation, procédez de la façon suivante :
-
Activez Activer les journaux.
-
Pour une journalisation détaillée au niveau des demandes, cochez la case sous Inclure le contenu détaillé. (facultatif)
-
Sous Niveau de journalisation du résolveur de champs, choisissez votre niveau de journalisation préféré au niveau des champs (Aucun, Erreur, Info , Débogage ou Tout). (facultatif)
-
Sous Créer ou utiliser un rôle existant, choisissez Nouveau rôle pour créer un nouveau rôle Gestion des identités et des accès AWS (IAM) dans lequel AWS AppSync écrire CloudWatch des journaux. Ou choisissez Rôle existant pour sélectionner le nom de ressource Amazon (ARN) d'un rôle IAM existant dans votre AWS compte.
-
-
Cliquez sur Enregistrer.
Configuration manuelle des rôles IAM
Si vous choisissez d'utiliser un rôle IAM existant, celui-ci doit accorder AWS AppSync les autorisations requises pour écrire des journaux. CloudWatch Pour configurer cela manuellement, vous devez fournir un ARN de rôle de service afin qu'il AWS AppSync puisse assumer le rôle lors de l'écriture des journaux.
Dans la console IAMAWSAppSyncPushToCloudWatchLogsPolicy dont le nom possède la définition suivante :
Créez ensuite un nouveau rôle avec ce nom AWSAppSyncPushToCloudWatchLogsRole et associez-lui la politique nouvellement créée. Modifiez la relation de confiance pour ce rôle comme suit :
Copiez l'ARN du rôle et utilisez-le lors de la configuration de la journalisation pour une API AWS AppSync GraphQL.
CloudWatch métriques
Vous pouvez utiliser CloudWatch des métriques pour surveiller et émettre des alertes concernant des événements spécifiques susceptibles de générer des codes d'état HTTP ou de latence. Les métriques suivantes sont émises :
-
4XXError -
Erreurs résultant de demandes non valides en raison d'une configuration client incorrecte. Généralement, ces erreurs se produisent n'importe où en dehors du traitement GraphQL. Par exemple, ces erreurs peuvent se produire lorsque la demande inclut une charge utile JSON incorrecte ou une requête incorrecte, lorsque le service est limité ou lorsque les paramètres d'autorisation sont mal configurés.
Unité : nombre. Utilisez la statistique Somme pour obtenir le total des occurrences de ces erreurs.
-
5XXError -
Erreurs rencontrées lors de l'exécution d'une requête GraphQL. Cela peut se produire, par exemple, lors de l'appel d'une requête pour un schéma vide ou incorrect. Cela peut également se produire lorsque l'ID ou la AWS région du groupe d'utilisateurs Amazon Cognito n'est pas valide. Cela peut également se produire en cas AWS AppSync de problème lors du traitement d'une demande.
Unité : nombre. Utilisez la statistique Somme pour obtenir le total des occurrences de ces erreurs.
-
Latency -
Le délai entre la AWS AppSync réception d'une demande d'un client et le moment où il renvoie une réponse au client. Cela n'inclut pas la latence du réseau rencontrée pour une réponse afin d'atteindre les appareils finaux.
Unité : milliseconde. Utilisez la statistique Moyenne pour évaluer les latences attendues.
Requests-
Le nombre de demandes (requêtes + mutations) traitées par toutes les API de votre compte, par région.
Unité : nombre. Le nombre de demandes traitées dans une région donnée.
TokensConsumed-
Les jetons sont attribués
Requestsen fonction de la quantité de ressources (temps de traitement et mémoire utilisée) qu'un utilisateurRequestconsomme. En général, chacunRequestconsomme un jeton. Cependant, une entrepriseRequestqui consomme de grandes quantités de ressources se voit attribuer des jetons supplémentaires selon les besoins.Unité : nombre. Le nombre de jetons alloués aux demandes traitées dans une région particulière.
NetworkBandwidthOutAllowanceExceeded-
Note
Dans la AWS AppSync console, sur la page des paramètres du cache, l'option Mesures de santé du cache vous permet d'activer cette métrique de santé liée au cache.
Les paquets réseau ont été abandonnés parce que le débit dépassait la limite de bande passante agrégée. Cela est utile pour diagnostiquer les goulots d'étranglement dans une configuration de cache. Les données sont enregistrées pour une API particulière en les spécifiant
API_Iddans laappsyncCacheNetworkBandwidthOutAllowanceExceededmétrique.Unité : nombre. Le nombre de paquets abandonnés après avoir dépassé la limite de bande passante pour une API spécifiée par ID.
EngineCPUUtilization-
Note
Dans la AWS AppSync console, sur la page des paramètres du cache, l'option Mesures de santé du cache vous permet d'activer cette métrique de santé liée au cache.
L'utilisation du processeur (pourcentage) allouée au processus Redis OSS. Cela est utile pour diagnostiquer les goulots d'étranglement dans une configuration de cache. Les données sont enregistrées pour une API particulière en les spécifiant
API_Iddans laappsyncCacheEngineCPUUtilizationmétrique.Unité : Pourcentage. Le pourcentage de processeur actuellement utilisé par le processus Redis OSS pour une API spécifiée par ID.
Real-time abonnements
Toutes les métriques sont émises dans une dimension : GraphQLAPIID. Cela signifie que toutes les métriques sont couplées avec des ID d'API GraphQL. Les statistiques suivantes sont liées aux abonnements GraphQL en version pure WebSockets :
Note
Cette dimension s'applique uniquement aux API AWS AppSync GraphQL. AWS AppSync propose également des API Event, un type d'API distinct dont les métriques sont émises sous une dimension différente (EventAPIid). Pour plus d'informations, consultez la section CloudWatch Statistiques.
ConnectRequests-
Le nombre de demandes de WebSocket connexion adressées à AWS AppSync, y compris les tentatives réussies et infructueuses.
Unité : nombre. Utilisez la statistique Sum pour obtenir le nombre total de demandes de connexion.
ConnectSuccess-
Le nombre de WebSocket connexions réussies à AWS AppSync. Il est possible d'avoir des connexions sans abonnements.
Unité : nombre. Utilisez la statistique Sum (Somme) pour obtenir le total des occurrences de connexions réussies.
ConnectClientError-
Le nombre de WebSocket connexions qui ont été rejetées en AWS AppSync raison d'erreurs côté client. Cela peut indiquer que le service est limité ou que les paramètres d'autorisation sont mal configurés.
Unité : nombre. Utilisez la statistique Sum (Somme) pour obtenir le total des occurrences des erreurs de connexion côté client.
ConnectServerError-
Le nombre d'erreurs survenues AWS AppSync lors du traitement des connexions. Cela se produit généralement lorsqu'un problème inattendu prend place côté serveur.
Unité : nombre. Utilisez la statistique Sum (Somme) pour obtenir le total des occurrences d'erreurs de connexion côté serveur.
DisconnectSuccess-
Le nombre de WebSocket déconnexions réussies de AWS AppSync.
Unité : nombre. Utilisez la statistique Sum (Somme) pour obtenir le total d'occurrences de déconnexions réussies.
DisconnectClientError-
Le nombre d'erreurs client provoquées AWS AppSync lors de la déconnexion WebSocket des connexions.
Unité : nombre. Utilisez la statistique Sum (Somme) pour obtenir le total des occurrences d'erreurs de connexion.
DisconnectServerError-
Le nombre d'erreurs de serveur survenues AWS AppSync lors de la déconnexion WebSocket des connexions.
Unité : nombre. Utilisez la statistique Sum (Somme) pour obtenir le total des occurrences d'erreurs de connexion.
SubscribeSuccess-
Le nombre d'abonnements qui ont été enregistrés avec succès AWS AppSync via WebSocket. Il est possible d'avoir des connexions sans abonnement, mais il n'est pas possible d'avoir des abonnements sans connexion.
Unité : nombre. Utilisez la statistique Sum (Somme) pour obtenir le nombre total des occurrences d'abonnements réussis.
SubscribeClientError-
Le nombre d'abonnements qui ont été rejetés en AWS AppSync raison d'erreurs côté client. Cela peut se produire lorsqu'une charge utile JSON est incorrecte, que le service est limité ou que les paramètres d'autorisation sont mal configurés.
Unité : nombre. Utilisez la statistique Sum (Somme) pour obtenir le total des occurrences d'erreurs d'abonnement côté client.
SubscribeServerError-
Le nombre d'erreurs survenues AWS AppSync lors du traitement des abonnements. Cela se produit généralement lorsqu'un problème inattendu prend place côté serveur.
Unité : nombre. Utilisez la statistique Sum (Somme) pour obtenir le nombre total d'occurrences des erreurs d'abonnement côté serveur.
UnsubscribeSuccess-
Le nombre de demandes de désabonnement qui ont été traitées avec succès.
Unité : nombre. Utilisez la statistique Sum pour obtenir le nombre total d'occurrences des demandes de désabonnement réussies.
UnsubscribeClientError-
Le nombre de demandes de désabonnement qui ont été rejetées en AWS AppSync raison d'erreurs côté client.
Unité : nombre. Utilisez la statistique Sum pour obtenir le nombre total d'occurrences des erreurs de demande de désabonnement côté client.
UnsubscribeServerError-
Le nombre d'erreurs survenues AWS AppSync lors du traitement des demandes de désinscription. Cela se produit généralement lorsqu'un problème inattendu prend place côté serveur.
Unité : nombre. Utilisez la statistique Sum pour obtenir le nombre total d'occurrences des erreurs de demande de désabonnement côté serveur.
PublishDataMessageSuccess-
Nombre de messages d'événement d'abonnement qui ont été publiés avec succès.
Unité : nombre. Utilisez la statistique Sum (Somme) pour obtenir le total des messages d'événement d'abonnement qui ont été publiés avec succès.
PublishDataMessageClientError-
Nombre de messages d'événement d'abonnement qui n'ont pas pu être publiés en raison d'erreurs côté client.
Unit: Compter. Utilisez la statistique Sum (Somme) pour obtenir le total des occurrences d'erreurs d'événement d'abonnement de publication côté client. PublishDataMessageServerError-
Le nombre d'erreurs survenues AWS AppSync lors de la publication des messages relatifs aux événements d'abonnement. Cela se produit généralement lorsqu'un problème inattendu prend place côté serveur.
Unité : nombre. Utilisez la statistique Sum (Somme) pour obtenir le total des occurrences d'erreurs d'événement d'abonnement de publication côté serveur.
PublishDataMessageSize-
Taille des messages d'événement d'abonnement publiés.
Unité : octets.
ActiveConnections-
Le nombre de WebSocket connexions simultanées entre les clients et AWS AppSync en 1 minute.
Unité : nombre. Utilisez la statistique Sum (Somme) pour obtenir le nombre total de connexions ouvertes.
ActiveSubscriptions-
Nombre d'abonnements simultanés provenant de clients en 1 minute.
Unité : nombre. Utilisez la statistique Sum (Somme) pour obtenir le total des abonnements actifs.
ConnectionDuration-
Durée pendant laquelle la connexion reste ouverte.
Unité : millisecondes. Utilisez la statistique Average (Moyenne) pour évaluer la durée de connexion.
OutboundMessages-
Le nombre de messages mesurés publiés avec succès. Un message mesuré équivaut à 5 Ko de données transmises.
Unité : nombre. Utilisez la statistique Sum pour obtenir le nombre total de messages mesurés publiés avec succès.
InboundMessageSuccess-
Le nombre de messages entrants traités avec succès. Chaque type d'abonnement invoqué par une mutation génère un message entrant.
Unité : nombre. Utilisez la statistique Sum pour obtenir le nombre total de messages entrants traités avec succès.
InboundMessageError-
Le nombre de messages entrants dont le traitement a échoué en raison de demandes d'API non valides, telles que le dépassement de la limite de 240 Ko de charge utile d'abonnement.
Unité : nombre. Utilisez la statistique Sum pour obtenir le nombre total de messages entrants dont le API-related traitement a échoué.
InboundMessageFailure-
Le nombre de messages entrants dont le traitement a échoué en raison d'erreurs provenant de AWS AppSync.
Unité : nombre. Utilisez la statistique Sum pour obtenir le nombre total de messages entrants avec des échecs de traitement AWS AppSync associés.
InboundMessageDelayed-
Le nombre de messages entrants différés. Les messages entrants peuvent être retardés lorsque le quota de débit de messages entrants ou le quota de débit de messages sortants est dépassé.
Unité : nombre. Utilisez la statistique Sum pour obtenir le nombre total de messages entrants qui ont été retardés.
InboundMessageDropped-
Le nombre de messages entrants supprimés. Les messages entrants peuvent être supprimés lorsque le quota de débit de messages entrants ou le quota de débit de messages sortants est dépassé.
Unité : nombre. Utilisez la statistique Sum pour obtenir le nombre total de messages entrants qui ont été supprimés.
InvalidationSuccess-
Le nombre d'abonnements invalidés (désabonnés) avec succès par une mutation avec.
$extensions.invalidateSubscriptions()Unité : nombre. Utilisez la statistique Sum pour récupérer le nombre total d'abonnements qui ont été désabonnés avec succès.
InvalidationRequestSuccess-
Le nombre de demandes d'invalidation traitées avec succès.
Unité : nombre. Utilisez la statistique Sum pour obtenir le nombre total de demandes d'invalidation traitées avec succès.
InvalidationRequestError-
Le nombre de demandes d'invalidation dont le traitement a échoué en raison de demandes d'API non valides.
Unité : nombre. Utilisez la statistique Sum pour obtenir le nombre total de demandes d'invalidation dont le API-related traitement a échoué.
InvalidationRequestFailure-
Le nombre de demandes d'invalidation dont le traitement a échoué en raison d'erreurs provenant de AWS AppSync.
Unité : nombre. Utilisez la statistique Sum pour obtenir le nombre total de demandes d'invalidation associées à des échecs de AWS AppSync traitement.
InvalidationRequestDropped-
Le nombre de demandes d'invalidation a diminué lorsque le quota de demandes d'invalidation a été dépassé.
Unité : nombre. Utilisez la statistique Sum pour obtenir le nombre total de demandes d'invalidation abandonnées.
Comparaison des messages entrants et sortants
Lorsqu'une mutation est exécutée, les champs d'abonnement contenant la directive @aws_subscribe pour cette mutation sont invoqués. Chaque appel d'abonnement génère un message entrant. Par exemple, si deux champs d'abonnement spécifient la même mutation dans @aws_subscribe, deux messages entrants sont générés lorsque cette mutation est appelée.
Un message sortant équivaut à 5 Ko de données transmises aux WebSocket clients. Par exemple, l'envoi de 15 Ko de données à 10 clients génère 30 messages sortants (15 ko * 10 clients/5 ko par message = 30 messages).
Vous pouvez demander des augmentations de quota pour les messages entrants ou sortants. Pour plus d'informations, consultez les AWS AppSync points de terminaison et les quotas dans le guide de référence AWS générale et les instructions relatives à la demande d'augmentation de quota dans le guide de l'utilisateur des quotas de service.
Métriques améliorées
Les métriques améliorées émettent des données granulaires sur l'utilisation et les performances des API, telles que le nombre de AWS AppSync requêtes et d'erreurs, la latence et le cache hits/misses. Toutes les données métriques améliorées sont envoyées à votre CloudWatch compte et vous pouvez configurer les types de données qui seront envoyés.
Note
Des frais supplémentaires sont appliqués lors de l'utilisation de métriques améliorées. Pour plus d'informations, consultez la section relative au suivi détaillé des niveaux de tarification dans Amazon CloudWatch Tarification
Ces statistiques sont disponibles sur les différentes pages de paramètres de la AWS AppSync console. Sur la page des paramètres de l'API, la section Mesures améliorées vous permet d'activer ou de désactiver les éléments suivants :
Comportement des métriques des résolveurs : ces options contrôlent la manière dont les métriques supplémentaires sont collectées pour les résolveurs. Vous pouvez choisir d'activer les mesures complètes du résolveur de demandes (mesures activées pour tous les résolveurs des demandes) ou les métriques par résolveur (mesures activées uniquement pour les résolveurs dont la configuration est activée). Les options suivantes sont disponibles :
-
GraphQL errors per resolver (GraphQLError) -
Le nombre d'erreurs GraphQL survenues par résolveur.
Dimension métrique :
API_Id,ResolverUnité : nombre.
-
Requests per resolver (Request) -
Le nombre d'invocations survenues lors d'une demande. Ceci est enregistré par résolveur.
Dimension métrique :
API_Id,ResolverUnité : nombre.
-
Latency per resolver (Latency) -
Le temps nécessaire pour terminer l'invocation d'un résolveur. La latence est mesurée en millisecondes et est enregistrée par résolveur.
Dimension métrique :
API_Id,ResolverUnité : milliseconde.
Cache hits per resolver (CacheHit)-
Le nombre d'accès au cache lors d'une requête. Cela ne sera émis que si un cache est utilisé. Les accès au cache sont enregistrés par résolveur.
Dimension métrique :
API_Id,ResolverUnité : nombre.
Cache misses per resolver (CacheMiss)-
Le nombre de caches manqués lors d'une demande. Cela ne sera émis que si un cache est utilisé. Les erreurs de cache sont enregistrées par résolveur.
Dimension métrique :
API_Id,ResolverUnité : nombre.
Comportement des métriques des sources de données : ces options contrôlent la manière dont les métriques supplémentaires sont collectées pour les sources de données. Vous pouvez choisir d'activer les mesures de source de données de demande complètes (mesures activées pour toutes les sources de données dans les demandes) ou les métriques par source de données (mesures activées uniquement pour les sources de données dont la configuration est activée). Les options suivantes sont disponibles :
-
Requests per data source (Request) -
Le nombre d'invocations survenues lors d'une demande. Les demandes sont enregistrées par source de données. Si les demandes complètes sont activées, chaque source de données aura sa propre entrée CloudWatch.
Dimension métrique :
API_Id,DatasourceUnité : nombre.
-
Latency per data source (Latency) -
Le temps nécessaire pour terminer l'invocation d'une source de données. La latence est enregistrée par source de données.
Dimension métrique :
API_Id,DatasourceUnité : milliseconde.
-
Errors per data source (GraphQLError) -
Le nombre d'erreurs survenues lors de l'appel d'une source de données.
Dimension métrique :
API_Id,DatasourceUnité : nombre.
Métriques opérationnelles : active les métriques de niveau opérationnel de GraphQL.
-
Requests per operation (Request) -
Le nombre de fois qu'une opération GraphQL spécifiée a été appelée.
Dimension métrique :
API_Id,OperationUnité : nombre.
-
GraphQL errors per operation (GraphQLError) -
Le nombre d'erreurs GraphQL survenues au cours d'une opération GraphQL spécifiée.
Dimension métrique :
API_Id,OperationUnité : nombre.
CloudWatch journaux
Vous pouvez configurer deux types de journalisation sur n'importe quelle API GraphQL nouvelle ou existante : au niveau de la demande et au niveau du champ.
Request-level journaux
Lorsque la journalisation au niveau de la demande (inclure du contenu détaillé) est configurée, les informations suivantes sont enregistrées :
-
Le nombre de jetons consommés
-
La demande et la réponse des en-têtes HTTP
-
La requête GraphQL qui s'exécute dans la requête
-
Le résumé général des opérations
-
Les abonnements à GraphQL nouveaux et anciens qui sont enregistrés
Field-level journaux
Lorsque la journalisation au niveau des champs est configurée, les informations suivantes sont enregistrées :
-
Mappage des requêtes généré avec la source et les arguments pour chaque champ
-
Le mappage des réponses transformées pour chaque champ, qui inclut les données résultant de la résolution de ce champ
-
Suivi des informations pour chaque champ
Si vous activez la journalisation, AWS AppSync gère les CloudWatch journaux. Le processus comprend la création de groupes de journaux et de flux de journaux, et la génération de rapports dans les flux de journaux avec ces journaux.
Lorsque vous activez la journalisation sur une API GraphQL et que vous envoyez des requêtes, vous AWS AppSync créez un groupe de journaux et enregistrez les flux dans le groupe de journaux. Le groupe de journaux est nommé selon le format /aws/appsync/apis/{graphql_api_id}. Dans chaque groupe de journaux, les journaux sont également divisés en flux de journaux. Ces derniers sont classés selon l'heure du dernier événement lors de la consignation des données.
Chaque événement de journal est marqué avec le x-amzn- RequestId de cette demande. Cela vous permet de filtrer les événements du journal CloudWatch pour obtenir toutes les informations enregistrées concernant cette demande. Vous pouvez les obtenir RequestId à partir des en-têtes de réponse de chaque requête GraphQL AWS AppSync .
La journalisation au niveau du champ est configurée avec les niveaux de journaux suivants :
-
Aucun : aucun journal au niveau du champ n'est capturé.
-
- Erreur : enregistre les informations suivantes uniquement pour les champs appartenant à la catégorie d'erreur :
-
-
Section d'erreur dans la réponse du serveur
-
Field-level erreurs
-
Les request/response fonctions générées qui ont été résolues pour les champs d'erreur
-
-
- Info : enregistre les informations suivantes uniquement pour les champs appartenant aux catégories d'informations et d'erreurs :
-
-
Info-level messages
-
Les messages des utilisateurs envoyés via
$util.log.infoetconsole.log -
Field-level les journaux de traçage et de cartographie ne sont pas affichés.
-
Si la journalisation au niveau des champs est définie sur
INFOou plus avec un contenu détaillé inclus, AWS AppSync ajoute les messages de journalisation du modèle de mappage transformé. Il contiendra toutes les informations ajoutées au modèle de mappage transformé, ou à la sortie du JavaScript code exécuté par le résolveur ou la fonction, et ne doit pas être utilisé si vous prévoyez d'envoyer des informations sensibles, telles que des mots de passe ou des en-têtes d'autorisation, à des sources de données en aval et que vous ne souhaitez pas que ces informations figurent dans vos journaux.
-
-
- Débogage : enregistre les informations suivantes uniquement pour les champs des catégories debug, info et error :
-
-
Debug-level messages
-
Les messages utilisateur envoyés via
$util.log.info$util.log.debug,console.log, etconsole.debug -
Field-level les journaux de traçage et de cartographie ne sont pas affichés.
-
-
- Tout : enregistre les informations suivantes pour tous les champs de la requête :
-
-
Field-level informations de traçage
-
Les request/response fonctions générées qui ont été résolues pour chaque champ
-
Avantages de la surveillance
Vous pouvez utiliser la journalisation et les métriques pour identifier, dépanner et optimiser vos requêtes GraphQL. Par exemple, cela vous aidera à déboguer les problèmes de latence à l'aide des informations de suivi consignées pour chaque champ de la requête. Pour illustrer cela, supposons que vous utilisiez un ou plusieurs résolveurs imbriqués dans une requête GraphQL. Un exemple d'opération de champ dans CloudWatch Logs peut ressembler à ce qui suit :
{ "path": [ "singlePost", "authors", 0, "name" ], "parentType": "Post", "returnType": "String!", "fieldName": "name", "startOffset": 416563350, "duration": 11247 }
Cela peut correspondre à un schéma GraphQL, comme illustré ci-dessous :
type Post { id: ID! name: String! authors: [Author] } type Author { id: ID! name: String! } type Query { singlePost(id:ID!): Post }
Dans les résultats du journal précédent, le chemin affiche un seul élément de vos données renvoyées par l'exécution d'une requête nomméesinglePost(). Dans cet exemple, il représente le champ de nom au premier index (0). Le StartOffset donne un décalage à partir du début de l'opération de requête GraphQL. La durée est le temps total nécessaire pour résoudre le champ. Ces valeurs peuvent être utiles afin de déterminer la raison pour laquelle les données d'une source de données spécifique sont exécutées plus lentement que prévu, ou si un champ spécifique ralentit l'ensemble de la requête. Par exemple, vous pouvez choisir d'augmenter le débit provisionné pour une table Amazon DynamoDB ou de supprimer un champ spécifique d'une requête qui entraîne un mauvais fonctionnement de l'opération globale.
À compter du 8 mai 2019, AWS AppSync génère les événements de journal au format JSON entièrement structuré. Cela peut vous aider à utiliser des services d'analyse de CloudWatch journaux tels que Logs Insights et Amazon OpenSearch Service pour comprendre les performances de vos requêtes GraphQL et les caractéristiques d'utilisation de vos champs de schéma. Par exemple, vous pouvez identifier facilement les résolveurs rencontrant des latences importantes et qui pourraient être la cause profonde d'un problème de performances. Vous pouvez également identifier les champs utilisés le plus et le moins fréquemment dans votre schéma et évaluer l'impact des dépréciations des champs GraphQL.
Détection des conflits et journalisation de la synchronisation
Si la journalisation dans les CloudWatch journaux d'une AWS AppSync API est configurée avec le niveau de journalisation du résolveur de champs défini sur Tout, AWS AppSync elle transmet des informations de détection et de résolution des conflits au groupe de journaux. Cela fournit un aperçu précis de la manière dont l' AWS AppSync API a réagi à un conflit. Pour vous aider à interpréter la réponse, les informations suivantes sont fournies dans les journaux :
-
conflictType -
Détermine si un conflit s'est produit en raison d'une incompatibilité de version ou de la condition fournie par le client.
-
conflictHandlerConfigured -
État le gestionnaire de conflits configuré sur le résolveur au moment de la demande.
-
message -
Fournit des informations sur la façon dont le conflit a été détecté et résolu.
-
syncAttempt -
Nombre d'essais du serveur pour synchroniser les données avant de rejeter la demande.
-
data -
Si le gestionnaire de conflits est configuré
Automerge, ce champ est renseigné pour indiquer la décisionAutomergeprise pour chaque champ. Les actions proposées peuvent être les suivantes :-
REJETÉ - Quand
Automergerejette la valeur du champ entrant au profit de la valeur du serveur. -
AJOUTÉ - Lorsque le champ entrant est
Automergeajouté en raison de l'absence de valeur préexistante sur le serveur. -
ANNEXÉ - Quand
Automergeajoute les valeurs entrantes aux valeurs de la liste qui existe sur le serveur. -
AutomergeMERGED - Quand fusionne les valeurs entrantes avec les valeurs de l'ensemble existant sur le serveur.
-
Utiliser le nombre de jetons pour optimiser vos demandes
Les requêtes qui consomment moins ou moins de 1 500 de mémoire et KB-seconds de temps de processeur virtuel se voient attribuer un jeton. Les requêtes dont la consommation de ressources est supérieure à 1 500 KB-seconds reçoivent des jetons supplémentaires. Par exemple, si une demande en consomme 3 350 KB-seconds, AWS AppSync attribue trois jetons (arrondis à la valeur entière supérieure) à la demande. Par défaut, AWS AppSync alloue un maximum de 5 000 ou 10 000 jetons de demande par seconde aux API de votre compte, en fonction de la AWS région dans laquelle il est déployé. Si vos API utilisent chacune en moyenne deux jetons par seconde, vous serez limité à 2 500 ou 5 000 requêtes par seconde, respectivement. Si vous avez besoin de plus de jetons par seconde que la quantité allouée, vous pouvez soumettre une demande pour augmenter le quota par défaut pour le taux de jetons demandés. Pour plus d'informations, consultez les sections AWS AppSync Points de terminaison et quotas dans le Références générales AWS guide et Demande d'augmentation de quota dans le Guide de l'utilisateur des quotas de service.
Un nombre élevé de jetons par demande peut indiquer qu'il est possible d'optimiser vos demandes et d'améliorer les performances de votre API. Les facteurs qui peuvent augmenter le nombre de jetons par demande sont notamment les suivants :
-
La taille et la complexité de votre schéma GraphQL.
-
La complexité des modèles de mappage de demandes et de réponses.
-
Le nombre d'appels au résolveur par demande.
-
La quantité de données renvoyées par les résolveurs.
-
Latence des sources de données en aval.
-
Conceptions de schémas et de requêtes qui nécessitent des appels de sources de données successifs (par opposition à des appels parallèles ou par lots).
-
Configuration de la journalisation, en particulier le contenu détaillé et au niveau des champs.
Note
Outre les AWS AppSync métriques et les journaux, les clients peuvent accéder au nombre de jetons consommés dans une demande via l'en-tête de réponsex-amzn-appsync-TokensConsumed.
Limites de taille des journaux
Par défaut, si la journalisation a été activée, jusqu'à 1 Mo de journaux par demande AWS AppSync sera envoyé. Les journaux dépassant cette taille seront tronqués. Pour réduire la taille des journaux, choisissez le niveau de ERROR journalisation pour les journaux au niveau des champs et désactivez la VERBOSE journalisation, ou désactivez complètement les journaux au niveau des champs si cela n'est pas nécessaire. Comme alternative au niveau de ALL journalisation, vous pouvez utiliser Enhanced Metrics pour obtenir des métriques sur des résolveurs, des sources de données ou des opérations GraphQL spécifiques, ou utiliser les utilitaires de journalisation fournis par AppSync pour enregistrer uniquement les informations nécessaires.
Référence du type de journal
RequestSummary
-
requestId : identifiant unique de la demande.
-
graphQLAPIId : ID de l'API GraphQL effectuant la demande.
-
StatusCode : réponse au code d'état HTTP.
-
latence : End-to-end latence de la requête, en nanosecondes, sous forme d'entier.
{ "logType": "RequestSummary", "requestId": "dbe87af3-c114-4b32-ae79-8af11f3f96f1", "graphQLAPIId": "pmo28inf75eepg63qxq4ekoeg4", "statusCode": 200, "latency": 242000000 }
ExecutionSummary
-
requestId : identifiant unique de la demande.
-
graphQLAPIId : ID de l'API GraphQL effectuant la demande.
-
StartTime : horodatage de début du traitement GraphQL de la requête, au format RFC 3339.
-
EndTime : horodatage de fin du traitement GraphQL de la demande, au format RFC 3339.
-
durée : temps de traitement total écoulé par GraphQL, en nanosecondes, sous forme d'entier.
-
version : version du schéma du ExecutionSummary.
-
- parsing :
-
-
StartOffset : décalage de début pour l'analyse, en nanosecondes, par rapport à l'invocation, sous forme d'entier.
-
duration : temps consacré à l'analyse, en nanosecondes, indiqué en tant que nombre entier.
-
-
- validation :
-
-
StartOffset : décalage de début de validation, en nanosecondes, par rapport à l'invocation, sous forme d'entier.
-
duration : temps consacré à la validation, en nanosecondes, indiqué en tant que nombre entier.
-
{ "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" }
Tracing
-
requestId : identifiant unique de la demande.
-
graphQLAPIId : ID de l'API GraphQL effectuant la demande.
-
StartOffset : décalage de départ pour la résolution du champ, en nanosecondes, par rapport à l'invocation, sous forme d'entier.
-
duration : temps consacré à la résolution du champ, en nanosecondes, indiqué en tant que nombre entier.
-
fieldName : nom du champ en cours de résolution.
-
parentType : type de parent du champ en cours de résolution.
-
returnType : type de retour du champ en cours de résolution.
-
path : liste des segments de chemin, commençant à la racine de la réponse et se terminant par le champ en cours de résolution.
-
resolverArn : ARN du résolveur utilisé pour la résolution des champs. Peut ne pas être présent sur les champs imbriqués.
{ "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" }
Analyser vos journaux avec CloudWatch Logs Insights
Voici des exemples de requêtes que vous pouvez exécuter pour obtenir des informations exploitables sur les performances et l'état de vos opérations GraphQL. Ces exemples sont disponibles sous forme d'exemples de requêtes dans la console CloudWatch Logs Insights. Dans la CloudWatch console
La requête suivante renvoie les 10 principales requêtes GraphQL avec le maximum de jetons consommés :
filter @message like "Tokens Consumed" | parse @message "* Tokens Consumed: *" as requestId, tokens | sort tokens desc | display requestId, tokens | limit 10
La requête suivante renvoie les 10 principaux résolveurs rencontrant une latence maximale :
fields resolverArn, duration | filter logType = "Tracing" | limit 10 | sort duration desc
La requête suivante renvoie les résolveurs les plus fréquemment appelés :
fields ispresent(resolverArn) as isRes | stats count() as invocationCount by resolverArn | filter isRes and logType = "Tracing" | limit 10 | sort invocationCount desc
La requête suivante renvoie les résolveurs rencontrant le plus grand nombre d'erreurs dans les modèles de mappage :
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 requête suivante renvoie les statistiques de latence du résolveur :
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 requête suivante renvoie les statistiques de latence du champ :
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
Les résultats des requêtes CloudWatch Logs Insights peuvent être exportés vers des CloudWatch tableaux de bord.
Analysez vos journaux avec OpenSearch Service
Vous pouvez rechercher, analyser et visualiser vos AWS AppSync journaux avec Amazon OpenSearch Service afin d'identifier les goulots d'étranglement en matière de performances et les causes profondes des problèmes opérationnels. Vous pouvez identifier les résolveurs rencontrant la latence maximale et le maximum d'erreurs. En outre, vous pouvez utiliser les OpenSearch tableaux de bord pour créer des tableaux de bord dotés de visualisations puissantes. OpenSearch Dashboards est un outil de visualisation et d'exploration de données open source disponible dans OpenSearch Service. À l'aide de OpenSearch tableaux de bord, vous pouvez surveiller en permanence les performances et l'état de vos opérations GraphQL. Par exemple, vous pouvez créer des tableaux de bord pour visualiser la latence P90 de vos requêtes GraphQL et explorer les latences P90 de chaque résolveur.
Lorsque vous utilisez OpenSearch Service, utilisez « cwl* » comme modèle de filtre pour rechercher OpenSearch des index. OpenSearch Le service indexe les journaux diffusés à partir de CloudWatch Logs avec le préfixe « cwl- ». Pour différencier les journaux d' AWS AppSync API CloudWatch des autres journaux envoyés au OpenSearch Service, nous vous recommandons d'ajouter une expression de filtre supplémentaire graphQLAPIID.keyword= à votre recherche.YourGraphQLAPIID
Migration du format de journal
Les événements de journal AWS AppSync générés sont principalement au format JSON entièrement structuré. Cependant, certains messages de diagnostic et de traitement intermédiaire peuvent être émis dans un format non structuré. Si vous devez migrer des journaux non structurés vers un JSON entièrement structuré, vous pouvez utiliser un script disponible dans l'GitHub exemple
Vous pouvez également utiliser des filtres https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatchLogsConcepts.html métriques CloudWatch pour transformer les données du journal en CloudWatch mesures numériques, afin de pouvoir les représenter graphiquement ou définir une alarme sur celles-ci.