Verwenden von Filterausdrücken für die Suche nach Ablaufverfolgungen in der Konsole - AWS X-Ray

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.

Verwenden von Filterausdrücken für die Suche nach Ablaufverfolgungen in der Konsole

Wenn Sie einen Zeitraum auswählen, für den Ablaufverfolgungen in der X-Ray-Konsole angezeigt werden sollen, erhalten Sie möglicherweise mehr Ergebnisse, als die Konsole anzeigen kann. In der rechten oberen Ecke der Konsole wird die Anzahl der gescannten Ablaufverfolgungen angezeigt und Sie können ablesen, ob weitere Ablaufverfolgungen verfügbar sind.

Um die Ergebnisse auf die Ablaufverfolgungen zu beschränken, die Sie suchen, verwenden Sie einen Filterausdruck.

Details zu Filterausdrücken

Wenn Sie einen Knoten in der Service-Übersicht auswählen, erzeugt die Konsole einen Filterausdruck basierend auf der Service-Übersicht des Knotens und auf den vorhandenen Fehlertypen basierend auf Ihrer Auswahl. Um Ablaufverfolgungen zu finden, die Leistungsprobleme zeigen oder zu bestimmten Anfragen gehören, können Sie den von der Konsole bereitgestellten Ausdruck anpassen oder einen eigenen erstellen. Wenn Sie mit dem X-Ray -SDK Anmerkungen hinzufügen, können Sie auch nach der Präsenz eines Anmerkungsschlüssels oder nach dem Wert eines Schlüssels filtern.

Anmerkung

Wenn Sie in der Service-Übersicht einen relativen Zeitraum und einen Knoten auswählen, wandelt die Konsole den Zeitraum in eine absolute Start- und Endzeit um. Um sicherzustellen, dass die Ablaufverfolgungen für den Knoten in den Suchergebnissen angezeigt werden, und um das Scannen von Zeiträumen zu vermeiden, in denen der Knoten nicht aktiv war, werden nur Zeiten in den Zeitraum einbezogen, zu denen der Knoten Ablaufverfolgungen gesendet hat. Um relativ zur aktuellen Zeit zu suchen, können Sie wieder zum relativen Zeitraum auf der Seite der Ablaufverfolgungen wechseln und einen erneuten Scan durchführen.

Wenn immer noch mehr Ergebnisse vorliegen, als in der Konsole angezeigt werden können, gibt die Konsole die Anzahl der Ablaufverfolgungen an, die die Kriterien erfüllt haben, sowie die Anzahl der gescannten Ablaufverfolgungen. Der angezeigte Prozentsatz entspricht dem Prozentsatz des ausgewählten Zeitraums, der gescannt wurde. Um sicherzustellen, dass alle passenden Ablaufverfolgungen in den Ergebnissen angezeigt werden, grenzen Sie Ihren Filterausdruck weiter ein oder wählen einen kürzeren Zeitraum aus.

Die Konsole beginnt den Scan am Ende des Zeitraums und arbeitet sich nach vorne durch, um Ihnen die aktuellsten Ergebnisse zuerst anzuzeigen. Wenn viele Ablaufverfolgungen vorliegen, aber nur wenige Ergebnisse, teilt die Konsole den Zeitraum in Abschnitte ein und scannt diese parallel. Der Fortschrittsbalken zeigt die Abschnitte des Zeitraums an, die gescannt wurden.

Verwenden von Filterausdrücken mit Gruppen

Gruppen sind eine Sammlung von Ablaufverfolgungen, die durch einen Filterausdruck definiert sind. Sie können Gruppen verwenden, um zusätzliche Service-Diagramme zu erstellen und Amazon CloudWatch CloudWatch-Metriken bereitzustellen.

Gruppen werden über ihren Namen oder einen Amazon-Ressourcennamen (ARN) identifiziert und enthalten einen Filterausdruck. Der Service vergleicht eingehende Ablaufverfolgungen mit dem Ausdruck und speichert sie entsprechend.

Sie können Gruppen mit dem Dropdown-Menü links neben der Suchleiste des Filterausdrucks erstellen und ändern.

Anmerkung

Wenn der Service einen Fehler beim Qualifizieren einer Gruppe feststellt, ist diese Gruppe nicht mehr in der Verarbeitung eingehender Ablaufverfolgungen enthalten und es wird eine Fehlermetrik aufgezeichnet.

Weitere Informationen zu Gruppen finden Sie unter.Konfigurieren von Gruppen in der X-ay-Konsoleaus.

Syntax für Filterausdrücke

Filterausdrücke können ein Schlüsselwort, einen unären oder binären Operator und einen Wert für den Vergleich enthalten.

keyword operator value

Für verschiedene Arten von Schlüsselwörtern sich unterschiedliche Operatoren erhältlich. Beispielsweise ist responsetime ein Zahlenschlüsselwort, das mit auf Zahlen bezüglichen Operatoren verglichen werden kann.

Beispiel — Anfragen, bei denen die Reaktionszeit mehr als 5 Sekunden betrug

responsetime > 5

Sie können mehrere Ausdrücke zu einem zusammengesetzten Ausdruck verbinden, indem Sie die Operatoren AND oder OR verwenden.

Beispiel — Anfragen, bei denen die gesamte Dauer 5-8 Sekunden betrug

duration >= 5 AND duration <= 8

Einfache Schlüsselwörter und Operatoren finden Probleme nur auf der Ebene der Ablaufverfolgungen. Wenn ein Fehler dahinter auftritt, von Ihrer Anwendung jedoch berücksichtigt und nicht an den Benutzer zurückgegeben wird, findet eine Suche nach error diesen Fehler nicht.

Zum Finden von Ablaufverfolgungen mit nachgeordneten Fehlern können Sie komplexe Schlüsselwörter service() und edge() verwenden. Diese Schlüsselwörter ermöglichen die Anwendung eines Filterausdrucks auf alle nachgeordneten Knoten, einen einzelnen nachgeordneten Knoten oder eine Edge zwischen zwei Knoten. Für mehr Granularität können Sie Services und Edges mit der id()-Funktion nach Typ filtern.

Boolesche Schlüsselwörter

Boolesche Schlüsselwortwerte sind entweder „true“ oder „false“. Verwenden Sie diese Schlüsselwörter, um Ablaufverfolgungen zu finden, die zu Fehlern geführt haben.

Boolesche Schlüsselwörter

  • okDer Antwortstatuscode lautete „2XX Success

  • errorDer Antwortstatuscode lautete „4XX Client Error“.

  • throttle- Der Antwortstatuscode lautete „429 Zu viele Anfragen“.

  • faultDer Antwortstatuscode lautete „5XX Server Error“.

  • partial— Die Anforderung enthält unvollständige Segmente.

  • inferred— Die Anforderung enthält abgeleitete Segmente.

  • first— Element ist das erste einer Aufzählung.

  • last— Element ist das letzte einer Aufzählung.

  • remote- Ursachenentität ist remote.

  • root— Service ist der Eintrittspunkt oder das Stammsegment einer Ablaufverfolgung.

Boolesche Operatoren finden Segmente, bei denen der angegebene Schlüssel true oder false ist.

Boolesche Operatoren

  • kein — Der Ausdruck ist wahr, wenn das Schlüsselwort wahr ist.

  • !— Der Ausdruck ist wahr, wenn das Schlüsselwort falsch ist.

  • =,!=— Vergleich des Wertes des Schlüsselworts mit der Zeichenfolgetrueoderfalseaus. Diese Operatoren verhalten sich genauso wie die anderen Operatoren, sind jedoch expliziter.

Beispiel - Der Reaktionsstatus ist 2XX OK

ok

Beispiel - Der Reaktionsstatus ist nicht 2XX OK

!ok

Beispiel - Der Reaktionsstatus ist nicht 2XX OK

ok = false

Beispiel — die letzte aufgezählte Störungsablaufverfolgung weist den Fehlernamen „deserialisieren“ auf.

rootcause.fault.entity { last and name = "deserialize" }

Beispiel Anforderungen mit Remote-Segmenten, bei denen die Abdeckung größer als 0,7 ist und der Servicename „Ablaufverfolgungen“ lautet

rootcause.responsetime.entity { remote and coverage > 0.7 and name = "traces" }

Beispiel Anforderungen mit abgeleiteten Segmenten, bei denen der Typ „AWS:DynamonDB“ lautet

rootcause.fault.service { inferred and name = traces and type = "AWS::DynamoDB" }

Beispiel Anforderungen, die ein Segment mit dem Namen „data-plane“ als Stamm aufweisen

service("data-plane") {root = true and fault = true}

Zahlenschlüsselwörter

Verwenden Sie Zahlenschlüsselwörter, um nach Anforderungen mit einer bestimmten Reaktionszeit, Dauer oder einem bestimmten Reaktionsstatus zu suchen.

Zahlenschlüsselwörter

  • responsetime— Zeit, die der Server benötigte, um eine Antwort zu senden

  • duration- Gesamtdauer der Anforderung, einschließlich aller nachgelagerten Aufrufe

  • http.status- Antwortstatuscode

  • index— Position eines Elements in einer Aufzählung

  • coverage— Dezimalprozentsatz der Reaktionszeit der Entität von der Reaktionszeit des Stammsegments Gilt nur für die Reaktionszeit der Ursachenentitäten.

Zahlenoperatoren

Zahlenschlüsselwörter verwenden Standard-Operatoren für Gleichheit und Vergleich.

  • =,!=Das Schlüsselwort ist gleich oder nicht gleich einem Zahlenwert.

  • <,<=,>,>=Das Schlüsselwort ist kleiner oder größer als ein Zahlenwert.

Beispiel - Der Reaktionsstatus ist nicht 200 OK

http.status != 200

Beispiel — Anforderungen, bei denen die gesamte Dauer 5—8 Sekunden betrug

duration >= 5 AND duration <= 8

Beispiel Anforderungen, die in weniger als 3 Sekunden erfolgreich abgeschlossen wurden, einschließlich aller nachgelagerten Aufrufe

ok !partial duration <3

Beispiel — Entität der Aufzählungsliste, die einen Index von größer als 5 hat

rootcause.fault.service { index > 5 }

Beispiel Anforderungen, bei denen die letzte Entität eine Abdeckung größer als 0,8 hat

rootcause.responsetime.entity { last and coverage > 0.8 }

Zeichenfolgen-Schlüsselwörter

Verwenden Sie String-Schlüsselwörter, um Ablaufverfolgungen mit bestimmtem Text in den Anforderungsheadern oder bestimmte Benutzer-IDs zu finden.

Zeichenfolgen-Schlüsselwörter

  • http.url- Anfrage-URL

  • http.method- Anforderungsmethode

  • http.useragent- Die Zeichenfolge des Benutzeragent wird angefordert

  • http.clientip— IP-Adresse des Anforderers

  • user— Wert des Benutzerfelds für jedes beliebige Segment in der Ablaufverfolgung.

  • name— Der Name eines Service oder einer Ausnahme

  • type- Service-Typ

  • message- Die Ausnahmenachricht

  • availabilityzoneWert des availabilityzone-Felds für jedes Segment in der Ablaufverfolgung

  • instance.idWert des Felds „Instance-ID“ für jedes Segment in der Ablaufverfolgung

  • resource.arnWert des Felds „Ressourcen-ARN“ für jedes Segment in der Ablaufverfolgung

Zeichenfolgenoperatoren finden Werte, die identisch mit bestimmtem Text sind oder diesen enthalten. Werte müssen stets in Anführungszeichen angegeben werden.

Zeichenfolgenoperatoren

  • =,!=Das Schlüsselwort ist gleich oder nicht gleich einem Zahlenwert.

  • CONTAINS— Das Schlüsselwort enthält eine bestimmte Zeichenfolge.

  • BEGINSWITH,ENDSWITH— Das Schlüsselwort beginnt oder endet mit einer bestimmten Zeichenfolge.

Beispiel — http.url-Filter

http.url CONTAINS "/api/game/"

Um zu testen, ob ein Feld in einer Ablaufverfolgung vorhanden ist (unabhängig von seinem Wert), prüfen Sie, ob es die leere Zeichenfolge enthält.

Beispiel — Benutzerfilter

Findet alle Ablaufverfolgungen mit Benutzer-IDs.

user CONTAINS ""

Beispiel Wählen Sie Ablaufverfolgungen mit einer Fehlerursache aus, die einen Service mit dem Namen „Auth“ enthält

rootcause.fault.service { name = "Auth" }

Beispiel Wählen Sie Ablaufverfolgungen mit einer Ursachenreaktionszeit aus, deren letzter Service den Typ „DynamoDB“ aufweist.

rootcause.responsetime.service { last and type = "AWS::DynamoDB" }

Beispiel Wählen Sie Ablaufverfolgungen mit einer Fehlerursache, deren letzte Ausnahme die Meldung „Zugriff verweigert für account_id: 1234567890"

rootcause.fault.exception { last and message = "Access Denied for account_id: 1234567890"

Komplexe Schlüsselwörter

Verwenden Sie komplexe Schlüsselwörter, um Anfragen anhand des Servicenamens, des Edge-Namens oder des Anmerkungswerts zu finden. Für Services und Edges können Sie einen zusätzlichen Filterausdruck angeben, der sich auf den Service oder die Edge bezieht. Für Anmerkungen können Sie nach dem Wert einer Anmerkung mit einem bestimmten Schlüssel filtern und dafür boolesche Werte, Zahlen oder Zeichenfolgenoperatoren verwenden.

Komplexe Schlüsselwörter

  • annotation.key— Wert einer Anmerkung mit FeldSchlüsselaus. Der Wert einer Anmerkung kann ein boolescher Wert, eine Zahl oder eine Zeichenfolge sein, sodass Sie jeden der Vergleichsoperatoren dieser Typen verwenden können. Sie können dieses Schlüsselwort nicht in Kombination mit den Schlüsselwörtern service oder edge verwenden.

  • edge(source, destination) {filter}— Verbindung zwischen DienstenQuelleundZielaus. Optionale geschweifte Klammern können einen Filterausdruck enthalten, der für Segmente in dieser Verbindung gilt.

  • group.name / group.arn— Der Wert des Filterausdrucks einer Gruppe, der durch Gruppenname oder Gruppen-ARN referenziert wird.

  • json— JSON-Ursachenobjekt Siehe .Abrufen von Daten ausAWSX-RaySchritte zum programmgesteuerten Erstellen von JSON-Entitäten.

  • service(name) {filter}— Service mit NamenNameaus. Optionale geschweifte Klammern können einen Filterausdruck enthalten, der für vom Service erstellte Segmente gilt.

Verwenden Sie das Service-Schlüsselwort, um Ablaufverfolgungen für Anforderungen zu finden, die auf einen bestimmten Knoten in Ihrer Service-Übersicht gestoßen sind.

Komplexe Schlüsselwort-Operatoren finden Segmente, bei denen der angegebene Schlüssel festgelegt oder nicht festgelegt wurde.

Komplexe Schlüsselwortoptoren

  • kein — Der Ausdruck ist wahr, wenn das Schlüsselwort festgelegt ist. Wenn das Schlüsselwort vom booleschen Typ ist, wird es auf den booleschen Wert ausgewertet.

  • !— Der Ausdruck ist wahr, wenn das Schlüsselwort nicht festgelegt ist. Wenn das Schlüsselwort vom booleschen Typ ist, wird es auf den booleschen Wert ausgewertet.

  • =,!=— Vergleich des Wertes des Schlüsselworts.

  • edge(source, destination) {filter}— Verbindung zwischen DienstenQuelleundZielaus. Optionale geschweifte Klammern können einen Filterausdruck enthalten, der für Segmente in dieser Verbindung gilt.

  • annotation.key— Wert einer Anmerkung mit FeldSchlüsselaus. Der Wert einer Anmerkung kann ein boolescher Wert, eine Zahl oder eine Zeichenfolge sein, sodass Sie jeden der Vergleichsoperatoren dieser Typen verwenden können. Sie können dieses Schlüsselwort nicht in Kombination mit den Schlüsselwörtern service oder edge verwenden.

  • json— JSON-Ursachenobjekt Siehe .Abrufen von Daten ausAWSX-RaySchritte zum programmgesteuerten Erstellen von JSON-Entitäten.

Verwenden Sie das Service-Schlüsselwort, um Ablaufverfolgungen für Anforderungen zu finden, die auf einen bestimmten Knoten in Ihrer Service-Übersicht gestoßen sind.

Beispiel - Servicefilter

Anforderungen mit einem Aufruf an api.example.com mit einem Fehler (Fehler der Serie 500).

service("api.example.com") { fault }

Sie können den Servicenahmen ausschließen, um einen Filterausdruck auf alle Knoten in Ihrer Service-Übersicht anzuwenden.

Beispiel — Servicefilter

Anforderungen, die einen Fehler irgendwo in Ihrer Service-Übersicht verursacht haben.

service() { fault }

Das Edge-Schlüsselwort wendet einen Filterausdruck auf eine Verbindung zwischen zwei Knoten an.

Beispiel - Edge-Filter

Anforderung, bei der der Service api.example.com einen Aufruf an backend.example.com vorgenommen hat, der mit einem Fehler fehlgeschlagen ist.

edge("api.example.com", "backend.example.com") { error }

Sie können auch den !-Operator mit Service- und Edge-Schlüsselwörtern verwenden, um einen Service oder eine Edge aus den Ergebnissen eines anderen Filterausdrucks auszuschließen.

Beispiel — Service- und Anforderungsfilter

Anforderung, bei der die URL mit http://api.example.com/ beginnt und /v2/ enthält, aber kein Service mit dem Namen api.example.com erreicht wird.

http.url BEGINSWITH "http://api.example.com/" AND http.url CONTAINS "/v2/" AND !service("api.example.com")

Beispiel — Service- und Reaktionszeitfilter

Finde Spuren wohttp urlist eingestellt und die Reaktionszeit beträgt mehr als 2 Sekunden.

http.url AND responseTime > 2

Für Anmerkungen können Sie alle Traces aufrufen, woannotation.keyeingestellt ist oder verwenden Sie die Vergleichsoperatoren, die der Art des Werts entsprechen.

Beispiel — Anmerkung mit Zeichenfolgenwert

Anforderungen mit einer Anmerkung mit dem Namen gameid und dem Zeichenfolgenwert "817DL6VO".

annotation.gameid = "817DL6VO"

Beispiel — Annotation ist festgelegt

Anfragen mit einer Anmerkung mit dem Namenageeingestellt.

annotation.age

Beispiel — Annotation ist nicht festgelegt

Anfragen ohne Anmerkung mit dem Namenageeingestellt.

!annotation.age

Beispiel — Anmerkung mit Zahlenwert

Anforderungen mit einer Anmerkung mit einem numerischen Wert größer als 29.

annotation.age > 29

Beispiel — Gruppe mit Benutzer

Anfragen, bei denen Spuren auf diehigh_response_timeGruppenfilter (z.responseTime > 3), und der Benutzer heißt Alice.

group.name = "high_response_time" AND user = "alice"

Beispiel — JSON mit Ursachenentität

Anforderungen mit übereinstimmenden Ursachenentitäten.

rootcause.json = #[{ "Services": [ { "Name": "GetWeatherData", "EntityPath": [{ "Name": "GetWeatherData" }, { "Name": "get_temperature" } ] }, { "Name": "GetTemperature", "EntityPath": [ { "Name": "GetTemperature" } ] } ] }]

idwirken

Wenn Sie einen Service-Namen für die Schlüsselwörter service oder edge bereitstellen, erhalten Sie Ergebnisse für alle Knoten mit diesem Namen. Für eine präzisere Filterung können Sie mit der id-Funktion zusätzlich zu einem Namen einen Servicetyp angeben, um zwischen Knoten mit demselben Namen zu differenzieren.

id(name: "service-name", type:"service::type")

Sie können die id-Funktion anstelle eines Service-Namens in Service- und Edge-Filtern verwenden.

service(id(name: "service-name", type:"service::type")) { filter }
edge(id(name: "service-one", type:"service::type"), id(name: "service-two", type:"service::type")) { filter }

Beispielsweise enthält die Scorekeep-Beispielanwendung eine AWS Lambda-Funktion mit der Bezeichnung random-name. Dadurch werden zwei Knoten in der Service-Übersicht erstellt, einer für den Aufruf der Funktion und einer für den Lambda-Service.

Die zwei Knoten haben denselben Namen, aber unterschiedliche Arten. Ein Standard-Servicefilter findet Ablaufnachverfolgungen für beide.

Beispiel — Servicefilter

Anforderungen, die einen Fehler bei einem Service mit dem Namen random-name enthalten.

service("random-name") { error }

Verwenden Sie die id-Funktion zur Eingrenzung der Suche auf Fehler bei der Funktion selbst, unter Ausschluss von Fehlern vom Service.

Beispiel — Servicefilter mit id-Funktion

Anforderungen, die einen Fehler bei einem Service mit dem Namen random-name und dem Typ AWS::Lambda::Function enthalten.

service(id(name: "random-name", type: "AWS::Lambda::Function")) { error }

Um Knoten nach Typ zu suchen, können Sie den Namen auch vollständig ausschließen.

Beispiel — Servicefilter mit id-Funktion

Anforderungen, die einen Fehler bei einem Service des Typs AWS::Lambda::Function enthalten.

service(id(type: "AWS::Lambda::Function")) { error }