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.
CloudWatch Zur Überwachung und Protokollierung von GraphQL API-Daten verwenden
Sie können Ihre GraphQL-API mithilfe von CloudWatch Metriken und Protokollen protokollieren und CloudWatch debuggen. Diese Tools ermöglichen es Entwicklern, die Leistung zu überwachen, Probleme zu beheben und ihre GraphQL-Operationen effektiv zu optimieren.
CloudWatch metrics ist ein Tool, das eine Vielzahl von Metriken zur Überwachung der API-Leistung und -Nutzung bereitstellt. Diese Metriken lassen sich in zwei Hauptkategorien einteilen:
-
Allgemeine API-Metriken: Dazu gehören
4XXErrorund5XXErrorzur Nachverfolgung von Client- und Serverfehlern,Latencyzur Messung der Antwortzeiten,Requestszur Überwachung der Gesamtzahl der API-Aufrufe undTokensConsumedzur Verfolgung der Ressourcennutzung. -
Real-time Abonnement-Metriken: Diese Metriken konzentrieren sich auf WebSocket Verbindungen und Abonnementaktivitäten. Sie beinhalten Metriken für Verbindungsanfragen, erfolgreiche Verbindungen, Abonnementregistrierungen, Nachrichtenveröffentlichungen sowie aktive Verbindungen und Abonnements.
Der Leitfaden stellt auch erweiterte Metriken vor, die detailliertere Daten zur Resolver-Leistung, zu Interaktionen mit Datenquellen und zu einzelnen GraphQL-Vorgängen bieten. Diese Metriken bieten tiefere Einblicke, sind jedoch mit zusätzlichen Kosten verbunden.
CloudWatch Logs ist ein Tool, das Protokollierungsfunktionen für Ihre GraphQL-APIs ermöglicht. Protokolle können auf zwei Ebenen der API festgelegt werden:
-
Request-level Protokolle: Diese erfassen allgemeine Anforderungsinformationen, einschließlich HTTP-Headern, GraphQL-Abfragen, Betriebszusammenfassungen und Abonnementregistrierungen.
-
Field-level Protokolle: Diese enthalten detaillierte Informationen über die einzelnen Feldauflösungen, einschließlich Anfrage- und Antwortzuordnungen, sowie Ablaufverfolgungsinformationen für jedes Feld.
Sie können die Protokollierung konfigurieren, Protokolleinträge interpretieren und Protokolldaten zur Problembehandlung und Optimierung verwenden. AWS AppSync bietet verschiedene Protokolltypen, die Aufschluss über die Ausführung, Analyse, Validierung und Feldauflösung Ihrer Abfrage geben.
Einrichtung und Konfiguration
Verwenden Sie die Konsole, um die automatische Protokollierung auf einer GraphQL-API zu aktivieren. AWS AppSync
-
Melden Sie sich bei der an AWS-Managementkonsole und öffnen Sie die AppSync Konsole
. -
Wählen Sie auf der Seite APIs den Namen einer GraphQL-API aus.
-
Wählen Sie auf der Startseite Ihrer API im Navigationsbereich Einstellungen aus.
-
Führen Sie unter Logging (Protokollierung) folgende Schritte aus:
-
Aktiviere die Option „Protokolle aktivieren“.
-
Für eine detaillierte Protokollierung auf Anforderungsebene aktivieren Sie das Kontrollkästchen unter Ausführlichen Inhalt einbeziehen. (optional)
-
Wählen Sie unter Feldresolver-Protokollebene Ihre bevorzugte Protokollierungsebene auf Feldebene aus (Keine, Error, Info , Debug oder Alle). (optional)
-
Wählen Sie unter Eine vorhandene Rolle erstellen oder verwenden die Option Neue Rolle aus, um eine neue Rolle AWS Identity and Access Management (IAM) AWS AppSync zu erstellen, in die Protokolle geschrieben werden können. CloudWatch Oder wählen Sie Bestehende Rolle, um den Amazon-Ressourcennamen (ARN) einer vorhandenen IAM-Rolle in Ihrem AWS Konto auszuwählen.
-
-
Wählen Sie Speichern.
Manuelle IAM-Rollenkonfiguration
Wenn Sie eine vorhandene IAM-Rolle verwenden möchten, muss die Rolle die erforderlichen Berechtigungen zum Schreiben von Protokollen gewähren AWS AppSync . CloudWatch Um dies manuell zu konfigurieren, müssen Sie einen ARN für die Servicerolle angeben, damit dieser die Rolle beim Schreiben der Protokolle übernehmen AWS AppSync kann.
Erstellen Sie in der IAM-Konsole AWSAppSyncPushToCloudWatchLogsPolicy, der die folgende Definition hat:
Erstellen Sie als Nächstes eine neue Rolle mit dem Namen AWSAppSyncPushToCloudWatchLogsRole und hängen Sie die neu erstellte Richtlinie an die Rolle an. Bearbeiten Sie die Vertrauensstellung für diese Rolle wie folgt:
Kopieren Sie den Rollen-ARN und verwenden Sie ihn, wenn Sie die Protokollierung für eine AWS AppSync GraphQL-API einrichten.
CloudWatch Metriken
Sie können CloudWatch Metriken verwenden, um bestimmte Ereignisse, die zu HTTP-Statuscodes oder Latenz führen können, zu überwachen und Warnmeldungen bereitzustellen. Die folgenden Metriken werden ausgegeben:
-
4XXError -
Fehler aufgrund von Anfragen, die aufgrund einer falschen Client-Konfiguration nicht gültig sind. In der Regel treten diese Fehler irgendwo außerhalb der GraphQL-Verarbeitung auf. Diese Fehler können beispielsweise auftreten, wenn die Anfrage eine falsche JSON-Nutzlast oder eine falsche Abfrage enthält, wenn der Dienst gedrosselt wird oder wenn die Autorisierungseinstellungen falsch konfiguriert sind.
Einheit: Anzahl. Verwenden Sie die Summen-Statistik, um die Gesamtanzahl der aufgetretenen Fehler zu erhalten.
-
5XXError -
Bei der Ausführung einer GraphQL-Abfrage sind Fehler aufgetreten. Dies kann beispielsweise auftreten, wenn eine Abfrage für ein leeres oder falsches Schema aufgerufen wird. Es kann auch auftreten, wenn die Amazon Cognito-Benutzerpool-ID oder die AWS Region nicht gültig ist. Alternativ kann dies auch passieren, wenn AWS AppSync bei der Bearbeitung einer Anfrage ein Problem auftritt.
Einheit: Anzahl. Verwenden Sie die Summen-Statistik, um die Gesamtanzahl der aufgetretenen Fehler zu erhalten.
-
Latency -
Die Zeit zwischen dem AWS AppSync Empfang einer Anfrage von einem Client und dem Zeitpunkt, an dem eine Antwort an den Client zurückgegeben wird. Dies beinhaltet nicht die Netzwerklatenz, die auftritt, bis eine Antwort die Endgeräte erreicht hat.
Einheit: Millisekunden Verwenden Sie die Durchschnittsstatistik, um erwartete Latenzen zu bewerten.
Requests-
Die Anzahl der Anfragen (Abfragen und Mutationen), die alle APIs in Ihrem Konto verarbeitet haben, nach Regionen.
Einheit: Anzahl. Die Anzahl aller Anfragen, die in einer bestimmten Region verarbeitet wurden.
TokensConsumed-
Die Tokens werden auf der
RequestsGrundlage der Menge an Ressourcen (Verarbeitungszeit und verwendeter Speicherplatz) zugewiesen, die aRequestverbraucht. NormalerweiseRequestverbraucht jeder ein Token. EinemRequest, der große Mengen an Ressourcen verbraucht, werden jedoch bei Bedarf zusätzliche Token zugewiesen.Einheit: Anzahl. Die Anzahl der Token, die Anfragen zugewiesen sind, die in einer bestimmten Region bearbeitet wurden.
NetworkBandwidthOutAllowanceExceeded-
Anmerkung
In der AWS AppSync Konsole können Sie auf der Seite mit den Cache-Einstellungen mit der Option Cache-Integritätsmetriken diese Cache-Integritätsmetrik aktivieren.
Die Netzwerkpakete wurden gelöscht, weil der Durchsatz das aggregierte Bandbreitenlimit überschritten hat. Dies ist nützlich, um Engpässe in einer Cache-Konfiguration zu diagnostizieren. Daten werden für eine bestimmte API aufgezeichnet, indem die
API_Idin der Metrik angegeben wird.appsyncCacheNetworkBandwidthOutAllowanceExceededEinheit: Anzahl. Die Anzahl der Pakete, die verworfen wurden, nachdem das Bandbreitenlimit für eine durch ID angegebene API überschritten wurde.
EngineCPUUtilization-
Anmerkung
In der AWS AppSync Konsole auf der Seite mit den Cache-Einstellungen können Sie mit der Option Cache-Integritätsmetriken diese Cache-Integritätsmetrik aktivieren.
Die CPU-Auslastung (in Prozent), die dem Redis OSS-Prozess zugewiesen ist. Dies ist nützlich, um Engpässe in einer Cache-Konfiguration zu diagnostizieren. Daten werden für eine bestimmte API aufgezeichnet, indem die
API_Idin der Metrik angegeben wird.appsyncCacheEngineCPUUtilizationEinheit: Prozent. Der CPU-Prozentsatz, der derzeit vom Redis OSS-Prozess für eine durch ID angegebene API verwendet wird.
Real-time Abonnements
Alle Metriken werden in einer Dimension ausgegeben: GraphQLAPIId. Dies bedeutet, dass alle Metriken mit GraphQL-API-IDs gekoppelt sind. Die folgenden Metriken beziehen sich auf GraphQL-Abonnements im Vergleich zu reinen WebSockets:
Anmerkung
Diese Dimension gilt nur für AWS AppSync GraphQL-APIs. AWS AppSync bietet auch Event-APIs, einen separaten API-Typ, dessen Metriken unter einer anderen Dimension (EventApiId) ausgegeben werden. Weitere Informationen finden Sie unter Metriken. CloudWatch
ConnectRequests-
Die Anzahl der WebSocket Verbindungsanfragen an AWS AppSync, einschließlich erfolgreicher und erfolgloser Versuche.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtzahl der Verbindungsanforderungen zu ermitteln.
ConnectSuccess-
Die Anzahl erfolgreicher WebSocket Verbindungen zu AWS AppSync. Verbindungen ohne Abonnement sind möglich.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtanzahl der erfolgreichen Verbindungen zu erhalten.
ConnectClientError-
Die Anzahl der WebSocket Verbindungen, die AWS AppSync aufgrund von clientseitigen Fehlern abgelehnt wurden. Dies könnte bedeuten, dass der Dienst gedrosselt ist oder dass die Autorisierungseinstellungen falsch konfiguriert sind.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtanzahl der clientseitigen Verbindungsfehler zu erhalten.
ConnectServerError-
Die Anzahl der Fehler, die auf die Verarbeitung von Verbindungen zurückzuführen sind AWS AppSync . Diese Fehler treten normalerweise bei einem unerwarteten serverseitigen Problem auf.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtanzahl der serverseitigen Verbindungsfehler zu erhalten.
DisconnectSuccess-
Die Anzahl der erfolgreichen WebSocket Verbindungsabbrüche von AWS AppSync.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtanzahl der erfolgreichen Verbindungstrennungen zu erhalten.
DisconnectClientError-
Die Anzahl der Clientfehler, die auf das Trennen von AWS AppSync Verbindungen zurückzuführen sind WebSocket .
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtanzahl der Fehler bei Verbindungstrennungen zu erhalten.
DisconnectServerError-
Die Anzahl der Serverfehler, die auf das Trennen von AWS AppSync Verbindungen zurückzuführen sind WebSocket .
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtanzahl der Fehler bei Verbindungstrennungen zu erhalten.
SubscribeSuccess-
Die Anzahl der Abonnements, für die erfolgreich AWS AppSync über WebSocket registriert wurde. Es ist möglich, Verbindungen ohne Abonnements zu haben, aber es ist nicht möglich, Abonnements ohne Verbindungen zu haben.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtanzahl der erfolgreichen Abonnements zu erhalten.
SubscribeClientError-
Die Anzahl der Abonnements, die AWS AppSync aufgrund von clientseitigen Fehlern abgelehnt wurden. Dies kann auftreten, wenn eine JSON-Nutzlast falsch ist, der Dienst gedrosselt ist oder die Autorisierungseinstellungen falsch konfiguriert sind.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtanzahl der clientseitigen Abonnementfehler zu erhalten.
SubscribeServerError-
Die Anzahl der Fehler, die auf die Verarbeitung von AWS AppSync Abonnements zurückzuführen sind. Diese Fehler treten normalerweise bei einem unerwarteten serverseitigen Problem auf.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtanzahl der serverseitigen Abonnementfehler zu erhalten.
UnsubscribeSuccess-
Die Anzahl der Abmeldeanfragen, die erfolgreich verarbeitet wurden.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtzahl der erfolgreichen Abmeldeanfragen zu ermitteln.
UnsubscribeClientError-
Die Anzahl der Abmeldeanfragen, die AWS AppSync aufgrund von clientseitigen Fehlern abgelehnt wurden.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtzahl der Fehler bei clientseitigen Abmeldeanfragen zu ermitteln.
UnsubscribeServerError-
Die Anzahl der Fehler, die auf die Verarbeitung von Abmeldeanfragen zurückzuführen sind AWS AppSync . Diese Fehler treten normalerweise bei einem unerwarteten serverseitigen Problem auf.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtzahl der Fehler bei serverseitigen Abmeldeanfragen zu ermitteln.
PublishDataMessageSuccess-
Die Anzahl der Abonnementereignismeldungen, die erfolgreich veröffentlicht wurden.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtanzahl der erfolgreich veröffentlichten Abonnementereignismeldungen zu erhalten.
PublishDataMessageClientError-
Die Anzahl der Abonnementereignismeldungen, die aufgrund von clientseitigen Fehlern nicht veröffentlicht werden konnten.
Unit: Zählen. Verwenden Sie die Summenstatistik, um die Gesamtanzahl der clientseitigen Fehler bei der Veröffentlichung von Abonnementereignissen zu erhalten. PublishDataMessageServerError-
Die Anzahl der Fehler, die auf das Veröffentlichen AWS AppSync von Abonnement-Ereignismeldungen zurückzuführen sind. Diese Fehler treten normalerweise bei einem unerwarteten serverseitigen Problem auf.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtanzahl der serverseitigen Fehler bei der Veröffentlichung von Abonnementereignissen zu erhalten.
PublishDataMessageSize-
Die Größe der veröffentlichten Abonnementereignismeldungen.
Einheit: Byte.
ActiveConnections-
Die Anzahl der gleichzeitigen WebSocket Verbindungen von Clients zu Kunden AWS AppSync in einer Minute.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtanzahl der geöffneten Verbindungen zu erhalten.
ActiveSubscriptions-
Die Anzahl der gleichzeitigen Abonnements von Clients in 1 Minute.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtanzahl der aktiven Abonnements zu erhalten.
ConnectionDuration-
Die Zeitspanne, in der die Verbindung offen bleibt.
Einheit: Millisekunden. Verwenden Sie die Durchschnittsstatistik, um die Verbindungsdauer auszuwerten.
OutboundMessages-
Die Anzahl der Nachrichten, die nach Zeitmessung erfolgreich veröffentlicht wurden. Eine gemessene Nachricht entspricht 5 kB an übermittelten Daten.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtzahl der erfolgreich veröffentlichten Messwerte abzurufen.
InboundMessageSuccess-
Die Anzahl der eingehenden Nachrichten, die erfolgreich verarbeitet wurden. Jeder Abonnementtyp, der durch eine Mutation aufgerufen wird, generiert eine eingehende Nachricht.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtzahl der erfolgreich verarbeiteten eingehenden Nachrichten zu ermitteln.
InboundMessageError-
Die Anzahl eingehender Nachrichten, die aufgrund ungültiger API-Anfragen nicht verarbeitet werden konnten, z. B. aufgrund einer Überschreitung der 240 kB-Abonnementnutzlastgröße.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtzahl der eingehenden Nachrichten mit Verarbeitungsfehlern zu ermitteln. API-related
InboundMessageFailure-
Die Anzahl eingehender Nachrichten, deren Verarbeitung aufgrund von Fehlern von fehlgeschlagen ist. AWS AppSync
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtzahl der eingehenden Nachrichten mit entsprechenden Verarbeitungsfehlern zu ermitteln AWS AppSync.
InboundMessageDelayed-
Die Anzahl der verzögerten eingehenden Nachrichten. Eingehende Nachrichten können verzögert werden, wenn entweder das Kontingent für eingehende Nachrichten oder das Kontingent für ausgehende Nachrichten überschritten wird.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtzahl der verzögerten eingehenden Nachrichten zu ermitteln.
InboundMessageDropped-
Die Anzahl der verworfenen eingehenden Nachrichten. Eingehende Nachrichten können gelöscht werden, wenn entweder das Kontingent für eingehende Nachrichten oder das Kontingent für ausgehende Nachrichten überschritten wird.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtzahl der verworfenen eingehenden Nachrichten zu ermitteln.
InvalidationSuccess-
Die Anzahl der Abonnements, die durch eine Mutation mit erfolgreich für ungültig erklärt (abgemeldet) wurden.
$extensions.invalidateSubscriptions()Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtzahl der Abonnements abzurufen, die erfolgreich gekündigt wurden.
InvalidationRequestSuccess-
Die Anzahl der erfolgreich verarbeiteten Invalidierungsanfragen.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtzahl der erfolgreich verarbeiteten Invalidierungsanforderungen zu ermitteln.
InvalidationRequestError-
Die Anzahl der Invalidierungsanfragen, die aufgrund ungültiger API-Anfragen nicht verarbeitet werden konnten.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtzahl der Invalidierungsanforderungen mit API-related Verarbeitungsfehlern zu ermitteln.
InvalidationRequestFailure-
Die Anzahl der Invalidierungsanforderungen, deren Verarbeitung aufgrund von Fehlern von fehlgeschlagen ist. AWS AppSync
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtzahl der Invalidierungsanforderungen mit entsprechenden Verarbeitungsfehlern zu ermitteln AWS AppSync.
InvalidationRequestDropped-
Die Anzahl der Invalidierungsanforderungen sank, als das Kontingent für Invalidierungsanfragen überschritten wurde.
Einheit: Anzahl. Verwenden Sie die Summenstatistik, um die Gesamtzahl der gelöschten Invalidierungsanfragen zu ermitteln.
Vergleich eingehender und ausgehender Nachrichten
Wenn eine Mutation ausgeführt wird, werden Abonnementfelder mit der @aws_subscribe -Direktive für diese Mutation aufgerufen. Jeder Abonnementaufruf generiert eine eingehende Nachricht. Wenn beispielsweise zwei Abonnementfelder dieselbe Mutation in @aws_subscribe angeben, werden zwei eingehende Nachrichten generiert, wenn diese Mutation aufgerufen wird.
Eine ausgehende Nachricht entspricht 5 kB an Daten, die an Kunden übermittelt werden. WebSocket Beispielsweise führt das Senden von 15 kB an Daten an 10 Clients zu 30 ausgehenden Nachrichten (15 kB * 10 Clients/5 kB pro Nachricht = 30 Nachrichten).
Sie können Kontingenterhöhungen für eingehende oder ausgehende Nachrichten beantragen. Weitere Informationen finden Sie unter AWS AppSync Endpunkte und Kontingente im AWS Allgemeinen Referenzhandbuch und in den Anweisungen zum Anfordern einer Kontingenterhöhung im Service Contingents-Benutzerhandbuch.
Verbesserte Metriken
Verbesserte Metriken liefern detaillierte Daten zur API-Nutzung und -Leistung, wie z. B. Anzahl von AWS AppSync Anfragen und Fehlern, Latenz und Cache hits/misses. Alle erweiterten Metrikdaten werden an Ihr CloudWatch Konto gesendet, und Sie können die Datentypen konfigurieren, die gesendet werden.
Anmerkung
Bei der Verwendung erweiterter Metriken fallen zusätzliche Gebühren an. Weitere Informationen finden Sie im Abschnitt zur detaillierten Überwachung der Preisstufen in der CloudWatch Amazon-Preisgestaltung
Diese Metriken finden Sie auf verschiedenen Einstellungsseiten in der AWS AppSync Konsole. Auf der Seite mit den API-Einstellungen können Sie im Abschnitt „Erweiterte Metriken“ die folgenden Elemente aktivieren oder deaktivieren:
Verhalten der Resolver-Metriken: Diese Optionen steuern, wie zusätzliche Metriken für Resolver erfasst werden. Sie können wählen, ob Sie vollständige Request-Resolver-Metriken (Metriken sind für alle Resolver in Anfragen aktiviert) oder Metriken pro Resolver (Metriken sind nur für Resolver aktiviert, bei denen die Konfiguration auf aktiviert gesetzt ist) aktivieren. Die folgenden Optionen sind verfügbar:
-
GraphQL errors per resolver (GraphQLError) -
Die Anzahl der GraphQL-Fehler, die pro Resolver aufgetreten sind.
Metrische Dimension:,
API_IdResolverEinheit: Anzahl.
-
Requests per resolver (Request) -
Die Anzahl der Aufrufe, die während einer Anfrage erfolgt sind. Dies wird pro Resolver aufgezeichnet.
Metrische Dimension:,
API_IdResolverEinheit: Anzahl.
-
Latency per resolver (Latency) -
Die Zeit bis zum Abschluss eines Resolver-Aufrufs. Die Latenz wird in Millisekunden gemessen und pro Resolver aufgezeichnet.
API_IdMetrische Dimension:,ResolverEinheit: Millisekunden
Cache hits per resolver (CacheHit)-
Die Anzahl der Cache-Treffer während einer Anfrage. Dies wird nur ausgegeben, wenn ein Cache verwendet wird. Cache-Treffer werden pro Resolver aufgezeichnet.
Metrische Dimension:,
API_IdResolverEinheit: Anzahl.
Cache misses per resolver (CacheMiss)-
Die Anzahl der Cache-Fehler während einer Anfrage. Dies wird nur ausgegeben, wenn ein Cache verwendet wird. Cache-Fehler werden pro Resolver aufgezeichnet.
Metrische Dimension:,
API_IdResolverEinheit: Anzahl.
Verhalten von Datenquellen-Metriken: Diese Optionen steuern, wie zusätzliche Metriken für Datenquellen erfasst werden. Sie können wählen, ob Sie Metriken für vollständige Datenquellen für Anfragen (Metriken, die für alle Datenquellen in Anfragen aktiviert sind) oder Metriken pro Datenquelle (Metriken sind nur für Datenquellen aktiviert, bei denen die Konfiguration auf aktiviert gesetzt ist) aktivieren. Die folgenden Optionen sind verfügbar:
-
Requests per data source (Request) -
Die Anzahl der Aufrufe, die während einer Anfrage erfolgt sind. Anfragen werden pro Datenquelle aufgezeichnet. Wenn vollständige Anforderungen aktiviert sind, hat jede Datenquelle ihren eigenen Eintrag in CloudWatch.
Metrische Dimension:
API_Id,DatasourceEinheit: Anzahl.
-
Latency per data source (Latency) -
Die Zeit, um einen Datenquellenaufruf abzuschließen. Die Latenz wird pro Datenquelle aufgezeichnet.
Metrische Dimension:
API_Id,DatasourceEinheit: Millisekunden
-
Errors per data source (GraphQLError) -
Die Anzahl der Fehler, die während eines Datenquellenaufrufs aufgetreten sind.
Metrische Dimension:
API_Id,DatasourceEinheit: Anzahl.
Betriebsmetriken: Aktiviert GraphQL-Metriken auf Betriebsebene.
-
Requests per operation (Request) -
Die Häufigkeit, mit der ein bestimmter GraphQL-Vorgang aufgerufen wurde.
Metrische Dimension:
API_Id,OperationEinheit: Anzahl.
-
GraphQL errors per operation (GraphQLError) -
Die Anzahl der GraphQL-Fehler, die während einer bestimmten GraphQL-Operation aufgetreten sind.
Metrische Dimension:,
API_IdOperationEinheit: Anzahl.
CloudWatch Protokolle
Sie können zwei Arten von Protokollierung auf jeder neuen oder vorhandenen GraphQL-API konfigurieren: auf dem Anforderungslevel und auf dem Feldlevel.
Request-level Logs
Wenn die Protokollierung auf Anforderungsebene (einschließlich ausführlicher Inhalte) konfiguriert ist, werden die folgenden Informationen protokolliert:
-
Die Anzahl der verbrauchten Token
-
HTTP-Header für Anforderungen und Antworten
-
Die GraphQL-Abfrage, die in der Anfrage ausgeführt wird
-
Die gesamte Zusammenfassung des Vorgangs
-
Neue und bestehende GraphQL-Abonnements, die registriert sind
Field-level Protokolle
Wenn die Protokollierung auf Feldebene konfiguriert ist, werden die folgenden Informationen protokolliert:
-
Generierte Anforderungszuordnung mit Quelle und Argumenten für jedes Feld
-
Die transformierte Antwortzuordnung für jedes Feld, einschließlich der Daten, die sich aus der Auflösung dieses Felds ergeben
-
Verfolgen von Informationen für jedes Feld
Wenn Sie die Protokollierung aktivieren, werden die CloudWatch Protokolle AWS AppSync verwaltet. Der Prozess umfasst das Erstellen von Protokollgruppen und -Streams sowie die Meldung an Protokoll-Streams mit diesen Protokollen.
Wenn Sie die Protokollierung auf einer GraphQL-API aktivieren und Anfragen stellen, AWS AppSync erstellt eine Protokollgruppe und Protokollstreams unter der Protokollgruppe. Die Protokollgruppe wird nach dem /aws/appsync/apis/{graphql_api_id}-Format benannt. In jeder Protokollgruppe werden die Protokolle weiter in Protokoll-Streams unterteilt. Diese werden anhand der Last Event Time (Letzte Ereigniszeit) sortiert, das heißt anhand des Zeitpunkts, zu dem die protokollierten Daten gemeldet werden.
Jedes Protokollereignis ist mit dem x-amzn- RequestId dieser Anfrage gekennzeichnet. Auf diese Weise können Sie Protokollereignisse filtern CloudWatch , um alle protokollierten Informationen zu dieser Anfrage abzurufen. Sie können sie RequestId aus den Antwortheadern jeder AWS AppSync GraphQL-Anfrage abrufen.
Die Feld-Level-Protokollierung wird mit den folgenden Protokollebenen konfiguriert:
-
Keine — Es werden keine Protokolle auf Feldebene erfasst.
-
- Fehler — Protokolliert die folgenden Informationen nur für die Felder, die sich in der Fehlerkategorie befinden:
-
-
Der Fehlerabschnitt in der Serverantwort
-
Field-level Fehler
-
Die generierten request/response Funktionen, die für Fehlerfelder behoben wurden
-
-
- Info — Protokolliert die folgenden Informationen nur für die Felder, die sich in den Info- und Fehlerkategorien befinden:
-
-
Info-level Nachrichten
-
Die Benutzernachrichten, die über
$util.log.infound gesendet wurdenconsole.log -
Field-level Ablaufverfolgungs- und Zuordnungsprotokolle werden nicht angezeigt.
-
Wenn die Protokollierung auf Feldebene auf
INFOoder höher eingestellt ist und ausführliche Inhalte enthalten sind, werden die Protokollierungsmeldungen der transformierten Mapping-Vorlage AWS AppSync hinzugefügt. Dies enthält alle Informationen, die der transformierten Mapping-Vorlage oder der Ausgabe des Resolver- oder JavaScript Funktionscodes hinzugefügt wurden, und sollte nicht verwendet werden, wenn Sie beabsichtigen, vertrauliche Informationen wie Passwörter oder Autorisierungs-Header an nachgelagerte Datenquellen zu senden und diese Informationen nicht in Ihren Protokollen haben möchten.
-
-
- Debug — Protokolliert die folgenden Informationen nur für die Felder, die in den Kategorien Debug, Info und Fehler enthalten sind:
-
-
Debug-level Nachrichten
-
Die über
$util.log.info,, und gesendeten$util.log.debugconsole.logBenutzernachrichtenconsole.debug -
Field-level Ablaufverfolgungs- und Zuordnungsprotokolle werden nicht angezeigt.
-
-
- Alle — Protokolliert die folgenden Informationen für alle Felder in der Abfrage:
-
-
Field-level Informationen verfolgen
-
Die generierten request/response Funktionen, die für jedes Feld aufgelöst wurden
-
Vorteile der Überwachung
Sie können die Protokollierung und Metriken verwenden, um Ihre GraphQL-Abfragen zu identifizieren, Fehler darin zu beheben und sie zu optimieren. Diese werden Ihnen beispielsweise dabei helfen, Latenzprobleme zu debuggen und zwar mithilfe der Rückverfolgungsinformationen, die für jedes Feld in der Abfrage protokolliert werden. Um dies zu demonstrieren, nehmen Sie einmal an, dass Sie einen oder mehrere Resolver in einer GraphQL-Abfrage verwenden. Ein Beispiel für eine Feldoperation in CloudWatch Logs könnte etwa wie folgt aussehen:
{ "path": [ "singlePost", "authors", 0, "name" ], "parentType": "Post", "returnType": "String!", "fieldName": "name", "startOffset": 416563350, "duration": 11247 }
Dies kann einem GraphQL-Schema entsprechen, das wie folgt aussieht:
type Post { id: ID! name: String! authors: [Author] } type Author { id: ID! name: String! } type Query { singlePost(id:ID!): Post }
In den vorherigen Protokollergebnissen zeigt Path ein einzelnes Element in Ihren Daten an, das beim Ausführen einer Abfrage mit dem Namen zurückgegeben wurdesinglePost(). In diesem Beispiel steht es für das Namensfeld am ersten Index (0). Der StartOffset gibt einen Offset ab dem Beginn der GraphQL-Abfrageoperation an. Die Dauer ist die Gesamtzeit zum Auflösen des Felds. Diese Werte können nützlich sein, um herauszufinden, warum Daten aus einer bestimmten Datenquelle möglicherweise langsamer als erwartet ausgeführt werden oder ob ein bestimmtes Feld die gesamte Abfrage drosselt. Sie können sich beispielsweise dafür entscheiden, den bereitgestellten Durchsatz für eine Amazon DynamoDB-Tabelle zu erhöhen oder ein bestimmtes Feld aus einer Abfrage zu entfernen, was zu einer schlechten Gesamtleistung des Vorgangs führt.
AWS AppSync Generiert seit dem 8. Mai 2019 Protokollereignisse als vollständig strukturiertes JSON. Dies kann Ihnen helfen, Protokollanalysedienste wie CloudWatch Logs Insights und Amazon OpenSearch Service zu verwenden, um die Leistung Ihrer GraphQL-Anfragen und die Nutzungsmerkmale Ihrer Schemafelder zu verstehen. Auf diese Weise können Sie z. B. Resolver mit hohen Wartezeiten identifizieren, die möglicherweise die Ursache eines Leistungsproblems sind. Zudem können Sie die am häufigsten und am seltesten verwendeten Felder in Ihrem Schema identifizieren und die Auswirkungen von veralteten GraphQL-Feldern bewerten.
Konflikterkennung und Synchronisierungsprotokollierung
Wenn für eine AWS AppSync API die Protokollierung in CloudWatch Logs konfiguriert ist und die Protokollebene des Feldauflösers auf Alle gesetzt ist, werden Informationen zur Konflikterkennung und -lösung an die Protokollgruppe ausgegeben. AWS AppSync Dies bietet einen detaillierten Einblick in die Reaktion der AWS AppSync API auf einen Konflikt. Um Ihnen bei der Interpretation der Antwort zu helfen, sind die folgenden Informationen in den Protokollen enthalten:
-
conflictType -
Gibt an, ob ein Konflikt aufgrund einer fehlenden Versionsübereinstimmung oder der vom Kunden bereitgestellten Bedingung aufgetreten ist.
-
conflictHandlerConfigured -
Gibt den Conflict Handler an, der zum Zeitpunkt der Anforderung auf dem Resolver konfiguriert war.
-
message -
Enthält Informationen darüber, wie der Konflikt erkannt und gelöst wurde.
-
syncAttempt -
Die Anzahl der Versuche, die der Server unternommen hat, um die Daten zu synchronisieren, bevor die Anforderung letztlich abgelehnt wurde.
-
data -
Wenn der Konflikthandler konfiguriert ist
Automerge, wird dieses Feld aufgefüllt, um anzuzeigen, welche EntscheidungAutomergefür jedes Feld getroffen wurde. Die Aktionen können sein:-
ABGELEHNT — Wenn der eingehende Feldwert zugunsten des Werts im Server
Automergeabgelehnt wird. -
HINZUGEFÜGT — Wenn das eingehende Feld
Automergehinzugefügt wird, weil auf dem Server noch kein Wert vorhanden ist. -
ANGEHÄNGT —
AutomergeHängt die eingehenden Werte an die Werte für die Liste an, die auf dem Server existiert. -
AutomergeMERGED — Beim Zusammenführen der eingehenden Werte mit den Werten für das Set, das auf dem Server vorhanden ist.
-
Verwenden Sie die Anzahl der Tokens, um Ihre Anfragen zu optimieren
Anfragen, die weniger als oder gleich 1.500 KB-seconds Arbeitsspeicher und vCPU-Zeit verbrauchen, wird ein Token zugewiesen. Anfragen mit einem Ressourcenverbrauch von mehr als 1.500 KB-seconds erhalten zusätzliche Token. Wenn eine Anfrage beispielsweise 3.350 verbraucht KB-seconds, AWS AppSync werden der Anfrage drei Token (aufgerundet auf den nächsten Ganzzahlwert) zugewiesen. Weist den APIs AWS AppSync in Ihrem Konto standardmäßig maximal 5.000 oder 10.000 Anforderungstoken pro Sekunde zu, abhängig von der AWS Region, in der es bereitgestellt wird. Wenn Ihre APIs jeweils durchschnittlich zwei Token pro Sekunde verwenden, sind Sie auf 2.500 bzw. 5.000 Anfragen pro Sekunde beschränkt. Wenn Sie mehr Token pro Sekunde als die zugeteilte Menge benötigen, können Sie eine Anfrage stellen, um das Standardkontingent für die Rate der Anforderungstoken zu erhöhen. Weitere Informationen finden Sie unter AWS AppSync Endpunkte und Kontingente im Allgemeine AWS-Referenz Handbuch und Anfordern einer Kontingenterhöhung im Service Quota-Benutzerhandbuch.
Eine hohe Token-Anzahl pro Anfrage könnte darauf hindeuten, dass die Möglichkeit besteht, Ihre Anfragen zu optimieren und die Leistung Ihrer API zu verbessern. Zu den Faktoren, die die Anzahl Ihrer Tokens pro Anfrage erhöhen können, gehören:
-
Die Größe und Komplexität Ihres GraphQL-Schemas.
-
Die Komplexität der Vorlagen für die Zuordnung von Anfragen und Antworten.
-
Die Anzahl der Resolver-Aufrufe pro Anfrage.
-
Die Menge der von Resolvern zurückgegebenen Daten.
-
Die Latenz nachgelagerter Datenquellen.
-
Schema- und Abfragedesigns, die aufeinanderfolgende Datenquellenaufrufe erfordern (im Gegensatz zu parallelen oder gebündelten Aufrufen).
-
Protokollierungskonfiguration, insbesondere ausführliche Protokollinhalte auf Feldebene.
Anmerkung
Zusätzlich zu den AWS AppSync Metriken und Protokollen können Clients über den Antwort-Header auf die Anzahl der in einer Anfrage verbrauchten Token zugreifen. x-amzn-appsync-TokensConsumed
Größenbeschränkungen für Protokolle
Wenn die Protokollierung aktiviert wurde, AWS AppSync werden standardmäßig bis zu 1 MB an Protokollen pro Anfrage gesendet. Protokolle, die diese Größe überschreiten, werden gekürzt. Um die Protokollgröße zu reduzieren, wählen Sie die ERROR Protokollierungsebene für Protokolle auf Feldebene und deaktivieren Sie die VERBOSE Protokollierung oder deaktivieren Sie die Protokolle auf Feldebene vollständig, falls sie nicht benötigt werden. Als Alternative zur ALL Protokollebene können Sie Enhanced Metrics verwenden, um Metriken für bestimmte Resolver, Datenquellen oder GraphQL-Operationen abzurufen. Sie können auch die von bereitgestellten Protokollierungsdienstprogramme verwenden, um nur die erforderlichen Informationen AppSync zu protokollieren.
Referenz zum Protokolltyp
RequestSummary
-
requestId: Eindeutige Bezeichnung für die Anforderung.
-
graphQLAPIId: ID der GraphQL-API, von der die Anforderung gestellt wird.
-
statusCode: Antwort auf den HTTP-Statuscode.
-
Latenz: End-to-end Latenz der Anfrage in Nanosekunden als Ganzzahl.
{ "logType": "RequestSummary", "requestId": "dbe87af3-c114-4b32-ae79-8af11f3f96f1", "graphQLAPIId": "pmo28inf75eepg63qxq4ekoeg4", "statusCode": 200, "latency": 242000000 }
ExecutionSummary
-
requestId: Eindeutige Bezeichnung für die Anforderung.
-
graphQLAPIId: ID der GraphQL-API, von der die Anforderung gestellt wird.
-
startTime: Der Startzeitstempel der GraphQL-Verarbeitung für die Anfrage im RFC 3339-Format.
-
EndTime: Der Endzeitstempel der GraphQL-Verarbeitung für die Anfrage im RFC 3339-Format.
-
Dauer: Die gesamte verstrichene GraphQL-Verarbeitungszeit in Nanosekunden als Ganzzahl.
-
Version: Die Schemaversion von. ExecutionSummary
-
- Parsing:
-
-
startOffset: Der Start-Offset für das Parsen in Nanosekunden relativ zum Aufruf als Ganzzahl.
-
duration: Die für die Analyse aufgewendete Zeit in Nanosekunden als Ganzzahl.
-
-
- Validierung:
-
-
startOffset: Der Start-Offset für die Validierung in Nanosekunden relativ zum Aufruf als Ganzzahl.
-
duration: Die für die Validierung aufgewendete Zeit in Nanosekunden als Ganzzahl.
-
{ "duration": 217406145, "logType": "ExecutionSummary", "requestId": "dbe87af3-c114-4b32-ae79-8af11f3f96f1", "startTime": "2019-01-01T06:06:18.956Z", "endTime": "2019-01-01T06:06:19.174Z", "parsing": { "startOffset": 49033, "duration": 34784 }, "version": 1, "validation": { "startOffset": 129048, "duration": 69126 }, "graphQLAPIId": "pmo28inf75eepg63qxq4ekoeg4" }
Nachverfolgung
-
requestId: Eindeutige Bezeichnung für die Anforderung.
-
graphQLAPIId: ID der GraphQL-API, von der die Anforderung gestellt wird.
-
startOffset: Der Start-Offset für die Feldauflösung in Nanosekunden, relativ zum Aufruf, als Ganzzahl.
-
duration: Die für die Auflösung des Felds aufgewendete Zeit in Nanosekunden als Ganzzahl.
-
fieldName: Der Name des Feldes, das aufgelöst wird.
-
parentType: Der übergeordnete Typ des Feldes, das aufgelöst wird.
-
returnType: Der Rückgabetyp des Feldes, das aufgelöst wird.
-
path: Eine Liste von Pfadsegmenten, die am Stamm der Antwort beginnt und mit dem aufzulösenden Feld endet.
-
resolverArn: Der ARN des Resolvers, der für die Feldauflösung verwendet wird. Möglicherweise nicht in verschachtelten Feldern vorhanden.
{ "duration": 216820346, "logType": "Tracing", "path": [ "putItem" ], "fieldName": "putItem", "startOffset": 178156, "resolverArn": "arn:aws:appsync:us-east-1:111111111111:apis/pmo28inf75eepg63qxq4ekoeg4/types/Mutation/fields/putItem", "requestId": "dbe87af3-c114-4b32-ae79-8af11f3f96f1", "parentType": "Mutation", "returnType": "Item", "graphQLAPIId": "pmo28inf75eepg63qxq4ekoeg4" }
Analysieren Sie Ihre Logs mit Logs Insights CloudWatch
Es folgen Beispiele für Abfragen, die Sie ausführen können, um umsetzbare Einblicke in die Leistung und den Zustand Ihrer GraphQL-Operationen zu erhalten. Diese Beispiele sind als Beispielabfragen in der CloudWatch Logs Insights-Konsole verfügbar. Wählen Sie in der CloudWatch Konsole
Die folgende Abfrage gibt die 10 wichtigsten GraphQL-Anfragen mit der maximalen Anzahl verbrauchter Token zurück:
filter @message like "Tokens Consumed" | parse @message "* Tokens Consumed: *" as requestId, tokens | sort tokens desc | display requestId, tokens | limit 10
Die folgende Abfrage gibt die 10 wichtigsten Resolver mit maximaler Latenz zurück:
fields resolverArn, duration | filter logType = "Tracing" | limit 10 | sort duration desc
Die folgende Abfrage gibt die am häufigsten aufgerufenen Resolver zurück:
fields ispresent(resolverArn) as isRes | stats count() as invocationCount by resolverArn | filter isRes and logType = "Tracing" | limit 10 | sort invocationCount desc
Die folgende Abfrage gibt Resolver mit den meisten Fehlern in Zuweisungsvorlagen zurück:
fields ispresent(resolverArn) as isRes | stats count() as errorCount by resolverArn, logType | filter isRes and (logType = "RequestMapping" or logType = "ResponseMapping") and fieldInError | limit 10 | sort errorCount desc
Die folgende Abfrage gibt Resolver-Latenzstatistiken zurück:
fields ispresent(resolverArn) as isRes | stats min(duration), max(duration), avg(duration) as avg_dur by resolverArn | filter isRes and logType = "Tracing" | limit 10 | sort avg_dur desc
Die folgende Abfrage gibt Feldlatenzstatistiken zurück:
stats min(duration), max(duration), avg(duration) as avg_dur by concat(parentType, '/', fieldName) as fieldKey | filter logType = "Tracing" | limit 10 | sort avg_dur desc
Die Ergebnisse von CloudWatch Logs Insights-Abfragen können in CloudWatch Dashboards exportiert werden.
Analysieren Sie Ihre Logs mit Service OpenSearch
Sie können Ihre AWS AppSync Protokolle mit Amazon OpenSearch Service durchsuchen, analysieren und visualisieren, um Leistungsengpässe und die Hauptursachen von Betriebsproblemen zu identifizieren. Sie können Resolver mit der maximalen Latenz und Fehlern identifizieren. Darüber hinaus können Sie OpenSearch Dashboards verwenden, um Dashboards mit leistungsstarken Visualisierungen zu erstellen. OpenSearch Dashboards ist ein Open-Source-Tool zur Datenvisualisierung und -erkundung, das in Service verfügbar ist. OpenSearch Mithilfe von OpenSearch Dashboards können Sie die Leistung und den Zustand Ihrer GraphQL-Operationen kontinuierlich überwachen. Sie können beispielsweise Dashboards erstellen, um die P90-Latenz Ihrer GraphQL-Anfragen zu visualisieren und die P90-Latenzen der einzelnen Resolver detailliert zu untersuchen.
Wenn Sie OpenSearch Service verwenden, verwenden Sie „cwl*“ als Filtermuster, um Indizes zu durchsuchen. OpenSearch OpenSearch Der Service indexiert die von Logs gestreamten CloudWatch Protokolle mit dem Präfix „cwl-“. Um AWS AppSync API-Protokolle von anderen an OpenSearch Service gesendeten CloudWatch Protokollen zu unterscheiden, empfehlen wir, Ihrer Suche einen zusätzlichen Filterausdruck von graphQLAPIID.keyword= hinzuzufügen.YourGraphQLAPIID
Migration des Protokollformats
AWS AppSync Generierte Protokollereignisse werden hauptsächlich als vollständig strukturiertes JSON formatiert. Bestimmte Diagnose- und Zwischenverarbeitungsmeldungen können jedoch in einem unstrukturierten Format ausgegeben werden. Wenn Sie unstrukturierte Protokolle zu vollständig strukturiertem JSON migrieren müssen, können Sie ein im Beispiel verfügbares Skript verwenden. GitHub
Sie können auch Metrikfilter verwenden CloudWatch , um Protokolldaten in numerische CloudWatch Metriken umzuwandeln, sodass Sie sie grafisch darstellen oder einen Alarm auslösen können.