OpenSearch Piped Processing Language (PPL) - CloudWatch Amazon-Protokolle

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.

OpenSearch Piped Processing Language (PPL)

Dieser Abschnitt enthält eine grundlegende Einführung in das Abfragen von CloudWatch Logs mit PPL. OpenSearch Mit PPL können Sie Daten mithilfe von in der Pipeline hinterlegten Befehlen abrufen, abfragen und analysieren, was das Verständnis und die Erstellung komplexer Abfragen erleichtert. Die Syntax basiert auf Unix-Pipes und ermöglicht die Verkettung von Befehlen zur Transformation und Verarbeitung von Daten. Mit PPL können Sie Daten filtern und aggregieren und eine Vielzahl von mathematischen, Zeichenketten-, Datums-, Bedingungs- und anderen Funktionen für die Analyse verwenden.

Die Aufnahme SOURCE in eine PPL-Abfrage ist eine nützliche Methode, um die Protokollgruppen, Feldindizes und Datenquellen anzugeben, die in eine Abfrage aufgenommen werden sollen, wenn Sie die AWS CLI OR-API zum Erstellen einer Abfrage verwenden. Der SOURCE Befehl wird nur in der AWS CLI AND-API unterstützt, nicht in der CloudWatch Konsole. Wenn Sie die CloudWatch Konsole verwenden, um eine Abfrage zu starten, verwenden Sie die Konsolenschnittstelle, um die Protokollgruppen sowie den Namen und Typ der Datenquelle anzugeben.

Wird verwendet, aws:fieldIndex um nur indizierte Daten zurückzugeben, indem eine Abfrage erzwungen wird, nur Protokollgruppen zu scannen, die in einem Feld indexiert sind, das Sie in der Abfrage angeben. Die relevanten Protokollgruppen werden automatisch auf der Grundlage der im Befehl angegebenen Felder ausgewählt. filterIndex Dadurch wird das gescannte Volumen reduziert, indem Protokollgruppen übersprungen werden, die keine Protokollereignisse enthalten, die das in der Abfrage angegebene Feld enthalten, und nur Protokollgruppen gescannt werden, die dem in der Abfrage für diesen Feldindex angegebenen Wert entsprechen. Geben Sie aws:fieldIndex hier den Feldnamen zusammen mit dem Feldnamen und dem Feldwert im Quellbefehl an, um nur indizierte Daten abzufragen, die das angegebene Feld und den angegebenen Wert enthalten. Weitere Informationen finden Sie unter Erstellen Sie Feldindizes, um die Abfrageleistung zu verbessern und das Scanvolumen zu reduzieren.

Sie können OpenSearch PPL für Abfragen von Protokollgruppen in der Standard-Protokollklasse verwenden.

Anmerkung

Informationen zu allen in CloudWatch Logs unterstützten OpenSearch PPL-Abfragebefehlen sowie ausführliche Informationen zu Syntax und Einschränkungen finden Sie unter Unterstützte PPL-Befehle im OpenSearch Service Developer Guide.

Informationen zu anderen Abfragesprachen, die Sie verwenden können, finden Sie unter CloudWatch Logs Insights, OpenSearch Service SQL und CloudWatch Metrics Insights

Befehl oder Funktion Beispielabfrage Description

fields

fields field1, field2

Zeigt eine Reihe von Feldern an, die projiziert werden müssen.

join

LEFT JOIN left=l, right=r on l.id = r.id `join_right_lg` | fields l.field_1, r.field_2

Verbindet zwei Datensätze miteinander.

where

where field1="success" | where field2 != "i-023fe0a90929d8822" | fields field3, field4, field5,field6 | head 1000

Filtert die Daten auf der Grundlage der von Ihnen angegebenen Bedingungen.

aws:FieldIndex

source = [`aws:fieldIndex`="region", `region` = "us-west-2"] | where status = 200 | head 10

Gibt nur indizierte Daten zurück, indem eine Abfrage erzwungen wird, nur Protokollgruppen zu scannen, die für ein Feld indiziert sind, das Sie in der Abfrage angeben.

stats

stats count(), count(field1), min(field1), max(field1), avg(field1) by field2 | head 1000

Führt Aggregationen und Berechnungen durch

parse

parse field1 ".*/(?<field2>[^/]+$)" | where field2 = "requestId" | fields field1, field2 | head 1000

Extrahiert ein Muster mit regulären Ausdrücken (Regex) aus einer Zeichenfolge und zeigt das extrahierte Muster an. Das extrahierte Muster kann weiter verwendet werden, um neue Felder zu erstellen oder Daten zu filtern.

sort

stats count(), count(field1), min(field1) as field1Alias, max(`field1`), avg(`field1`) by field2 | sort -field1Alias | head 1000

Sortiert die angezeigten Ergebnisse nach einem Feldnamen. Verwenden Sie sort -FieldName , um in absteigender Reihenfolge zu sortieren.

eval

eval field2 = field1 * 2 | fields field1, field2 | head 20

Ändert oder verarbeitet den Wert eines Felds und speichert ihn in einem anderen Feld. Dies ist nützlich, um eine Spalte mathematisch zu modifizieren, Zeichenkettenfunktionen auf eine Spalte anzuwenden oder Datumsfunktionen auf eine Spalte anzuwenden.

umbenennen

rename field2 as field1 | fields field1;

Benennt ein oder mehrere Felder im Suchergebnis um.

head

fields `@message` | head 20

Beschränkt die angezeigten Abfrageergebnisse auf die ersten N Zeilen.

top

top 2 field1 by field2

Findet die häufigsten Werte für ein Feld.

dedup

dedup field1 | fields field1, field2, field3

Entfernt doppelte Einträge auf der Grundlage der von Ihnen angegebenen Felder.

selten

rare field1 by field2

Findet die seltensten Werte aller Felder in der Feldliste.

subquery

where field_1 IN [ search source= `subquery_lg` | fields field_2 ] | fields id, field_1

Führt komplexe, verschachtelte Abfragen innerhalb Ihrer PPL-Anweisungen aus.

Trendlinie

trendline sma(2, field1) as field1Alias

Berechnet die gleitenden Durchschnitte von Feldern.

EventStats

eventstats sum(field1) by field2

Reichert Ihre Eventdaten mit berechneten zusammenfassenden Statistiken an. Es analysiert bestimmte Felder innerhalb Ihrer Ereignisse, berechnet verschiedene statistische Kennzahlen und fügt diese Ergebnisse dann als neue Felder an jedes ursprüngliche Ereignis an.

expand

eval tags_array_string = json_extract(`@message`, '$.tags')| eval tags_array = json_array(json_extract(tags_string, '$[0]'), json_extract(tags_string, '$[1]'))| expand tags_array as color_tags

Zerlegt ein Feld, das mehrere Werte enthält, in separate Zeilen und erstellt für jeden Wert im angegebenen Feld eine neue Zeile.

fillnull

fields `@timestamp`, error_code, status_code | fillnull using status_code = "UNKNOWN", error_code = "UNKNOWN"

Füllt Nullfelder mit dem von Ihnen angegebenen Wert. Es kann in einem oder mehreren Feldern verwendet werden.

flatten

eval metadata_struct = json_object('size', json_extract(metadata_string, '$.size'), 'color', json_extract(metadata_string, '$.color')) | flatten metadata_struct as (meta_size, meta_color)

Macht ein Feld flach. Das Feld muss von diesem Typ sein: struct<?,?> oder. array<struct<?,?>>

cidrmatch

where cidrmatch(ip, '2003:db8::/32') | fields ip

Prüft, ob die angegebene IP-Adresse innerhalb des angegebenen CIDR-Bereichs liegt.

Zusammenfassung der Felder

where field1 != 200 | fieldsummary includefields= field1 nulls=true

Berechnet grundlegende Statistiken für jedes Feld (Anzahl, eindeutige Anzahl, Min., Max, Durchschnitt, Standardwert und Mittelwert).

grok

grok email '.+@%{HOSTNAME:host}' | fields email, host

Analysiert ein Textfeld mit einem Grok-Muster und hängt die Ergebnisse an das Suchergebnis an.

Zeichenfolgenfunktionen

eval field1Len = LENGTH(field1) | fields field1Len

Integrierte Funktionen in PPL, mit denen Zeichenketten- und Textdaten in PPL-Abfragen bearbeitet und transformiert werden können. Zum Beispiel das Konvertieren von Groß- und Kleinschreibung, das Kombinieren von Zeichenketten, das Extrahieren von Teilen und das Bereinigen von Text.

Funktionen für Datum und Uhrzeit

eval newDate = ADDDATE(DATE('2020-08-26'), 1) | fields newDate

Integrierte Funktionen für die Verarbeitung und Transformation von Datums- und Zeitstempeldaten in PPL-Abfragen. Zum Beispiel date_add, date_format, datediff, date-sub, timestampadd, timestampdiff, current_timezone, utc_timestamp und current_date.

Bedingungsfunktionen

eval field2 = isnull(field1) | fields field2, field1, field3

Integrierte Funktionen, die nach bestimmten Feldbedingungen suchen und Ausdrücke bedingt auswerten. Wenn beispielsweise field1 null ist, wird field2 zurückgegeben.

Mathematische Funktionen

eval field2 = ACOS(field1) | fields field1

Integrierte Funktionen für die Durchführung mathematischer Berechnungen und Transformationen in PPL-Abfragen. Zum Beispiel abs (absoluter Wert), round (rundet Zahlen), sqrt (Quadratwurzel), pow (Potenzberechnung) und ceil (rundet auf die nächste Ganzzahl auf).

CryptoGraphic Funktionen

eval crypto = MD5(field)| head 1000

Um den Hash eines bestimmten Feldes zu berechnen

JSON-Funktionen

eval valid_json = json('[1,2,3,{"f1":1,"f2":[5,6]},4]') | fields valid_json

Integrierte Funktionen für den Umgang mit JSON, einschließlich Arrays, Extrahieren und Validieren. Zum Beispiel json_object, json_array, to_json_string, json_array_length, json_extract, json_keys und json_valid.

Gültigkeitsbereich der Abfrage

Das Einbeziehen von SOURCE in eine Abfrage ist eine nützliche Methode, um die Protokollgruppen anzugeben, die in eine Abfrage aufgenommen werden sollen, wenn Sie die AWS CLI OR-API zum Erstellen einer Abfrage verwenden. Der Befehl SOURCE wird nur in der AWS CLI AND-API unterstützt, nicht in der CloudWatch Konsole. Wenn Sie die CloudWatch Konsole verwenden, um eine Abfrage zu starten, verwenden Sie die Konsolenschnittstelle, um die Protokollgruppen sowie den Namen und Typ der Datenquelle anzugeben.

Der Quellbefehl von PPL unterstützt jetzt mehrere Möglichkeiten, sie anzugeben:

  1. Gruppe protokollieren

  2. Feldindizes — Neu

  3. Datenquelle und Datentyp — Neu

Protokollgruppe

Die Quellenauswahl für die Protokollgruppe kann verwendet werden, wenn Kunden wissen, welche Protokollgruppe (n) genau durchsucht werden muss

source = [lg:`/aws/lambda/my-function`] | where status = 200 | head 10

Feldindizes

Die auf Feldindexen basierende Quellauswahl reduziert die Menge der abgefragten Daten, indem die Ergebnisse auf indizierte Daten beschränkt werden, wenn Ihre Filter auf indizierte Felder abzielen. Die relevanten Protokollgruppen werden automatisch auf der Grundlage der im Befehl angegebenen Felder ausgewählt. filterIndex Weitere Informationen zu Feldindizes und deren Erstellung finden Sie unter Feldindizes erstellen, um die Abfrageleistung zu verbessern und das Scanvolumen zu reduzieren.

Wird verwendet, aws:fieldIndex um nur indizierte Daten zurückzugeben, indem eine Abfrage erzwungen wird, nur Protokollgruppen zu scannen, die für ein Feld indiziert sind, das Sie in der Abfrage angeben. Für diese Protokollgruppen, die in diesem Feld indexiert sind, wird die Abfrage weiter optimiert, indem die Protokollgruppen übersprungen werden, die keine Protokollereignisse enthalten, die das in der Abfrage für das indizierte Feld angegebene Feld enthalten. Das gescannte Volumen wird weiter reduziert, indem versucht wird, nur Protokollereignisse aus diesen Protokollgruppen zu scannen, die dem in der Abfrage für diesen Feldindex angegebenen Wert entsprechen. Weitere Informationen zu Feldindizes und deren Erstellung finden Sie unter Feldindizes erstellen, um die Abfrageleistung zu verbessern und das Scanvolumen zu reduzieren.

aws:fieldIndexWird in PPL verwendet, um anzugeben, welche Schlüssel-Wert-Paare als Indizes behandelt werden sollen. Die Syntax lautet wie folgt

source = [`aws:fieldIndex`="region", `region` = "us-west-2"] | where status = 200 | head 10

wobei

  1. `aws:fieldIndex`="region"identifiziert die Region als Feldindex.

    1. Hinweis: Statt = können Kunden IN verwenden, um mehrere Indizes anzugeben (Beispiel unten)

  2. `region`="us-west-2"identifiziert die anzuwendende Filterbedingung

    1. Hinweis: Statt = können Kunden IN verwenden, um mehrere Werte anzugeben (Beispiel unten)

Kunden können mehrere FieldIndexes wie folgt angeben

source = [`aws:fieldIndex` IN ("status", "region"), `status` = 200, `region` IN ("us-west-2", "us-east-1")] | head 10

Datenquelle und Typ

Die Datenquellen- und typbasierte Quellenauswahl kann verwendet werden, wenn Kunden wissen, welche Datenquellen genau abgefragt werden müssen. Diese Abfrage wird über eine oder mehrere Protokollgruppen ausgeführt, die die angegebene Datenquelle und den angegebenen Datentyp enthalten.

source = [ds:`data_source.type`] | where status = 200 | head 10

PPL wird für Datenquellenabfragen unterstützt

Um den Anwendungsfall für die Abfrage von Datenquellen in PPL zu unterstützen, können Sie die dynamische Quellenauswahlklausel verwenden. Mit dieser Syntax können Sie Datenquellen abfragen, indem Sie sie im Suchbefehl angeben. Sie können bis zu 10 Datenquellen angeben.

Syntax

source=[ds:`DataSource1.Type1`, ds:`DataSource2.Type2`, ...ds:`DataSourcen.Typen`]

Beispielabfrage

search source=[ds:`DataSource1.Type1`, ds:`DataSource2.Type2`] | fields field1, field2

Kombiniertes Beispiel

Kunden können alle Operatoren zur Quellenauswahl in beliebiger Reihenfolge angeben. Die Ergebnisse wären dann der Schnittpunkt aller angewandten Bedingungen.

Beispielsweise könnte/aws/lambda/my-function-1 mehrere Datenquellen und -typen enthalten, einschließlich einer Vielzahl von Indizes. Wenn die folgende Abfrage ausgeführt wurde, enthielten die zurückgegebenen Ergebnisse nur Ereignisse der Quelle und des Typs DataSource 1.Type1, die den Kriterien 'status' = 200 entsprechen.

search source=[ ds:`DataSource1.Type1`, lg:`/aws/lambda/my-function-1`, `aws:fieldIndex` IN ("status"), `status` = 200 ]

Einschränkungen

Die folgenden Einschränkungen gelten, wenn Sie OpenSearch PPL für Abfragen in Logs Insights verwenden. CloudWatch

  • Sie können die Befehle join oder subquery nicht mit Datenquellenabfragen verwenden.