Konfigurieren der Protokollierung für HTTP-APIs in API Gateway - Amazon API Gateway

Konfigurieren der Protokollierung für HTTP-APIs in API Gateway

Sie können die Protokollierung einschalten, um Protokolle in CloudWatch Logs zu schreiben. Sie können Protokollierungsvariablen verwenden, um den Inhalt Ihrer Protokolle anzupassen.

Um die Protokollierung für eine HTTP-API einzuschalten, müssen Sie Folgendes tun.

  1. Stellen Sie sicher, dass Ihr -Benutzer über die erforderlichen Berechtigungen zum Einschalten der Protokollierung verfügt.

  2. Erstellen Sie eine CloudWatch Logs-Protokollgruppe.

  3. Geben Sie den ARN der CloudWatch Logs-Protokollgruppe für eine Stufe Ihrer API an.

Berechtigungen zum Einschalten der Protokollierung

Um die Protokollierung für eine API einzuschalten, muss der -Benutzer über die folgenden Berechtigungen verfügen.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:GetLogEvents", "logs:FilterLogEvents" ], "Resource": "arn:aws:logs:us-east-2:123456789012:log-group:*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogDelivery", "logs:PutResourcePolicy", "logs:UpdateLogDelivery", "logs:DeleteLogDelivery", "logs:CreateLogGroup", "logs:DescribeResourcePolicies", "logs:GetLogDelivery", "logs:ListLogDeliveries" ], "Resource": "*" } ] }

Eine Protokollgruppe erstellen und die Protokollierung für HTTP-APIs aktivieren

Sie können eine Protokollgruppe erstellen und die Zugriffsprotokollierung aktivieren, indem Sie die AWS Management Console oder die AWS CLI verwenden.

AWS Management Console
  1. Erstellen Sie eine -Protokollgruppe.

    Informationen über das Erstellen einer Protokollgruppe über die Konsole finden Sie in „Eine Protokollgruppe erstellen“ im Benutzerhandbuch zu Amazon CloudWatch Logs.

  2. Melden Sie sich bei der API Gateway-Konsole unter https://console.aws.amazon.com/apigateway an.

  3. Wählen Sie eine HTTP-API.

  4. Wählen Sie unter der Registerkarte Monitor (Überwachen) im Hauptnavigationsbereich die Option Logging (Protokollierung) aus.

  5. Wählen Sie eine Phase aus, um die Protokollierung zu aktivieren, und wählen Sie Select (Auswählen) aus.

  6. Wählen Sie Edit (Bearbeiten) aus, um die Zugriffsprotokollierung zu aktivieren.

  7. Schalten Sie die Access logging (Zugriffsprotokollierung) ein, geben Sie ein CloudWatch Logs ein und wählen Sie ein Protokollformat aus.

  8. Wählen Sie Save (Speichern) aus.

AWS CLI

Der folgende AWS CLI-Befehl erstellt eine Protokollgruppe.

aws logs create-log-group --log-group-name my-log-group

Zum Einschalten der Protokollierung benötigen Sie den Amazon-Ressourcennamen (ARN) für Ihre Protokollgruppe. Das ARN-Format lautet arn:aws:logs:region: account-id:log-group:log-group-name.

Mit dem folgenden AWS CLI-Befehl wird die Protokollierung für die $default-Stufe einer HTTP-API eingeschaltet.

aws apigatewayv2 update-stage --api-id abcdef \ --stage-name '$default' \ --access-log-settings '{"DestinationArn": "arn:aws:logs:region:account-id:log-group:log-group-name", "Format": "$context.identity.sourceIp - - [$context.requestTime] \"$context.httpMethod $context.routeKey $context.protocol\" $context.status $context.responseLength $context.requestId"}'

Beispielprotokollformate

Beispiele für einige gängige Zugriffsprotokollformate sind in der API Gateway-Konsole verfügbar und im Folgenden aufgeführt.

  • CLF (Common Log Format):

    $context.identity.sourceIp - - [$context.requestTime] "$context.httpMethod $context.routeKey $context.protocol" $context.status $context.responseLength $context.requestId $context.extendedRequestId
  • JSON:

    { "requestId":"$context.requestId", "ip": "$context.identity.sourceIp", "requestTime":"$context.requestTime", "httpMethod":"$context.httpMethod","routeKey":"$context.routeKey", "status":"$context.status","protocol":"$context.protocol", "responseLength":"$context.responseLength", "extendedRequestId": "$context.extendedRequestId" }
  • XML:

    <request id="$context.requestId"> <ip>$context.identity.sourceIp</ip> <requestTime>$context.requestTime</requestTime> <httpMethod>$context.httpMethod</httpMethod> <routeKey>$context.routeKey</routeKey> <status>$context.status</status> <protocol>$context.protocol</protocol> <responseLength>$context.responseLength</responseLength> <extendedRequestId>$context.extendedRequestId</extendedRequestId> </request>
  • CSV (durch Komma getrennte Werte):

    $context.identity.sourceIp,$context.requestTime,$context.httpMethod,$context.routeKey,$context.protocol,$context.status,$context.responseLength,$context.requestId,$context.extendedRequestId