View a markdown version of this page

Utilizzo CloudWatch per monitorare e registrare i dati dell'API GraphQL - AWS AppSync GraphQL

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo CloudWatch per monitorare e registrare i dati dell'API GraphQL

Puoi registrare ed eseguire il debug della tua API GraphQL utilizzando CloudWatch metriche e log. CloudWatch Questi strumenti consentono agli sviluppatori di monitorare le prestazioni, risolvere i problemi e ottimizzare efficacemente le operazioni GraphQL.

CloudWatch metrics è uno strumento che fornisce un'ampia gamma di metriche per monitorare le prestazioni e l'utilizzo delle API. Queste metriche si dividono in due categorie principali:

  1. Metriche API generali: includono 4XXError e 5XXError consentono di tracciare gli errori di client e server, misurare Latency i tempi di risposta, monitorare Requests le chiamate API totali e tracciare TokensConsumed l'utilizzo delle risorse.

  2. Real-time Metriche di sottoscrizione: queste metriche si concentrano sulle WebSocket connessioni e sulle attività di abbonamento. Includono metriche per le richieste di connessione, le connessioni riuscite, le registrazioni degli abbonamenti, la pubblicazione di messaggi e le connessioni e gli abbonamenti attivi.

La guida introduce anche le metriche avanzate, che offrono dati più granulari sulle prestazioni del resolver, sulle interazioni con le sorgenti di dati e sulle singole operazioni GraphQL. Queste metriche forniscono informazioni più approfondite ma comportano costi aggiuntivi.

CloudWatch Logs è uno strumento che abilita funzionalità di registrazione per le API GraphQL. I log possono essere impostati su due livelli dell'API:

  1. Request-level Log: acquisiscono le informazioni complessive sulle richieste, tra cui intestazioni HTTP, query GraphQL, riepiloghi delle operazioni e registrazioni degli abbonamenti.

  2. Field-level Log: forniscono informazioni dettagliate sulle risoluzioni dei singoli campi, comprese le mappature di richieste e risposte e le informazioni di tracciamento per ciascun campo.

È possibile configurare la registrazione, interpretare le voci di registro e utilizzare i dati di registro per la risoluzione dei problemi e l'ottimizzazione. AWS AppSync fornisce vari tipi di log che rivelano i dati di esecuzione, analisi, convalida e risoluzione del campo della query.

Installazione e configurazione

Per attivare la registrazione automatica su un'API GraphQL, usa la console. AWS AppSync

  1. Accedi Console di gestione AWS e apri la AppSync console.

  2. Nella pagina delle API, scegli il nome di un'API GraphQL.

  3. Nella home page dell'API, nel riquadro di navigazione, scegli Impostazioni.

  4. Sotto Logging (Registrazione) segui la procedura riportata di seguito:

    1. Attiva Abilita registri.

    2. Per una registrazione dettagliata a livello di richiesta, seleziona la casella di controllo in Includi contenuti dettagliati. (opzionale)

    3. In Field resolver log level, scegli il livello di registrazione a livello di campo preferito (None, Error, Info , Debug o All). (opzionale)

    4. In Crea o usa un ruolo esistente, scegli Nuovo ruolo per crearne uno nuovo AWS Identity and Access Management (IAM) in cui AWS AppSync scrivere i log CloudWatch. Oppure, scegli Ruolo esistente per selezionare l'Amazon Resource Name (ARN) di un ruolo IAM esistente nel tuo AWS account.

  5. Selezionare Salva.

Configurazione manuale del ruolo IAM

Se scegli di utilizzare un ruolo IAM esistente, il ruolo deve concedere AWS AppSync le autorizzazioni richieste per scrivere CloudWatch i log. Per configurarlo manualmente, è necessario fornire un ruolo di servizio ARN in modo che AWS AppSync possa assumere il ruolo durante la scrittura dei log.

Nella console IAM, crea una nuova policy con il nome con AWSAppSyncPushToCloudWatchLogsPolicy la seguente definizione:

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

Quindi, crea un nuovo ruolo con il nome AWSAppSyncPushToCloudWatchLogsRole e allega la policy appena creata al ruolo. Modifica la relazione di fiducia per questo ruolo come segue:

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

Copia il ruolo ARN e utilizzalo per configurare la registrazione per un'API AWS AppSync GraphQL.

CloudWatch metriche

Puoi utilizzare CloudWatch le metriche per monitorare e fornire avvisi su eventi specifici che possono generare codici di stato HTTP o latenza. Vengono emesse le seguenti metriche:

4XXError

Errori derivanti da richieste non valide a causa di una configurazione errata del client. In genere, questi errori si verificano ovunque al di fuori dell'elaborazione GraphQL. Ad esempio, questi errori possono verificarsi quando la richiesta include un payload JSON errato o una query errata, quando il servizio viene limitato o quando le impostazioni di autorizzazione non sono configurate correttamente.

Unità: numero. Viene usata la statistica Sum (Somma) per ottenere il numero totale di occorrenze di questi errori.

5XXError

Errori riscontrati durante l'esecuzione di una query GraphQL. Ad esempio, ciò può verificarsi quando si richiama una query per uno schema vuoto o errato. Può verificarsi anche quando l'ID o la AWS regione del pool di utenti di Amazon Cognito non sono validi. In alternativa, ciò potrebbe verificarsi anche se si AWS AppSync verifica un problema durante l'elaborazione di una richiesta.

Unità: numero. Viene usata la statistica Sum (Somma) per ottenere il numero totale di occorrenze di questi errori.

Latency

L'intervallo di tempo che intercorre tra la AWS AppSync ricezione di una richiesta da un cliente e il momento in cui restituisce una risposta al cliente. Ciò non include la latenza di rete riscontrata per la ricezione di una risposta nei dispositivi finali.

Unità: millisecondi. Viene usata la statistica Average (Media) per valutare le latenze previste.

Requests

Il numero di richieste (domande + mutazioni) elaborate da tutte le API del tuo account, per regione.

Unità: numero. Il numero di tutte le richieste elaborate in una particolare regione.

TokensConsumed

I token vengono assegnati in Requests base alla quantità di risorse (tempo di elaborazione e memoria utilizzata) consumate. Request Di solito, ognuno Request consuma un token. Tuttavia, a Request chi consuma grandi quantità di risorse vengono assegnati token aggiuntivi, se necessario.

Unità: numero. Il numero di token assegnati alle richieste elaborate in una particolare regione.

NetworkBandwidthOutAllowanceExceeded
Nota

Nella AWS AppSync console, nella pagina delle impostazioni della cache, l'opzione Cache Health Metrics consente di abilitare questa metrica di integrità relativa alla cache.

I pacchetti di rete sono diminuiti perché il throughput ha superato il limite di larghezza di banda aggregata. Ciò è utile per diagnosticare i colli di bottiglia in una configurazione della cache. I dati vengono registrati per una particolare API specificando il valore nella metrica. API_Id appsyncCacheNetworkBandwidthOutAllowanceExceeded

Unità: numero. Il numero di pacchetti eliminati dopo aver superato il limite di larghezza di banda per un'API specificato dall'ID.

EngineCPUUtilization
Nota

Nella AWS AppSync console, nella pagina delle impostazioni della cache, l'opzione Cache Health Metrics consente di abilitare questa metrica di integrità relativa alla cache.

L'utilizzo della CPU (percentuale) assegnato al processo Redis OSS. Ciò è utile per diagnosticare i colli di bottiglia in una configurazione della cache. I dati vengono registrati per una particolare API specificando il valore nella metrica. API_Id appsyncCacheEngineCPUUtilization

Unità: percentuale. La percentuale di CPU attualmente utilizzata dal processo Redis OSS per un'API specificata dall'ID.

Real-time abbonamenti

Tutti i parametri vengono emessi in un'unica dimensione: GraphQLAPIId. Ciò significa che tutti i parametri sono accoppiati con ID API GraphQL. Le seguenti metriche sono relative agli abbonamenti GraphQL over pure: WebSockets

Nota

Questa dimensione si applica solo alle API AWS AppSync GraphQL. AWS AppSync offre anche le API Event, un tipo di API separato le cui metriche vengono emesse in una dimensione diversa (EventAPIID). Per ulteriori informazioni, consulta le metriche. CloudWatch

ConnectRequests

Il numero di richieste di WebSocket connessione effettuate a AWS AppSync, inclusi i tentativi riusciti e non riusciti.

Unità: numero. Usa la statistica Sum per ottenere il numero totale di richieste di connessione.

ConnectSuccess

Il numero di WebSocket connessioni riuscite a. AWS AppSync È possibile avere connessioni senza sottoscrizioni.

Unità: numero. Viene usata la statistica Sum (Somma) per ottenere il numero totale di occorrenze di connessioni riuscite.

ConnectClientError

Il numero di WebSocket connessioni rifiutate a AWS AppSync causa di errori sul lato client. Ciò potrebbe implicare che il servizio sia limitato o che le impostazioni di autorizzazione non siano configurate correttamente.

Unità: numero. Viene usata la statistica Sum (Somma) per ottenere il numero totale di occorrenze di errori di connessione lato client.

ConnectServerError

Il numero di errori originati durante l'elaborazione delle connessioni. AWS AppSync Questo accade in genere quando si verifica un problema imprevisto sul lato server.

Unità: numero. Viene usata la statistica Sum (Somma) per ottenere il numero totale di occorrenze di errori di connessione lato server.

DisconnectSuccess

Il numero di WebSocket disconnessioni riuscite da. AWS AppSync

Unità: numero. Viene usata la statistica Sum (Somma) per ottenere il numero totale di occorrenze di disconnessioni riuscite.

DisconnectClientError

Il numero di errori del client originati AWS AppSync durante la WebSocket disconnessione delle connessioni.

Unità: numero. Viene usata la statistica Sum (Somma) per ottenere il numero totale di occorrenze di errori di disconnessione.

DisconnectServerError

Il numero di errori del server originati AWS AppSync durante la disconnessione delle connessioni. WebSocket

Unità: numero. Viene usata la statistica Sum (Somma) per ottenere il numero totale di occorrenze di errori di disconnessione.

SubscribeSuccess

Il numero di abbonamenti registrati con successo tramite. AWS AppSync WebSocket È possibile avere connessioni senza abbonamenti, ma non è possibile avere abbonamenti senza connessioni.

Unità: numero. Viene usata la statistica Sum (Somma) per ottenere il numero totale di occorrenze di sottoscrizioni riuscite.

SubscribeClientError

Il numero di abbonamenti rifiutati a AWS AppSync causa di errori sul lato client. Ciò può verificarsi quando un payload JSON non è corretto, il servizio è limitato o le impostazioni di autorizzazione non sono configurate correttamente.

Unità: numero. Viene usata la statistica Sum (Somma) per ottenere il numero totale di occorrenze di errori di sottoscrizione lato client.

SubscribeServerError

Il numero di errori originati durante l'elaborazione delle sottoscrizioni. AWS AppSync Questo accade in genere quando si verifica un problema imprevisto sul lato server.

Unità: numero. Viene usata la statistica Sum (Somma) per ottenere il numero totale di occorrenze di errori di sottoscrizione lato server.

UnsubscribeSuccess

Il numero di richieste di annullamento dell'iscrizione che sono state elaborate correttamente.

Unità: numero. Utilizza la statistica Sum per ottenere il numero totale di occorrenze delle richieste di annullamento dell'iscrizione riuscite.

UnsubscribeClientError

Il numero di richieste di annullamento dell'iscrizione rifiutate a AWS AppSync causa di errori sul lato client.

Unità: numero. Usa la statistica Sum per ottenere il numero totale di occorrenze degli errori relativi alle richieste di annullamento dell'iscrizione sul lato client.

UnsubscribeServerError

Il numero di errori originati durante l'elaborazione delle richieste di annullamento dell'iscrizione. AWS AppSync Questo accade in genere quando si verifica un problema imprevisto sul lato server.

Unità: numero. Utilizza la statistica Sum per ottenere le occorrenze totali degli errori di richiesta di annullamento dell'iscrizione sul lato server.

PublishDataMessageSuccess

Numero di messaggi di evento di sottoscrizione pubblicati.

Unità: numero. Viene usata la statistica Sum (Somma) per ottenere il numero totale di messaggi di eventi di sottoscrizione pubblicati.

PublishDataMessageClientError

Numero di messaggi di evento di sottoscrizione che non sono stati pubblicati a causa di errori sul lato client.

Unit: Conta. Viene usata la statistica Sum (Somma) per ottenere il numero totale di occorrenze di errori di eventi di pubblicazione della sottoscrizione lato client.

PublishDataMessageServerError

Il numero di errori originati AWS AppSync durante la pubblicazione dei messaggi relativi agli eventi di sottoscrizione. Questo accade in genere quando si verifica un problema imprevisto sul lato server.

Unità: numero. Viene usata la statistica Sum (Somma) per ottenere il numero totale di occorrenze di errori di eventi di pubblicazione della sottoscrizione lato server.

PublishDataMessageSize

Dimensione dei messaggi di evento di sottoscrizione pubblicati.

Unità: byte.

ActiveConnections

Il numero di WebSocket connessioni simultanee dai client a AWS AppSync in 1 minuto.

Unità: numero. Viene usata la statistica Sum (Somma) per ottenere il numero totale di connessioni aperte.

ActiveSubscriptions

Numero di sottoscrizioni simultanee dai client in 1 minuto.

Unità: numero. Viene usata la statistica Sum (Somma) per ottenere il numero totale di sottoscrizioni attive.

ConnectionDuration

La quantità di tempo in cui la connessione rimane aperta.

Unità: millisecondi. Viene usata la statistica Average (Media) per valutare la durata della connessione.

OutboundMessages

Il numero di messaggi a pagamento pubblicati correttamente. Un messaggio misurato equivale a 5 kB di dati recapitati.

Unità: numero. Utilizza la statistica Sum per ottenere il numero totale di messaggi a consumo pubblicati correttamente.

InboundMessageSuccess

Il numero di messaggi in entrata elaborati correttamente. Ogni tipo di abbonamento richiamato da una mutazione genera un messaggio in entrata.

Unità: numero. Usa la statistica Sum per ottenere il numero totale di messaggi in entrata elaborati correttamente.

InboundMessageError

Il numero di messaggi in entrata che non sono stati elaborati a causa di richieste API non valide, ad esempio il superamento del limite di dimensione del payload dell'abbonamento di 240 kB.

Unità: numero. Usa la statistica Sum per ottenere il numero totale di messaggi in entrata con errori di elaborazione. API-related

InboundMessageFailure

Il numero di messaggi in entrata la cui elaborazione non è riuscita a causa di errori di. AWS AppSync

Unità: numero. Utilizza la statistica Sum per ottenere il numero totale di messaggi in entrata con errori di elaborazione AWS AppSync correlati.

InboundMessageDelayed

Il numero di messaggi in entrata ritardati. I messaggi in entrata possono essere ritardati quando viene superata la quota di frequenza dei messaggi in entrata o in uscita.

Unità: numero. Usa la statistica Sum per ottenere il numero totale di messaggi in entrata ritardati.

InboundMessageDropped

Il numero di messaggi in entrata eliminati. I messaggi in entrata possono essere eliminati quando viene superata la quota di frequenza dei messaggi in entrata o in uscita.

Unità: numero. Usa la statistica Sum per ottenere il numero totale di messaggi in entrata eliminati.

InvalidationSuccess

Il numero di sottoscrizioni invalidate (annullate) con successo da una mutazione con. $extensions.invalidateSubscriptions()

Unità: numero. Usa la statistica Sum per recuperare il numero totale di abbonamenti che sono stati annullati con successo.

InvalidationRequestSuccess

Il numero di richieste di invalidazione elaborate correttamente.

Unità: numero. Utilizza la statistica Sum per ottenere il numero totale di richieste di invalidazione elaborate con successo.

InvalidationRequestError

Il numero di richieste di invalidazione che non sono state elaborate a causa di richieste API non valide.

Unità: numero. Utilizza la statistica Sum per ottenere il numero totale di richieste di invalidazione con errori di elaborazione. API-related

InvalidationRequestFailure

Il numero di richieste di invalidazione la cui elaborazione non è riuscita a causa di errori di. AWS AppSync

Unità: numero. Utilizza la statistica Sum per ottenere il numero totale di richieste di invalidazione con errori di elaborazione correlati. AWS AppSync

InvalidationRequestDropped

Il numero di richieste di invalidazione è diminuito quando è stata superata la quota di richieste di invalidazione.

Unità: numero. Utilizza la statistica Sum per ottenere il numero totale di richieste di invalidazione respinte.

Confronto tra messaggi in entrata e in uscita

Quando viene eseguita una mutazione, vengono richiamati i campi di sottoscrizione con la direttiva @aws_subscribe per quella mutazione. Ogni chiamata di sottoscrizione genera un messaggio in entrata. Ad esempio, se due campi di sottoscrizione specificano la stessa mutazione in @aws_subscribe, quando viene chiamata tale mutazione vengono generati due messaggi in entrata.

Un messaggio in uscita equivale a 5 kB di dati consegnati ai client. WebSocket Ad esempio, l'invio di 15 kB di dati a 10 client comporta 30 messaggi in uscita (15 kB * 10 client/5 kB per messaggio = 30 messaggi).

È possibile richiedere aumenti di quota per i messaggi in entrata o in uscita. Per ulteriori informazioni, consulta AWS AppSync endpoint e quote nella Guida di riferimento AWS generale e le istruzioni per richiedere un aumento delle quote nella Guida per l'utente di Service Quotas.

Metriche migliorate

Le metriche avanzate emettono dati granulari sull'utilizzo e le prestazioni delle API, come il conteggio delle AWS AppSync richieste e degli errori, la latenza e la cache. hits/misses Tutti i dati delle metriche avanzate vengono inviati al tuo CloudWatch account e puoi configurare i tipi di dati che verranno inviati.

Nota

Quando si utilizzano metriche avanzate, vengono applicati costi aggiuntivi. Per ulteriori informazioni, consulta il monitoraggio dettagliato dei livelli di prezzo nella pagina dei prezzi di Amazon CloudWatch.

Queste metriche sono disponibili in varie pagine delle impostazioni della AWS AppSync console. Nella pagina delle impostazioni API, la sezione Enhanced Metrics consente di abilitare o disabilitare i seguenti elementi:

Comportamento delle metriche del resolver: queste opzioni controllano il modo in cui vengono raccolte le metriche aggiuntive per i resolver. Puoi scegliere di abilitare le metriche complete del resolver delle richieste (metriche abilitate per tutti i resolver nelle richieste) o le metriche per resolver (metriche abilitate solo per i resolver in cui la configurazione è impostata su Attivata). Sono disponibili le seguenti opzioni:

GraphQL errors per resolver (GraphQLError)

Il numero di errori GraphQL che si sono verificati per resolver.

Dimensione metrica:, API_Id Resolver

Unità: numero.

Requests per resolver (Request)

Il numero di chiamate avvenute durante una richiesta. Questo viene registrato per ogni resolver.

Dimensione metrica:, API_Id Resolver

Unità: numero.

Latency per resolver (Latency)

Il tempo necessario per completare una chiamata al resolver. La latenza viene misurata in millisecondi e registrata per ogni resolver.

Dimensione API_Id metrica:, Resolver

Unità: millisecondi.

Cache hits per resolver (CacheHit)

Il numero di accessi alla cache durante una richiesta. Verrà emesso solo se viene utilizzata una cache. Gli hit della cache vengono registrati per resolver.

Dimensione metrica:, API_Id Resolver

Unità: numero.

Cache misses per resolver (CacheMiss)

Il numero di cache mancanti durante una richiesta. Verrà emesso solo se viene utilizzata una cache. Gli errori nella cache vengono registrati per resolver.

Dimensione metrica:, API_Id Resolver

Unità: numero.

Comportamento delle metriche delle origini dati: queste opzioni controllano il modo in cui vengono raccolte le metriche aggiuntive per le origini dati. Puoi scegliere di abilitare le metriche delle origini dati complete delle richieste (metriche abilitate per tutte le origini dati nelle richieste) o le metriche per origine dati (le metriche sono abilitate solo per le origini dati in cui la configurazione è impostata su Abilitata). Sono disponibili le seguenti opzioni:

Requests per data source (Request)

Il numero di richiami che si sono verificati durante una richiesta. Le richieste vengono registrate in base alla fonte di dati. Se le richieste complete sono abilitate, ogni origine dati avrà una propria immissione. CloudWatch

Dimensione metrica:API_Id, Datasource

Unità: numero.

Latency per data source (Latency)

Il tempo necessario per completare l'invocazione di un'origine dati. La latenza viene registrata in base alla fonte di dati.

Dimensione metrica:, API_Id Datasource

Unità: millisecondi.

Errors per data source (GraphQLError)

Il numero di errori che si sono verificati durante l'invocazione di un'origine dati.

Dimensione metrica:, API_Id Datasource

Unità: numero.

Metriche operative: abilita le metriche a livello operativo GraphQL.

Requests per operation (Request)

Il numero di volte in cui è stata chiamata un'operazione GraphQL specificata.

Dimensione metrica:, API_Id Operation

Unità: numero.

GraphQL errors per operation (GraphQLError)

Il numero di errori GraphQL che si sono verificati durante un'operazione GraphQL specificata.

Dimensione metrica:, API_Id Operation

Unità: numero.

CloudWatch registri

È possibile configurare due tipi di logging per qualsiasi API GraphQL nuova o esistente: a livello di richiesta e a livello di campo.

Request-level registri

Quando la registrazione a livello di richiesta (include contenuto dettagliato) è configurata, vengono registrate le seguenti informazioni:

  • Il numero di token consumati

  • Intestazioni HTTP di richiesta e risposta

  • La query GraphQL in esecuzione nella richiesta

  • Il riepilogo generale dell'operazione

  • Sottoscrizioni GraphQL nuove ed esistenti registrate

Field-level registri

Quando è configurata la registrazione a livello di campo, vengono registrate le seguenti informazioni:

  • Mappatura della richiesta generata con origine e argomenti per ogni campo

  • La mappatura delle risposte trasformata per ogni campo, che include i dati risultanti dalla risoluzione di quel campo

  • Informazioni di traccia per ogni campo

Se attivi la registrazione, AWS AppSync gestisce i log. CloudWatch Il processo include la creazione di gruppi e flussi di log e la segnalazione di tali log ai flussi di log.

Quando attivi la registrazione su un'API GraphQL ed effettui richieste, AWS AppSync crea un gruppo di log e log stream sotto il gruppo di log. Al gruppo di log viene assegnato un nome nel formato /aws/appsync/apis/{graphql_api_id}. In ogni gruppo di log, i log vengono ulteriormente suddivisi in flussi di log. Questi sono ordinati in base al valore Last Event Time (Ora ultimo evento) quando vengono segnalati i dati registrati.

Ogni evento di registro è contrassegnato con il valore x-amzn- di quella richiesta. RequestId Questo ti aiuta a filtrare gli eventi di registro CloudWatch per ottenere tutte le informazioni registrate su quella richiesta. Puoi ottenerlo RequestId dalle intestazioni di risposta di ogni richiesta AWS AppSync GraphQL.

Il logging a livello di campo è configurato con i livelli di log seguenti:

  • Nessuno: non viene acquisito alcun registro a livello di campo.

  • Errore: registra le seguenti informazioni solo per i campi che rientrano nella categoria di errore:
    • Sezione dell'errore nella risposta del server

    • Field-level errori

    • Le request/response funzioni generate che sono state risolte per i campi di errore

  • Informazioni: registra le seguenti informazioni solo per i campi che si trovano nelle categorie di informazioni ed errori:
    • Info-level messaggi

    • I messaggi utente inviati tramite $util.log.info e console.log

    • Field-level i registri di tracciamento e mappatura non vengono visualizzati.

    • Se la registrazione a livello di campo è impostata su INFO o su un valore superiore con contenuto dettagliato incluso, AWS AppSync aggiunge i messaggi di registrazione del modello di mappatura trasformato. Conterrà tutte le informazioni aggiunte al modello di mappatura trasformato o l'output del JavaScript codice eseguito dal resolver o dalla funzione e non deve essere utilizzato se si prevede di inviare informazioni sensibili, come password o intestazioni di autorizzazione, a fonti di dati a valle e non si desidera che tali informazioni vengano inserite nei log.

  • Debug: registra le seguenti informazioni solo per i campi che si trovano nelle categorie debug, info ed error:
    • Debug-level messaggi

    • I messaggi utente inviati tramite $util.log.info$util.log.debug,console.log, e console.debug

    • Field-level i registri di tracciamento e mappatura non vengono visualizzati.

  • Tutti: registra le seguenti informazioni per tutti i campi della query:
    • Field-level informazioni di tracciamento

    • Le request/response funzioni generate che sono state risolte per ogni campo

Vantaggi del monitoraggio

Puoi usare il logging e i parametri per identificare e ottimizzare le query GraphQL, oltre che per risolvere i relativi problemi. Puoi ad esempio eseguire il debug dei problemi di latenza usando le informazioni di traccia registrate per ogni campo nella query. Per dimostrare questo concetto, supponiamo di usare uno o più resolver annidati in una query GraphQL. Un esempio di operazione sul campo in CloudWatch Logs potrebbe essere simile alla seguente:

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

Ciò potrebbe corrispondere a uno schema GraphQL analogo a quanto segue:

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

Nei risultati del registro precedente, path mostra un singolo elemento dei dati restituito dall'esecuzione di una query denominatasinglePost(). In questo esempio, rappresenta il campo del nome al primo indice (0). Lo startOffset fornisce un offset dall'inizio dell'operazione di interrogazione GraphQL. La durata è il tempo totale necessario per risolvere il campo. Questi valori possono essere utili per risolvere un problema a causa di cui i dati provenienti da un'origine dati specifica vengono eseguiti più lentamente del previsto oppure un campo specifico rallenta l'intera query. Ad esempio, potresti scegliere di aumentare il throughput assegnato per una tabella Amazon DynamoDB o rimuovere un campo specifico da una query che causa il cattivo rendimento dell'operazione complessiva.

A partire dall'8 maggio 2019, AWS AppSync genera eventi di registro come JSON completamente strutturato. Questo può aiutarti a utilizzare servizi di analisi dei CloudWatch log come Logs Insights e Amazon OpenSearch Service per comprendere le prestazioni delle tue richieste GraphQL e le caratteristiche di utilizzo dei campi dello schema. Ad esempio, è possibile identificare in modo semplice i resolver con latenze di grandi dimensioni, possibile causa principale di un problema prestazionale. Inoltre, ora è possibile identificare i campi utilizzati più e meno frequentemente all’interno dello schema e valutare l'impatto di definire come obsoleti i campi GraphQL.

Rilevamento dei conflitti e registrazione di sincronizzazione

Se un' AWS AppSync API ha la registrazione ai CloudWatch log configurata con il livello di log del Field resolver impostato su All, invia AWS AppSync le informazioni di rilevamento e risoluzione dei conflitti al gruppo di log. Ciò fornisce informazioni dettagliate su come l' AWS AppSync API ha risposto a un conflitto. Per aiutarvi a interpretare la risposta, nei log vengono fornite le seguenti informazioni:

conflictType

Indica nei dettagli se si è verificato un conflitto a causa di una mancata corrispondenza della versione o della condizione fornita dal cliente.

conflictHandlerConfigured

Indica il gestore di conflitti configurato nel resolver al momento della richiesta.

message

Fornisce informazioni su come il conflitto è stato rilevato e risolto.

syncAttempt

Il numero di tentativi che il server ha effettuato per sincronizzare i dati prima di rifiutare la richiesta.

data

Se il gestore dei conflitti configurato èAutomerge, questo campo viene compilato per mostrare la decisione Automerge presa per ogni campo. Le operazioni fornite possono essere:

  • AutomergeREJECTED - Quando rifiuta il valore del campo in ingresso a favore del valore nel server.

  • AGGIUNTO - Quando viene Automerge aggiunto al campo in ingresso a causa dell'assenza di un valore preesistente nel server.

  • AGGIUNTO - Automerge Aggiunge i valori in entrata ai valori dell'elenco esistente nel server.

  • UNITO - Quando Automerge unisce i valori in ingresso ai valori del Set esistente nel server.

Utilizzo del conteggio dei token per ottimizzare le richieste

Alle richieste che consumano meno o pari a 1.500 KB-seconds di memoria e tempo di vCPU viene assegnato un token. Le richieste con un consumo di risorse superiore a 1.500 ricevono token aggiuntivi KB-seconds . Ad esempio, se una richiesta consuma 3.350 KB-seconds, AWS AppSync alloca tre token (arrotondati al valore intero successivo) alla richiesta. Per impostazione predefinita, AWS AppSync alloca un massimo di 5.000 o 10.000 token di richiesta al secondo alle API del tuo account, a seconda della regione in cui è distribuito. AWS Se le tue API utilizzano ciascuna una media di due token al secondo, sarai limitato a 2.500 o 5.000 richieste al secondo, rispettivamente. Se hai bisogno di più token al secondo rispetto all'importo assegnato, puoi inviare una richiesta per aumentare la quota predefinita per il tasso di token di richiesta. Per ulteriori informazioni, consulta AWS AppSync endpoint e quote nella Riferimenti generali di AWS guida e Richiesta di aumento delle quote nella Guida per l'utente di Service Quotas.

Un numero elevato di token per richiesta potrebbe indicare che esiste l'opportunità di ottimizzare le richieste e migliorare le prestazioni dell'API. I fattori che possono aumentare il numero di token per richiesta includono:

  • La dimensione e la complessità del tuo schema GraphQL.

  • La complessità dei modelli di mappatura delle richieste e delle risposte.

  • Il numero di chiamate al resolver per richiesta.

  • La quantità di dati restituiti dai resolver.

  • La latenza delle fonti di dati a valle.

  • Progettazioni di schemi e query che richiedono chiamate successive all'origine dati (anziché chiamate parallele o in batch).

  • Configurazione dei log, in particolare contenuti di log dettagliati e a livello di campo.

Nota

Oltre alle AWS AppSync metriche e ai log, i clienti possono accedere al numero di token utilizzati in una richiesta tramite l'intestazione della risposta. x-amzn-appsync-TokensConsumed

Limiti di dimensione dei log

Per impostazione predefinita, se la registrazione è abilitata, AWS AppSync invierà fino a 1 MB di registri per richiesta. I log che superano questa dimensione verranno troncati. Per ridurre le dimensioni dei log, scegli il livello di registrazione per i ERROR log a livello di campo e disabilita la registrazione, oppure disabilita VERBOSE completamente i log a livello di campo se non necessario. In alternativa al livello di ALL registro, puoi utilizzare Enhanced Metrics per ottenere metriche su risolutori, origini dati o operazioni GraphQL specifici oppure utilizzare le utilità di registrazione fornite da per registrare solo le informazioni necessarie. AppSync

Riferimento al tipo di registro

RequestSummary

  • requestId: identificatore univoco per la richiesta.

  • graphQLAPIId: ID dell'API GraphQL che effettua la richiesta.

  • StatusCode: risposta al codice di stato HTTP.

  • latenza: End-to-end latenza della richiesta, in nanosecondi, come numero intero.

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

ExecutionSummary

  • requestId: identificatore univoco per la richiesta.

  • graphQLAPIId: ID dell'API GraphQL che effettua la richiesta.

  • startTime: il timestamp di inizio dell'elaborazione GraphQL per la richiesta, in formato RFC 3339.

  • EndTime: il timestamp di fine dell'elaborazione GraphQL per la richiesta, in formato RFC 3339.

  • durata: il tempo totale di elaborazione di GraphQL trascorso, in nanosecondi, come numero intero.

  • versione: La versione dello schema di. ExecutionSummary

  • parsing:
    • startOffset: L'offset iniziale per l'analisi, in nanosecondi, rispetto all'invocazione, come numero intero.

    • duration: il tempo impiegato per l'analisi, in nanosecondi, come numero intero.

  • validation:
    • startOffset: l'offset iniziale per la convalida, in nanosecondi, relativo all'invocazione, come numero intero.

    • duration: il tempo impiegato per eseguire la convalida, in nanosecondi, come numero intero.

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

Tracciamento

  • requestId: identificatore univoco per la richiesta.

  • graphQLAPIId: ID dell'API GraphQL che effettua la richiesta.

  • startOffset: l'offset iniziale per la risoluzione del campo, in nanosecondi, rispetto all'invocazione, come numero intero.

  • duration: il tempo impiegato per risolvere il campo, in nanosecondi, come numero intero.

  • fieldName: il nome del campo in fase di risoluzione.

  • parentType: il tipo padre del campo in fase di risoluzione.

  • returnType: il tipo restituito del campo in fase di risoluzione.

  • path: un elenco di segmenti di percorso, che inizia dalla radice della risposta e termina con il campo in fase di risoluzione.

  • resolverArn: l'ARN del resolver utilizzato per la risoluzione del campo. Potrebbe non essere presente nei campi nidificati.

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

Analisi CloudWatch dei log con Logs Insights

Di seguito sono elencati alcuni esempi di query che è possibile eseguire per ottenere informazioni dettagliate sulle prestazioni e lo stato delle operazioni GraphQL. Questi esempi sono disponibili come query di esempio nella console CloudWatch Logs Insights. Nella CloudWatch console, scegli Logs Insights, seleziona il gruppo di AWS AppSync log per la tua API GraphQL, quindi scegli le query in AWS AppSync Queries di esempio.

La seguente query restituisce le prime 10 richieste GraphQL con il numero massimo di token consumati:

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

La query seguente restituisce i primi 10 resolver con latenza massima:

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

La query seguente restituisce i resolver richiamati più di frequente:

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

La query seguente restituisce i resolver con il maggior numero di errori nei modelli di mappatura:

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 query seguente restituisce le statistiche di latenza dei resolver:

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 query seguente restituisce le statistiche di latenza dei campi:

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

I risultati delle query di CloudWatch Logs Insights possono essere esportati in dashboard. CloudWatch

Analizza i tuoi log con Service OpenSearch

Puoi cercare, analizzare e visualizzare i tuoi AWS AppSync log con Amazon OpenSearch Service per identificare i colli di bottiglia nelle prestazioni e le cause principali dei problemi operativi. Puoi identificare i resolver con la latenza massima e gli errori. Inoltre, puoi utilizzare OpenSearch Dashboards per creare dashboard con potenti visualizzazioni. OpenSearch Dashboards è uno strumento open source di visualizzazione ed esplorazione dei dati disponibile in Service. OpenSearch Utilizzando OpenSearch Dashboards, puoi monitorare continuamente le prestazioni e lo stato delle tue operazioni GraphQL. Ad esempio, puoi creare dashboard per visualizzare la latenza P90 delle tue richieste GraphQL e approfondire le latenze P90 di ciascun resolver.

Quando usi il OpenSearch servizio, usa «cwl*» come modello di filtro per cercare gli indici. OpenSearch OpenSearch Il servizio indicizza i log trasmessi in streaming da Logs con il prefisso « CloudWatch cwl-». Per differenziare i log delle AWS AppSync API dagli altri CloudWatch log inviati al OpenSearch Servizio, consigliamo di aggiungere un'espressione di filtro aggiuntiva di alla ricerca. graphQLAPIID.keyword=YourGraphQLAPIID

Migrazione del formato dei log

Gli eventi di registro AWS AppSync generati sono principalmente formattati come JSON completamente strutturato. Tuttavia, alcuni messaggi di diagnostica e di elaborazione intermedia possono essere emessi in un formato non strutturato. Se è necessario migrare i log non strutturati in un JSON completamente strutturato, è possibile utilizzare uno script disponibile nell'esempio. GitHub

Puoi anche utilizzare i filtri metrici CloudWatch per trasformare i dati di registro in CloudWatch metriche numeriche, in modo da potervi rappresentare graficamente o impostare un allarme su di essi.