Wie finde ich API Gateway-REST-API-Fehler in meinen CloudWatch-Logs?

Lesedauer: 4 Minute
0

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

  1. Richten Sie die CloudWatch-API-Zugriffsprotokollierung mithilfe der API Gateway-Konsole ein.

**Hinweis:Das folgende Beispiel verwendet das JSON-CloudWatch-Protokollformat und enthält ein Nachrichtenfeld für den ** $context.error.message-Kontext.

  1. 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'
  1. Ü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

  1. Richten Sie die CloudWatch-API-Ausführungsprotokollierung mithilfe der API Gateway-Konsole ein.

Wichtig: Um die Speicherung sensibler Informationen zu verhindern, sollten Sie die Option Log full requests/responses data deaktivieren, bevor Sie in die Produktion gehen.

  1. 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
  1. 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=
  1. 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'
  1. Ü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

  1. Holen Sie entweder den HTTP-Statuscode oder die zurückgegebene Fehlermeldung oder beides aus den Protokollen der clientseitigen Anwendung.

  2. 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'
  1. Suchen Sie die Anforderungs-ID in den Ergebnissen der Zugriffsprotokolle.

  2. Befolgen Sie das Verfahren im Abschnitt über die Verfolgung von API-Antworten in den Ausführungsprotokollen in diesem Artikel.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren