View a markdown version of this page

OpenSearch Strukturierte Abfragesprache (SQL) - 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 Strukturierte Abfragesprache (SQL)

Dieser Abschnitt enthält eine grundlegende Einführung in das Abfragen von CloudWatch Protokollen mit OpenSearch SQL. Es bietet eine vertraute Option, wenn Sie es gewohnt sind, mit relationalen Datenbanken zu arbeiten. OpenSearch SQL bietet eine Teilmenge der SQL-Funktionen und ist daher eine gute Wahl für die Durchführung von Ad-hoc-Abfragen und Datenanalyseaufgaben. Mit OpenSearch SQL können Sie Befehle wie SELECT, FROM, WHERE, GROUP BY, HAVING und verschiedene andere SQL-Befehle und -Funktionen verwenden. Sie können JOINs über Protokollgruppen hinweg ausführen, Daten mithilfe von Unterabfragen zwischen Protokollgruppen korrelieren und die umfangreiche Palette an JSON-, mathematischen, Zeichenketten-, Bedingungs- und anderen SQL-Funktionen verwenden, um leistungsstarke Analysen von Protokoll- und Sicherheitsdaten durchzuführen.

Wird verwendet, filterIndex um nur indizierte Daten zurückzugeben, indem eine Abfrage erzwungen wird, nur Loggruppen zu scannen, die in einem Feld indexiert sind, das Sie in der Abfrage angeben. Reduzieren Sie das gescannte Volumen, indem Sie Protokollgruppen überspringen, die keine Protokollereignisse enthalten, die das in der Abfrage angegebene Feld enthalten, und nur Protokollgruppen scannen, die dem in der Abfrage angegebenen Wert für diesen Feldindex entsprechen. Wird verwendet, filterIndex um den Feldnamen zusammen mit dem Feldnamen und dem Wert anzugeben, um nur indizierte Daten abzufragen, die das angegebene Feld und den angegebenen Wert enthalten.

Sie können OpenSearch SQL für Abfragen von Protokollgruppen in der Standard-Log-Klasse verwenden. SQL unterstützt auch Abfragen mithilfe des Datenquellennamens und des Datenquellentyps.

Anmerkung

In der folgenden Tabelle sind die in CloudWatch Protokollen unterstützten SQL-Befehle und -Funktionen aufgeführt. Informationen zu allen OpenSearch SQL-Befehlen, einschließlich der Syntax, finden Sie im OpenSearch Service Developer Guide unter Unterstützte SQL-Befehle.

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

Unterstützte SQL-Befehle

Anmerkung

Ersetzen Sie in der Beispielabfragespalte nach <logGroup> Bedarf, je nachdem, welche Datenquelle Sie abfragen.

Befehl oder Funktion Beispielabfrage Description

SELECT

SELECT `@message`, Operation FROM `LogGroupA`

Zeigt projizierte Werte an.

FROM

SELECT `@message`, Operation FROM `LogGroupA`

Built-in Klausel, die die Quelltabellen oder -ansichten angibt, aus denen Daten abgerufen werden sollen, und unterstützt verschiedene Arten von Verknüpfungen und Unterabfragen.

WHERE

SELECT * FROM `LogGroupA` WHERE Operation = 'x'

Filtert Protokollereignisse auf der Grundlage der angegebenen Feldkriterien.

filterIndex

SELECT * FROM `filterIndex('region' = 'us-east-1')` WHERE status = 200 LIMIT 10;

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

GROUP BY

SELECT `@logStream`, COUNT(*) as log_count FROM `LogGroupA` GROUP BY `@logStream`

Gruppiert Protokollereignisse nach Kategorien und ermittelt den Durchschnitt anhand von Statistiken.

HAVING

SELECT `@logStream`, COUNT(*) as log_count FROM `LogGroupA` GROUP BY `@logStream` HAVING log_count > 100

Filtert die Ergebnisse anhand der Gruppierungsbedingungen.

ORDER BY

SELECT * FROM `LogGroupA` ORDER BY `@timestamp` DESC

Sortiert die Ergebnisse auf der Grundlage der Felder in der ORDER BY-Klausel. Sie können entweder in absteigender oder aufsteigender Reihenfolge sortieren.

JOIN

SELECT A.`@message`, B.`@timestamp`FROM `LogGroupA` as A INNER JOIN `LogGroupB` as B ON A.`requestId` = B.`requestId`

Verbindet die Ergebnisse zweier Tabellen auf der Grundlage gemeinsamer Felder. Inner JOIN oder Left Outer Join müssen angegeben werden

LIMIT

Select * from `LogGroupA` limit 10

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

Zeichenfolgenfunktionen

SELECT upper(Operation) , lower(Operation), Operation FROM `LogGroupA`

Built-in Funktionen in SQL, die Zeichenketten- und Textdaten in SQL-Abfragen bearbeiten und transformieren können. Zum Beispiel das Konvertieren von Groß- und Kleinschreibung, das Kombinieren von Zeichenketten, das Extrahieren von Teilen und das Bereinigen von Text.

Datumsfunktionen

SELECT current_date() as today, date_add(current_date(), 30) as thirty_days_later, last_day(current_date()) as month_end FROM `LogGroupA`

Built-in Funktionen für die Behandlung und Transformation von Datums- und Zeitstempeldaten in SQL-Abfragen. Zum Beispiel date_add, date_format, datediff und current_date.

Konditionale Funktionen

SELECT Operation, IF(Error > 0, 'High', 'Low') as error_category FROM `LogGroupA`;

Built-in Funktionen, die Aktionen auf der Grundlage bestimmter Bedingungen ausführen oder Ausdrücke bedingt auswerten. Zum Beispiel CASE und IF.

Aggregationsfunktionen

SELECT AVG(bytes) as bytesWritten FROM `LogGroupA`

Built-in Funktionen, die Berechnungen für mehrere Zeilen durchführen, um einen einzelnen zusammengefassten Wert zu erzeugen. Zum Beispiel SUM, COUNT, AVG, MAX und MIN.

JSON-Funktionen

SELECT get_json_object(json_column, '$.name') as name FROM `LogGroupA`

Built-in Funktionen zum Parsen, Extrahieren, Ändern und Abfragen von JSON-formatted Daten in SQL-Abfragen (z. B. from_json, to_json, get_json_object, json_tuple), die die Manipulation von JSON-Strukturen in Datensätzen ermöglichen.

Array-Funktionen

SELECT scores, size(scores) as length, array_contains(scores, 90) as has_90 FROM `LogGroupA`;

Built-in Funktionen für die Arbeit mit Array-Spalten in SQL-Abfragen, die Operationen wie den Zugriff auf, das Ändern und Analysieren von Array-Daten ermöglichen (z. B. size, explode, array_contains).

Fensterfunktionen

SELECT field1, field2, RANK() OVER (ORDER BY field2 DESC) as field2Rank FROM `LogGroupA`;

Built-in Funktionen, die Berechnungen für einen bestimmten Satz von Zeilen durchführen, die sich auf die aktuelle Zeile (das aktuelle Fenster) beziehen, und Operationen wie Rangfolge, laufende Summen und gleitende Durchschnitte ermöglichen. Zum Beispiel ROW_NUMBER, RANK, LAG und LEAD

Konvertierungs-Funktionen

SELECT CAST('123' AS INT) as converted_number, CAST(123 AS STRING) as converted_string FROM `LogGroupA`

Built-in Funktionen zum Konvertieren von Daten von einem Typ in einen anderen innerhalb von SQL-Abfragen, die Datentyptransformationen und Formatkonvertierungen ermöglichen. Zum Beispiel CAST, TO_DATE, TO_TIMESTAMP und BINARY.

Prädikatsfunktionen

SELECT scores, size(scores) as length, array_contains(scores, 90) as has_90 FROM `LogGroupA`;

Built-in Funktionen, die Bedingungen auswerten und boolesche Werte (true/false) auf der Grundlage bestimmter Kriterien oder Muster zurückgeben. Zum Beispiel IN, LIKE, BETWEEN, IS NULL und EXISTS.

Wählen Sie mehrere Protokollgruppen aus

SELECT lg1.field1, lg1.field2 from `logGroups( logGroupIdentifier: ['LogGroup1', 'LogGroup2'])` as lg1 where lg1.field3= "Success"

Ermöglicht es Ihnen, mehrere Protokollgruppen in einer SELECT-Anweisung anzugeben

Wählen Sie mehrere Datenquellen aus

SELECT ds1.field1, ds1.field2 from `dataSource(['DataSource1', 'DataSource2'])` as ds1 where ds1.field3= "Success"

Ermöglicht es Ihnen, mehrere Datenquellen in einer SELECT-Anweisung anzugeben

Unterstütztes SQL für Abfragen mit mehreren Protokollgruppen

Um den Anwendungsfall für die Abfrage mehrerer Protokollgruppen in SQL zu unterstützen, können Sie den Befehl verwenden. logGroups Mit dieser Syntax können Sie mehrere Protokollgruppen abfragen, indem Sie sie im FROM-Befehl angeben.

Syntax:

`logGroups( logGroupIdentifier: ['LogGroup1','LogGroup2', ...'LogGroupn'] )

In dieser Syntax können Sie bis zu 50 Protokollgruppen im logGroupIdentifier Parameter angeben. Verwenden Sie ARNs anstelle von LogGroup Namen, um auf Protokollgruppen in einem Überwachungskonto zu verweisen.

Beispielabfrage:

SELECT LG1.Column1, LG1.Column2 from `logGroups( logGroupIdentifier: ['LogGroup1', 'LogGroup2'] )` as LG1 WHERE LG1.Column1 = 'ABC'

Die folgende Syntax, die mehrere Loggruppen nach der FROM Anweisung beinhaltet, wird bei der Abfrage von CloudWatch Logs NICHT unterstützt.

SELECT Column1, Column2 FROM 'LogGroup1', 'LogGroup2', ...'LogGroupn' WHERE Column1 = 'ABC'

Unterstütztes SQL für Datenquellenabfragen

Um den Anwendungsfall für die Abfrage von Datenquellen in SQL zu unterstützen, können Sie den DataSource-Befehl verwenden. Mithilfe dieser Syntax können Sie Datenquellen abfragen, indem Sie sie im Befehl angeben. FROM Sie können bis zu 10 Datenquellen angeben.

Syntax

`dataSource( ['DataSource1', 'DataSource2', ...'DataSourcen'] )`

Beispiel für eine Abfrage

SELECT DS1.Column1, DS1.Column2 from `dataSource( ['DataSource1', 'DataSource2'] )` as DS1 WHERE DS1.Column1 = 'ABC'

Umfang der Abfrage

In der AWS CLI UND-API können Sie mithilfe der Protokollgruppe, der Datenquelle und des Datentyps sowie der Feldindizes angeben, welche Protokolle abgefragt werden sollen.

Protokollgruppe

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

SELECT * FROM `logGroups(logGroupIdentifier: ['/aws/lambda/my-function'])`;

Datenquelle und -typ

Kunden können ihre Protokolle anhand des Datenquellennamens und des Datenquellentyps abfragen.

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.

Um den Anwendungsfall für die Abfrage von Datenquellen in SQL zu unterstützen, können Sie den DataSource-Befehl verwenden. Mit dieser Syntax können Sie Datenquellen abfragen, indem Sie sie im FROM-Befehl angeben. Sie können bis zu 10 Datenquellen angeben.

Syntax:

`dataSource( ['DataSource1.Type1', 'DataSource2.Type2', ...'DataSourcen.Typen'] )`

Beispiel für eine Abfrage:

SELECT DS1.Column1, DS1.Column2 from `dataSource( ['DataSource1.Type1', 'DataSource2.Type2'] )` as DS1 WHERE DS1.Column1 = 'ABC'

Weitere Informationen zum Abfragen anhand von Datenquellen finden Sie unterVerwenden Sie Facetten, um Protokolle zu gruppieren und zu durchsuchen.

Kombiniertes Beispiel

Kunden können alle Operatoren zur Quellenauswahl innerhalb der Backticks in beliebiger Reihenfolge angeben. Die Ergebnisse würden dann auf der Schnittmenge aller angewendeten Bedingungen basieren.

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

SELECT * FROM ` logGroups(logGroupIdentifier: ['/aws/lambda/my-function']) filterIndex('status' = 200) dataSource(['DataSource1.Type1']) `;

Feldindexe

Die Auswahl der Index-based Feldquelle identifiziert automatisch relevante Protokollgruppen, wenn Ihre Filter auf indizierte Felder abzielen, wodurch das Scanvolumen und die Abfragelaufzeit reduziert werden.

Wird verwendet, filterIndex um nur indizierte Daten zurückzugeben, indem eine Abfrage erzwungen wird, nur Protokollgruppen zu scannen, die in einem von Ihnen in der Abfrage angegebenen Feld indexiert sind. Für diese Protokollgruppen, die in diesem Feld indiziert 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.

In SQL wird FilterIndex verwendet, um anzugeben, welche Schlüssel-Wert-Paare als Indizes behandelt werden sollen. Die Syntax lautet wie folgt

SELECT * FROM `filterIndex('region' = 'us-east-1')`;

wobei

  1. FilterIndex (...) gibt an, dass die darin enthaltenen Schlüsselwerte als Feldindizes behandelt werden sollen. Jedes Schlüssel-Wert-Paar wird durch ein Komma getrennt (Beispiel unten)

  2. 'region' = 'us-east-1' gibt die tatsächlich anzuwendende Bedingung an

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

Die Verwendung mehrerer FilterIndex-Werte würde die Bedingungen mit „AND“ kombinieren. Im Beispiel würden Logs abgefragt, die status=200 und der Region in us-east-1 oder us-west-2 entsprechen.

SELECT * FROM `filterIndex('status' = 200, 'region' IN ['us-east-1', 'us-west-2'])`;

Einschränkungen

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

  • Sie können nur einen JOIN in eine SELECT-Anweisung aufnehmen.

  • Sie können JOIN oder Unterabfragen nicht mit Datenquellenabfragen verwenden.

  • Nur eine Ebene verschachtelter Unterabfragen wird unterstützt.

  • Abfragen mit mehreren Anweisungen, die durch Semikolons (;) getrennt sind, werden nicht unterstützt.

  • Abfragen mit Feldnamen, die identisch sind, sich aber nur in der Groß- und Kleinschreibung unterscheiden (wie field1 und FIELD1), werden nicht unterstützt.

    Die folgende Abfrage wird beispielsweise nicht unterstützt:

    Select AWSAccountId, AwsAccountId from LogGroup

    Die folgende Abfrage wird jedoch unterstützt, da der Feldname (@logStream) in beiden Protokollgruppen identisch ist:

    Select a.`@logStream`, b.`@logStream` from Table A INNER Join Table B on a.id = b.id
  • Funktionen und Ausdrücke müssen mit Feldnamen arbeiten und Teil einer SELECT-Anweisung mit einer in der FROM-Klausel angegebenen Protokollgruppe sein.

    Diese Abfrage wird beispielsweise nicht unterstützt:

    SELECT cos(10) FROM LogGroup

    Diese Abfrage wird unterstützt:

    SELECT cos(field1) FROM LogGroup
  • Wenn Sie SQL- oder PPL-Befehle verwenden, schließen Sie bestimmte Felder in Backticks ein, um sie erfolgreich abzufragen. Backticks sind für Felder mit Sonderzeichen (nicht alphabetisch und nicht numerisch) erforderlich. Schließen Sie beispielsweise, und in Backticks @message einOperation.Export. Test::Field Sie müssen Felder mit rein alphabetischen Namen nicht in Backticks einschließen.

    Beispielabfrage mit einfachen Feldern:

    SELECT SessionToken, Operation, StartTime FROM `LogGroup-A` LIMIT 1000;

    Ähnliche Abfrage mit angehängten Backticks:

    SELECT `@SessionToken`, `@Operation`, `@StartTime` FROM `LogGroup-A` LIMIT 1000;