Come faccio a trovare gli errori di REST API in API Gateway nei miei log di CloudWatch?

5 minuti di lettura
0

Desidero trovare un errore di richiesta specifico di REST API in Gateway Amazon API nei miei file di log Amazon CloudWatch. Come posso farlo?

Risoluzione

CloudWatch offre due tipi di registrazione delle API: la registrazione degli accessi e la registrazione delle esecuzioni. Per ulteriori informazioni sui diversi tipi di registrazione delle API, consulta Formati dei log di CloudWatch per API Gateway.

Per individuare un errore specifico della richiesta di REST API in API Gateway utilizzando i log di CloudWatch, procedi come segue.

Nota: Se ricevi errori durante l'esecuzione dei comandi dell'Interfaccia della linea di comando AWS (AWS CLI), assicurati di utilizzare la versione più recente di AWS CLI.

Per individuare un errore di richiesta REST API utilizzando i log di accesso di CloudWatch

1.    Configura la registrazione degli accessi all'API CloudWatch utilizzando la console API Gateway.

Nota: L'esempio seguente utilizza il formato di log JSON CloudWatch e include un campo messaggio per il contesto $context.error.message.

2.    Esegui il comando AWS CLI filter-log-events sui log di accesso di API Gateway utilizzando la tua utilità di ricerca preferita.

Esempio di comando filter-log-events che utilizza l'utilità di ricerca "grep" per i log di accesso di API Gateway

Importante: Cambia log-group-name con il nome del gruppo di log di accesso.

aws logs filter-log-events --log-group-name 'API-Gateway-Access-Logs_2mg2xeej0a/test' | grep '17cb49b2-c061-11e9-bc30-f118c8b08d5f'

3.    Controlla la risposta al tuo comando filter-log-events per identificare gli errori. La risposta al comando restituirà un oggetto con tutte le variabili $context che hai mappato.

Esempio di risposta al comando filter-log-events

{
    "requestId": "17cb49b2-c061-11e9-bc30-f118c8b08d5f",
    "ip": "1.2.3.4",
    "caller": "-",
    "user": "-",
    "requestTime": "28/Aug/2019:15:10:34 +0000",
    "httpMethod": "GET",
    "resourcePath": "/iam",
    "status": "403",
    "message": "Missing Authentication
            Token",
    "protocol": "HTTP/1.1",
    "responseLength": "42"
}

Per individuare un errore di richiesta di REST API utilizzando i log di esecuzione di CloudWatch

1.    Configura la registrazione delle esecuzioni dell'API CloudWatch utilizzando la console API Gateway.

Importante: Per evitare la memorizzazione di informazioni sensibili, assicurati di disattivare Registra tutti i dati delle richieste/risposte prima di passare alla produzione.

2.    Esegui il seguente comando cURL per replicare la richiesta API non riuscita:

Importante: Sostituisci abcd1234 con il tuo ID API e us-east-1 con la Regione AWS in cui si trova la tua API.

curl -X GET https://abcd1234.execute-api.us-east-1.amazonaws.com/dev/myapi -v

3.    Nota il valore x-amzn-requestid nelle intestazioni delle risposte dell'API. Questo valore è obbligatorio nel passaggio successivo.

Esempio di intestazioni di risposta API Gateway

< content-type: application/json
< content-length: 41
< x-amzn-requestid: 17cb49b2-c061-11e9-bc30-f118c8b08d5f
< x-amz-apigw-id: eh7enHGIvHcFnPg=

4.    Esegui il comando AWS CLI filter-log-events sui log di esecuzione di API Gateway utilizzando la tua utilità di ricerca preferita.

Esempio di comando filter-log-events che utilizza l'utilità di ricerca "grep" per i log di esecuzione di API Gateway

Importante: Cambia log-group-name con il nome del gruppo di log di accesso.

aws logs filter-log-events --log-group-name 'API-Gateway-Execution-Logs_2mg2xeej0a/test' | grep '17cb49b2-c061-11e9-bc30-f118c8b08d5f'

5.    Controlla la risposta al tuo comando filter-log-events per identificare gli errori. Di seguito sono riportati alcuni esempi dei tipi di messaggi di errore che potresti visualizzare:

Esempio di errori relativi alle autorizzazioni di API Gateway

(b59c91c8-3386-4478-b2b4-c4d63191756e) Execution failed due to configuration error: Invalid permissions on Lambda function
(b59c91c8-3386-4478-b2b4-c4d63191756e) Gateway response type: DEFAULT_5XX with status code: 500
(b59c91c8-3386-4478-b2b4-c4d63191756e) Gateway response body: {"message": "Internal server error"}

**Esempio di errori di timeout dell'integrazione di API Gateway **

(2a1db04d-ac7c-463f-b9bd-478285467d58) Execution failed due to a timeout error
(2a1db04d-ac7c-463f-b9bd-478285467d58) Gateway response type: DEFAULT_5XX with status code: 504
(2a1db04d-ac7c-463f-b9bd-478285467d58) Gateway response body: {"message": "Endpoint request timed out"}

**Esempio di errori di integrazione del backend di API Gateway **

(631ff793-2c5b-413d-a31d-f2cd3f75708b) Endpoint response body before transformations: {"errorMessage": "division by zero", "errorType": "ZeroDivisionError", "stackTrace": [" File \"/var/task/lambda_function.py\", line 7, in lambda_handler\n c=a/b\n"]}
(631ff793-2c5b-413d-a31d-f2cd3f75708b) Lambda execution failed with status 200 due to customer function error: division by zero. Lambda request id: 7f0d8fc1-33ce-4bf9-8685-df78e179da5c
(631ff793-2c5b-413d-a31d-f2cd3f75708b) Gateway response type: DEFAULT_5XX with status code: 502
(631ff793-2c5b-413d-a31d-f2cd3f75708b) Gateway response body: {"message": "Internal server error"}

Se non riesci a recuperare l'ID della richiesta

1.    Cerca il codice di stato HTTP o il messaggio di errore restituito, o entrambi, dai log dell'applicazione lato client.

2.    Esegui il comando AWS CLI filter-log-events sui log di accesso di API Gateway. Utilizza l'utilità di ricerca "grep" per il codice di stato HTTP o il messaggio di errore restituito.

Esempio di comando filter-log-events che utilizza l'utilità di ricerca "grep" per un codice di stato HTTP

aws logs filter-log-events --log-group-name 'API-Gateway-Access-Logs_2mg2xeej0a/test' | grep '504'

Esempio di comando filter-log-events che utilizza l'utilità di ricerca "grep" per un messaggio di errore restituito dal lato client

aws logs filter-log-events --log-group-name 'API-Gateway-Access-Logs_2mg2xeej0a/test' | grep 'Endpoint request timed out'

3.    Trova l'ID della richiesta nei risultati dei log di accesso.

4.    Segui la procedura descritta nella sezione Tracking API responses in the execution logs di questo articolo.