Wie finde ich API Gateway-REST-API-Fehler in meinen CloudWatch-Logs?
Ich möchte einen bestimmten Amazon API Gateway-REST-API-Anforderungsfehler in meinen Amazon CloudWatch-Protokollen finden. Wie kann ich das machen?
Behebung
CloudWatch bietet zwei Arten der API-Protokollierung: Zugriffsprotokollierung und Ausführungsprotokollierung. Weitere Informationen zu den verschiedenen Arten der API-Protokollierung finden Sie unter CloudWatch-Protokollformate für API Gateway.
Gehen Sie wie folgt vor, um mithilfe von CloudWatch-Protokollen einen bestimmten API-Gateway-REST-API-Anforderungsfehler zu finden.
**Hinweis:**Wenn Sie beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste AWS CLI-Version verwenden.
So finden Sie mithilfe von CloudWatch-Zugriffsprotokollen einen REST-API-Anforderungsfehler
**Hinweis:Das folgende Beispiel verwendet das JSON-CloudWatch-Protokollformat und enthält ein Nachrichtenfeld für den ** $context.error.message-Kontext.
- Führen Sie den AWS-CLI-Befehl filter-log-events für die API Gateway-Zugriffsprotokolle mit Ihrem bevorzugten Suchprogramm aus.
Beispiel für den Befehl filter-log-events, der das Suchprogramm „grep“ für API-Gateway-Zugriffsprotokolle verwendet
**Wichtig:**Ändern Sie den Namen der Protokollgruppe in den Namen der Zugriffsprotokollgruppe.
aws logs filter-log-events --log-group-name 'API-Gateway-Access-Logs_2mg2xeej0a/test' | grep '17cb49b2-c061-11e9-bc30-f118c8b08d5f'
- Überprüfen Sie die Reaktion auf Ihren Befehl filter-log-events, um Fehler zu identifizieren. Die Befehlsantwort gibt ein Objekt mit allen $context-Variablen zurück, die Sie zugeordnet haben.
Beispiel für eine Antwort des Befehls 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" }
So finden Sie mithilfe von CloudWatch-Ausführungsprotokollen einen REST-API-Anforderungsfehler
Wichtig: Um die Speicherung sensibler Informationen zu verhindern, sollten Sie die Option Log full requests/responses data deaktivieren, bevor Sie in die Produktion gehen.
- Führen Sie den folgenden cURL-Befehl aus, um die fehlgeschlagene API-Anfrage zu replizieren:
**Wichtig:**Ersetzen Sie abcd1234 durch Ihre API-ID und us-east-1 durch die AWS-Region, in der sich Ihre API befindet.
curl -X GET https://abcd1234.execute-api.us-east-1.amazonaws.com/dev/myapi -v
- Notieren Sie sich den x-amzn-requestid-Wert in den API-Antwortheadern. Dieser Wert ist im nächsten Schritt erforderlich.
Beispiel für API-Gateway-Antwortheader
< content-type: application/json < content-length: 41 < x-amzn-requestid: 17cb49b2-c061-11e9-bc30-f118c8b08d5f < x-amz-apigw-id: eh7enHGIvHcFnPg=
- Führen Sie den AWS CLI-Befehl filter-log-events für die API-Gateway-Ausführungsprotokolle mit Ihrem bevorzugten Suchprogramm aus.
Beispiel für den Befehl filter-log-events, der das Suchprogramm „grep“ für API-Gateway-Ausführungsprotokolle verwendet
**Wichtig:**Ändern Sie den Namen der Protokollgruppe in den Namen der Zugriffsprotokollgruppe.
aws logs filter-log-events --log-group-name 'API-Gateway-Execution-Logs_2mg2xeej0a/test' | grep '17cb49b2-c061-11e9-bc30-f118c8b08d5f'
- Überprüfen Sie die Reaktion auf Ihren Befehl filter-log-events, um Fehler zu identifizieren. Im Folgenden finden Sie Beispiele für die Art von Fehlermeldungen, die möglicherweise angezeigt werden:
Beispiel für API-Gateway-Berechtigungsfehler
(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"}
Beispiel für Timeout-Fehler bei der API-Gateway-Integration
(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"}
Beispiel für API-Gateway-Backend-Integrationsfehler
(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"}
Wenn Sie die Anforderungs-ID nicht abrufen können
-
Holen Sie entweder den HTTP-Statuscode oder die zurückgegebene Fehlermeldung oder beides aus den Protokollen der clientseitigen Anwendung.
-
Führen Sie den AWS CLI-Befehl filter-log-events für die API Gateway-Zugriffsprotokolle aus. Verwenden Sie das Suchprogramm „grep“ entweder für den HTTP-Statuscode oder die zurückgegebene Fehlermeldung.
Beispiel für den Befehl filter-log-events, der das Suchprogramm „grep“ für einen HTTP-Statuscode verwendet
aws logs filter-log-events --log-group-name 'API-Gateway-Access-Logs_2mg2xeej0a/test' | grep '504'
Beispiel für einen filter-log-events-Befehl, der das Suchprogramm „grep“ für eine zurückgegebene Fehlermeldung von der Clientseite verwendet
aws logs filter-log-events --log-group-name 'API-Gateway-Access-Logs_2mg2xeej0a/test' | grep 'Endpoint request timed out'
-
Suchen Sie die Anforderungs-ID in den Ergebnissen der Zugriffsprotokolle.
-
Befolgen Sie das Verfahren im Abschnitt über die Verfolgung von API-Antworten in den Ausführungsprotokollen in diesem Artikel.
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr