

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# WebSocket-APIs in API Gateway überwachen
<a name="websocket-api-monitor"></a>

Sie können CloudWatch-Metriken und CloudWatch Logs zur Überwachung von WebSocket-APIs verwenden. Durch die Kombination von Protokollen und Metriken können Sie Fehler protokollieren und die Leistung Ihrer API überwachen.

**Anmerkung**  
API Gateway generiert in den folgenden Fällen möglicherweise keine Protokolle und Metriken:  
413 Request Entity Too Large-Fehler
Übermäßige 429 Too Many Requests-Fehler
Fehler der Serie 400 von Anfragen, die an eine benutzerdefinierte Domäne gesendet wurden, die keine API-Zuordnung hat
Fehler der Serie 500, die durch interne Ausfälle verursacht werden

**Topics**
+ [Überwachen Sie die WebSocket API-Ausführung mit CloudWatch Metriken](apigateway-websocket-api-logging.md)
+ [Konfigurieren Sie die Protokollierung für WebSocket APIs im API Gateway](websocket-api-logging.md)

# Überwachen Sie die WebSocket API-Ausführung mit CloudWatch Metriken
<a name="apigateway-websocket-api-logging"></a>

Sie können [ CloudWatchAmazon-Metriken](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) zur Überwachung verwenden WebSocket APIs. Die Konfiguration ähnelt der für REST verwendeten APIs. Weitere Informationen finden Sie unter [Überwachen Sie die REST-API-Ausführung mit CloudWatch Amazon-Metriken](monitoring-cloudwatch.md).

Die folgenden Metriken werden unterstützt für WebSocket APIs:


| Metrik | Description | 
| --- | --- | 
| ConnectCount | Die Anzahl der Nachrichten, die an die \$1connect-Routenintegration gesendet werden. | 
| MessageCount | Die Anzahl der Nachrichten, die entweder vom oder an den Client an die WebSocket API gesendet wurden. | 
| IntegrationError | Die Anzahl der Anforderungen, die eine 4XX/5XX-Antwort von der Integration zurückgeben. | 
| ClientError | Die Anzahl der Anfragen, auf die eine 4XX-Antwort von API Gateway zurückgegeben wird, bevor die Integration aufgerufen wird. | 
| ExecutionError | Fehler beim Aufrufen der Integration. | 
| IntegrationLatency | Der Zeitunterschied zwischen dem Senden der Anfragen durch API Gateway an die Integration und dem Eingang der Antwort der Integration bei API Gateway. Wird für Rückrufe und Pseudo-Integrationen ausgeblendet. | 

Sie können die Dimensionen in der folgenden Tabelle verwenden, um API Gateway-Metriken zu filtern.


| Dimension | Description | 
| --- | --- | 
| ApiId | Filtert API Gateway-Metriken für eine API mit der angegebenen API-ID. | 
| ApiId, Phase | Filtert API Gateway-Metriken für eine API-Stufe mit der angegebenen API-ID und Stufen-ID. | 
| ApiId, Methode, Ressource, Phase |  Filtert API-Gateway-Metriken für eine API-Methode mit der angegebenen API-ID, Stufen-ID, dem Ressourcenpfad und der Routen-ID. API Gateway sendet diese Metriken nur, wenn Sie detaillierte CloudWatch Metriken explizit aktiviert haben. Sie können dies tun, indem Sie die [UpdateStage](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-stages-stagename.html)Aktion der API Gateway V2 REST-API aufrufen, auf die die `detailedMetricsEnabled` Eigenschaft aktualisiert `true` werden soll. Alternativ können Sie den AWS CLI Befehl [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-stage.html) aufrufen, um die `DetailedMetricsEnabled` Eigenschaft auf zu aktualisieren. `true` Durch die Aktivierung dieser Metriken wird Ihr Konto mit zusätzlichen Gebühren belastet. Preisinformationen finden Sie unter [ CloudWatchAmazon-Preise](https://aws.amazon.com/cloudwatch/pricing/).  | 

# Konfigurieren Sie die Protokollierung für WebSocket APIs im API Gateway
<a name="websocket-api-logging"></a>

Sie können die Protokollierung aktivieren, um CloudWatch Protokolle in Logs zu schreiben. Es gibt zwei Arten der API-Anmeldung CloudWatch: Ausführungsprotokollierung und Zugriffsprotokollierung. Bei der Ausführungsprotokollierung verwaltet API Gateway die CloudWatch Protokolle. Der Prozess umfasst das Erstellen von Protokollgruppen und -Streams sowie die Meldung der Anforderungen und Antworten jedes Aufrufers an Protokoll-Streams. 

Zur Verbesserung Ihrer Sicherheitslage empfehlen wir Ihnen, die Ausführungsprotokollierung auf der `ERROR`- oder `INFO`-Ebene zu verwenden. Dies kann erforderlich sein, um verschiedene Compliance-Rahmenwerke einzuhalten. Weitere Informationen finden Sie unter [Amazon-API-Gateway-Steuerelemente](https://docs.aws.amazon.com/securityhub/latest/userguide/apigateway-controls.html) im *Benutzerhandbuch für AWS Security Hub *.

In der Zugriffsprotokollierung protokollieren Sie, als API-Entwickler, wer auf Ihre API zugegriffen hat und wie der Aufrufer auf die API zugegriffen hat. Erstellen Sie eine eigene Protokollgruppe oder wählen Sie eine vorhandene Protokollgruppe aus, die von API Gateway verwaltet werden kann. Um die Zugriffsdetails anzugeben, wählen Sie `$context`-Variablen (ausgedrückt in einem Format Ihrer Wahl) und eine Protokollgruppe als Ziel aus.

Anweisungen zum Einrichten der CloudWatch Protokollierung finden Sie unter[CloudWatch API-Protokollierung mit der API Gateway Gateway-Konsole einrichten](set-up-logging.md#set-up-access-logging-using-console).

Wenn Sie das **Log Format (Protokollformat)** angeben, können Sie wählen, welche Kontextvariablen protokolliert werden sollen. Die folgenden Variablen werden unterstützt.


| Parameter | Beschreibung | 
| --- | --- | 
| \$1context.apiId |  Die ID, die API Gateway Ihrer API zuweist.  | 
| \$1context.authorize.error | Die Autorisierungsfehlermeldung. | 
| \$1context.authorize.latency | Die Autorisierungslatenz in ms | 
| \$1context.authorize.status | Der Statuscode, der von einem Autorisierungsversuch zurückgegeben wurde. | 
| \$1context.authorizer.error | Die von einem Genehmiger zurückgegebene Fehlermeldung. | 
| \$1context.authorizer.integrationLatency | Die Lambda-Genehmiger-Latenzzeit in ms. | 
| \$1context.authorizer.integrationStatus | Der von einem Lambda-Genehmiger zurückgegebene Statuscode. | 
| \$1context.authorizer.latency | Der Genehmiger-Latenz in ms. | 
| \$1context.authorizer.requestId | Die Anforderungs-ID des AWS Endpunkts. | 
| \$1context.authorizer.status | Der von einem Genehmiger zurückgegebene Statuscode. | 
| \$1context.authorizer.principalId |  Die ID des Prinzipalbenutzers, die mit dem vom Client gesendeten und von einer Lambda-Genehmiger-Lambda-Funktion des API Gateways zurückgegebenen Token verknüpft ist. (Ein Lambda-Genehmiger wurde früher als benutzerdefinierter Genehmiger bezeichnet).  | 
| \$1context.authorizer.property |  Der in einer Zeichenfolge umgewandelte Wert des angegebenen Schlüssel-Wert-Paares der `context`-Zuordnung, der von einer API Gateway Lambda-Genehmigerfunktion zurückgegeben wird. Angenommen, der Genehmiger gibt folgende `context`-Zuweisung zurück:  <pre>"context" : {<br />                            "key": "value",<br />                            "numKey": 1,<br />                            "boolKey": true<br />                            }</pre> Dann gibt der Aufruf von `$context.authorizer.key` die Zeichenfolge `"value"` zurück, der Aufruf von `$context.authorizer.numKey` gibt die Zeichenfolge `"1"` zurück und der Aufruf von `$context.authorizer.boolKey` gibt den Wert `"true"` zurück.  | 
| \$1context.authenticate.error | Die von einem Authentifizierungsversuch zurückgegebene Fehlermeldung. | 
| \$1context.authenticate.latency | Die Authentifizierungslatenz in ms | 
| \$1context.authenticate.status | Der Statuscode, der von einem Authentifizierungsversuch zurückgegeben wurde. | 
| \$1context.connectedAt |  Die [Epoch](https://en.wikipedia.org/wiki/Unix_time)-formatierte Verbindungszeit.  | 
| \$1context.connectionId |  Eine eindeutige ID für die Verbindung, die für einen Rückruf an den Client verwendet werden kann.  | 
| \$1context.domainName |  Ein Domainname für die WebSocket API. Dies kann für einen Rückruf an den Client (anstelle eines hardcodierten Wertes) verwendet werden.  | 
| \$1context.error.message |  Eine Zeichenfolge, die eine API Gateway-Fehlermeldung enthält.  | 
| \$1context.error.messageString | Die Wert von \$1context.error.message in Anführungszeichen, d. h. "\$1context.error.message". | 
| \$1context.error.responseType |  Der Fehler-Antworttyp.  | 
| \$1context.error.validationErrorString |  Eine Zeichenfolge, die eine detaillierte Validierungsfehlermeldung enthält.  | 
| \$1context.eventType |  Der Ereignistyp: `CONNECT`, `MESSAGE` oder `DISCONNECT`.  | 
| \$1context.extendedRequestId | Äquivalent mit \$1context.requestId. | 
| \$1context.identity.accountId |  Die der Anfrage zugeordnete AWS Konto-ID.  | 
| \$1context.identity.apiKey |  Der API-Besitzerschlüssel, der der schlüsselfähigen API-Anforderung zugewiesen ist.  | 
| \$1context.identity.apiKeyId | Die API-Schlüssel-ID, die der schlüsselfähigen API-Anforderung zugewiesen ist | 
| \$1context.identity.caller |  Die Hauptkennung des Aufrufers, der die Anforderung signiert hat. Wird für Routen unterstützt, die die IAM-Autorisierung verwenden.  | 
| \$1context.identity.cognitoAuthenticationProvider |  Eine durch Komma getrennte Liste aller Amazon-Cognito-Authentifizierungsanbieter, die vom anfordernden Aufrufer verwendet werden. Nur verfügbar, wenn die Anfrage mit Anmeldeinformationen von Amazon Cognito signiert wurde.  Zum Beispiel für eine Identität aus einem Amazon Cognito-Benutzerpool, `cognito-idp. region.amazonaws.com/user_pool_id,cognito-idp.region.amazonaws.com/user_pool_id:CognitoSignIn:token subject claim` Weitere Informationen zu verfügbaren Amazon-Cognito-Authentifizierungsanbietern finden Sie unter [Verbundidentitäten verwenden](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html) im *Amazon-Cognito-Entwicklerhandbuch*. | 
| \$1context.identity.cognitoAuthenticationType |  Der Amazon Cognito-Authentifizierungstyp des Aufrufers, der den Anfrage erstellt hat. Nur verfügbar, wenn die Anfrage mit Anmeldeinformationen von Amazon Cognito signiert wurde. Mögliche Werte sind `authenticated` für authentifizierte Identitäten und `unauthenticated` für nicht authentifizierte Identitäten. | 
| \$1context.identity.cognitoIdentityId |  Die Amazon Cognito Identitäts-ID des anfordernden Aufrufers. Nur verfügbar, wenn die Anfrage mit Anmeldeinformationen von Amazon Cognito signiert wurde.  | 
| \$1context.identity.cognitoIdentityPoolId |  Die Amazon Cognito Identitätspool-ID des anfordernden Aufrufers. Nur verfügbar, wenn die Anfrage mit Anmeldeinformationen von Amazon Cognito signiert wurde.  | 
| \$1context.identity.principalOrgId |  Die [AWS -Organisations-ID](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_details.html). Wird für Routen unterstützt, die die IAM-Autorisierung verwenden.  | 
| \$1context.identity.sourceIp |  Die Quell-IP-Adresse der TCP-Verbindung, von der die Anforderung an API Gateway gesendet wird.  | 
| \$1context.identity.user |  Die Hauptkennung des Benutzers, der für den Ressourcenzugriff autorisiert wird. Wird für Routen unterstützt, die die IAM-Autorisierung verwenden.  | 
| \$1context.identity.userAgent |  Der Benutzeragent des API-Aufrufers.  | 
| \$1context.identity.userArn |  Der ARN (Amazon Resource Name) des tatsächlichen Benutzers nach der Authentifizierung.  | 
| \$1context.integration.error | Die von einer Integration zurückgegebene Fehlermeldung. | 
| \$1context.integration.integrationStatus | Bei der Lambda-Proxyintegration wurde der Statuscode vom Lambda-Funktionscode zurückgegeben AWS Lambda, nicht vom Backend-Funktionscode. | 
| \$1context.integration.latency | Die Integrationslatenz in Millisekunden. Äquivalent mit \$1context.integrationLatency. | 
| \$1context.integration.requestId | Die AWS Anforderungs-ID des Endpunkts. Äquivalent mit \$1context.awsEndpointRequestId. | 
| \$1context.integration.status | Der von einer Integration zurückgegebene Statuscode. Bei Lambda-Proxy-Integrationen ist dies der Statuscode, der von Ihrem Lambda-Funktionscode zurückgegeben wird. Äquivalent mit \$1context.integrationStatus. | 
| \$1context.integrationLatency | Die Integrationslatenz in ms, nur für die Zugriffsprotokollierung verfügbar. | 
| \$1context.messageId |  Eine eindeutige serverseitige ID für eine Nachricht. Nur verfügbar, wenn der `$context.eventType` `MESSAGE` ist.  | 
| \$1context.requestId |  Entspricht `$context.extendedRequestId`.  | 
| \$1context.requestTime | Die Anforderungszeit im [CLF](https://httpd.apache.org/docs/current/logs.html#common)-Format (dd/MMM/yyyy:HH:mm:ss \$1-hhmm). | 
| \$1context.requestTimeEpoch | Die Anforderungszeit im [Epoch](https://en.wikipedia.org/wiki/Unix_time)-Format in Millisekunden. | 
| \$1context.routeKey |  Der ausgewählte Routenschlüssel.  | 
| \$1context.stage |  Die Bereitstellungsstufe des API-Aufrufs (z. B. "beta" oder "prod").  | 
| \$1context.status |  Der Antwortstatus.  | 
| \$1context.waf.error | Die Fehlermeldung wurde von zurückgegeben AWS WAF. | 
| \$1context.waf.latency | Die AWS WAF Latenz in ms. | 
| \$1context.waf.status | Der Statuscode wurde von zurückgegeben AWS WAF. | 

Beispiele für einige häufig verwendete Zugriffsprotokollformate werden in der API Gateway-Konsole dargestellt und wie folgt aufgeführt.
+ `CLF` ([Common Log Format](https://httpd.apache.org/docs/current/logs.html#common)):

  ```
  $context.identity.sourceIp $context.identity.caller \
  $context.identity.user [$context.requestTime] "$context.eventType $context.routeKey $context.connectionId" \
  $context.status $context.requestId
  ```

  Die Fortsetzungszeichen (`\`) sind als visuelle Hilfe gedacht. Das Protokollformat muss eine einzelne Zeile sein. Sie können am Ende des Protokollformats ein Zeilenumbruchzeichen (`\n`) hinzufügen, um am Ende jedes Protokolleintrags einen Zeilenumbruch einzuschließen.
+  `JSON`: 

  ```
  {
  "requestId":"$context.requestId", \
  "ip": "$context.identity.sourceIp", \
  "caller":"$context.identity.caller", \
  "user":"$context.identity.user", \
  "requestTime":"$context.requestTime", \
  "eventType":"$context.eventType", \
  "routeKey":"$context.routeKey", \
  "status":"$context.status", \
  "connectionId":"$context.connectionId"
  }
  ```

  Die Fortsetzungszeichen (`\`) sind als visuelle Hilfe gedacht. Das Protokollformat muss eine einzelne Zeile sein. Sie können am Ende des Protokollformats ein Zeilenumbruchzeichen (`\n`) hinzufügen, um am Ende jedes Protokolleintrags einen Zeilenumbruch einzuschließen.
+ `XML`: 

  ```
  <request id="$context.requestId"> \
   <ip>$context.identity.sourceIp</ip> \
   <caller>$context.identity.caller</caller> \
   <user>$context.identity.user</user> \
   <requestTime>$context.requestTime</requestTime> \
   <eventType>$context.eventType</eventType> \
   <routeKey>$context.routeKey</routeKey> \
   <status>$context.status</status> \
   <connectionId>$context.connectionId</connectionId> \
  </request>
  ```

  Die Fortsetzungszeichen (`\`) sind als visuelle Hilfe gedacht. Das Protokollformat muss eine einzelne Zeile sein. Sie können am Ende des Protokollformats ein Zeilenumbruchzeichen (`\n`) hinzufügen, um am Ende jedes Protokolleintrags einen Zeilenumbruch einzuschließen.
+ `CSV` (durch Komma getrennte Werte):

  ```
  $context.identity.sourceIp,$context.identity.caller, \
  $context.identity.user,$context.requestTime,$context.eventType, \
  $context.routeKey,$context.connectionId,$context.status, \
  $context.requestId
  ```

  Die Fortsetzungszeichen (`\`) sind als visuelle Hilfe gedacht. Das Protokollformat muss eine einzelne Zeile sein. Sie können am Ende des Protokollformats ein Zeilenumbruchzeichen (`\n`) hinzufügen, um am Ende jedes Protokolleintrags einen Zeilenumbruch einzuschließen.