View a markdown version of this page

OpenSearch Structured Query Language (SQL) - CloudWatch Registri Amazon

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

OpenSearch Structured Query Language (SQL)

Questa sezione contiene un'introduzione di base all'interrogazione dei CloudWatch log tramite OpenSearch SQL. Fornisce un'opzione familiare se sei abituato a lavorare con database relazionali. OpenSearch SQL offre un sottoinsieme di funzionalità SQL, il che lo rende una buona scelta per eseguire query ad hoc e attività di analisi dei dati. Con OpenSearch SQL, è possibile utilizzare comandi come SELECT, FROM, WHERE, GROUP BY, HAVING e vari altri comandi e funzioni SQL. È possibile eseguire JOIN tra gruppi di log, correlare i dati tra gruppi di log utilizzando sottoquery e utilizzare il ricco set di funzioni JSON, matematiche, di stringa, condizionali e di altro tipo SQL per eseguire potenti analisi sui log e sui dati di sicurezza.

Utilizzalo filterIndex per restituire solo dati indicizzati, forzando una query a scansionare solo i gruppi di log indicizzati in un campo specificato nella query. Riduci il volume scansionato ignorando i gruppi di log che non hanno eventi di log contenenti il campo specificato nella query e solo i gruppi di log di scansione che corrispondono al valore specificato nella query per questo indice di campo. Consente filterIndex di specificare il nome del campo, insieme al nome e al valore del campo, per interrogare solo i dati indicizzati contenenti il campo e il valore specificati.

È possibile utilizzare OpenSearch SQL per le interrogazioni dei gruppi di log nella classe di log standard. SQL supporta anche l'interrogazione utilizzando il nome e il tipo di origine dati.

Nota

La tabella seguente elenca i comandi e le funzioni SQL supportati nei CloudWatch registri. Per informazioni su tutti i comandi OpenSearch SQL, inclusa la sintassi, vedere Comandi SQL supportati nella OpenSearch Service Developer Guide.

Per informazioni su altri linguaggi di interrogazione che è possibile utilizzare, vedere CloudWatch Logs Insights, OpenSearch Service PPL e. CloudWatch Metrics Insights

Comandi SQL supportati

Nota

Nella colonna di interrogazione di esempio, sostituisci <logGroup> se necessario in base all'origine dati su cui stai interrogando.

Comando o funzione Query di esempio Description

SELECT

SELECT `@message`, Operation FROM `LogGroupA`

Visualizza i valori proiettati.

FROM

SELECT `@message`, Operation FROM `LogGroupA`

Built-in clausola che specifica le tabelle o le viste di origine da cui recuperare i dati, supportando vari tipi di join e sottoquery.

WHERE

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

Filtra gli eventi di registro in base ai criteri di campo forniti.

FilterIndex

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

Restituisce solo i dati indicizzati, forzando una query a scansionare solo i gruppi di log indicizzati in un campo specificato nella query.

GROUP BY

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

I gruppi registrano gli eventi in base alla categoria e trovano la media in base alle statistiche.

HAVING

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

Filtra i risultati in base alle condizioni di raggruppamento.

ORDER BY

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

Ordina i risultati in base ai campi della clausola ORDER BY. È possibile eseguire l'ordinamento in ordine decrescente o crescente.

JOIN

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

Unisce i risultati di due tabelle in base a campi comuni. È necessario specificare Inner JOIN o Left Outer Join

LIMIT

Select * from `LogGroupA` limit 10

Limita i risultati dell'interrogazione visualizzati alle prime N righe.

Funzioni stringa

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

Built-in funzioni in SQL in grado di manipolare e trasformare dati di testo e stringhe all'interno di query SQL. Ad esempio, la conversione delle maiuscole e minuscole, la combinazione di stringhe, l'estrazione di parti e la pulizia del testo.

Funzioni di data

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 funzioni per la gestione e la trasformazione dei dati di data e ora nelle query SQL. Ad esempio, date_add, date_format, datediff e current_date.

Funzioni condizionali

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

Built-in funzioni che eseguono azioni in base a condizioni specificate o che valutano le espressioni in modo condizionale. Ad esempio, CASE e IF.

Funzioni di aggregazione

SELECT AVG(bytes) as bytesWritten FROM `LogGroupA`

Built-in funzioni che eseguono calcoli su più righe per produrre un singolo valore riepilogato. Ad esempio, SUM, COUNT, AVG, MAX e MIN.

Funzioni JSON

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

Built-in funzioni per l'analisi, l'estrazione, la modifica e l'interrogazione JSON-formatted dei dati all'interno delle query SQL (ad esempio from_json, to_json, get_json_object, json_tuple) che consentono la manipolazione delle strutture JSON nei set di dati.

Funzioni di array

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

Built-in funzioni per lavorare con colonne di tipo array nelle query SQL, consentendo operazioni come l'accesso, la modifica e l'analisi dei dati dell'array (ad esempio, size, explode, array_contains).

Funzioni finestra

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

Built-in funzioni che eseguono calcoli su un insieme specificato di righe relative alla riga corrente (finestra), abilitando operazioni come la classificazione, l'esecuzione dei totali e le medie mobili. Ad esempio, ROW_NUMBER, RANK, LAG e LEAD

Funzioni di conversione

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

Built-in funzioni per convertire i dati da un tipo all'altro all'interno delle query SQL, consentendo trasformazioni dei tipi di dati e conversioni di formato. Ad esempio, CAST, TO_DATE, TO_TIMESTAMP e BINARY.

Funzioni di predicato

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

Built-in funzioni che valutano le condizioni e restituiscono valori booleani () true/false in base a criteri o modelli specificati. Ad esempio, IN, LIKE, BETWEEN, IS NULL ed EXISTS.

Seleziona più gruppi di log

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

Consente di specificare più gruppi di log in un'istruzione SELECT

Seleziona più fonti di dati

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

Consente di specificare più origini dati in un'istruzione SELECT

SQL supportato per interrogazioni con più gruppi di log

Per supportare il caso d'uso per l'interrogazione di più gruppi di log in SQL, è possibile utilizzare il comando. logGroups Utilizzando questa sintassi, è possibile interrogare più gruppi di log specificandoli nel comando FROM.

Sintassi:

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

In questa sintassi, è possibile specificare fino a 50 gruppi di log nel parametro. logGroupIdentifier Per fare riferimento ai gruppi di log in un account di monitoraggio, utilizzate gli ARN anziché LogGroup i nomi.

Esempio di interrogazione:

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

La seguente sintassi che coinvolge più gruppi di log dopo l'FROMistruzione NON è supportata quando si esegue una query CloudWatch su Logs.

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

SQL supportato per le interrogazioni sulle origini dati

Per supportare il caso d'uso per l'interrogazione di origini dati in SQL, è possibile utilizzare il comando DataSource. Utilizzando questa sintassi, è possibile interrogare le origini dati specificandole nel comando. FROM È possibile specificare fino a 10 origini dati.

Sintassi

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

Query di esempio

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

Ambito della query

Nell'API AWS CLI and, puoi specificare i log da interrogare utilizzando il gruppo di log, l'origine e il tipo di dati e gli indici dei campi.

Gruppo di log

La selezione della fonte del gruppo di log può essere utilizzata quando i clienti sanno esattamente quali gruppi di log devono essere cercati

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

Origine e tipo di dati

I clienti possono interrogare i propri registri utilizzando il nome e il tipo di origine dati.

La selezione della fonte basata sull'origine dei dati e sul tipo può essere utilizzata quando i clienti sanno quali origini dati esatte devono essere interrogate. Questa query viene eseguita su uno o più gruppi di log che contengono l'origine e il tipo di dati specificati.

Per supportare il caso d'uso per l'interrogazione di origini dati in SQL, è possibile utilizzare il comando DataSource. Utilizzando questa sintassi, è possibile interrogare le origini dati specificandole nel comando FROM. È possibile specificare fino a 10 origini dati.

Sintassi:

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

Esempio di interrogazione:

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

Per ulteriori informazioni sull'interrogazione tramite origini dati, vedereUsa i facet per raggruppare ed esplorare i log.

Esempio per la combinazione

I clienti possono specificare tutti gli operatori di selezione delle fonti all'interno dei backtick in qualsiasi ordine e i risultati si baseranno sull'intersezione di tutte le condizioni applicate.

Ad esempio,/aws/lambda/my-function-1 potrebbe contenere più fonti e tipi di dati, inclusa un'ampia varietà di indici. Quando viene eseguita la query seguente, i risultati restituiti conterranno solo eventi di origine e tipo DataSource1.Type1 e corrispondenti ai criteri di 'status' = 200.

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

Indici dei campi

La selezione dell' Index-based origine dei campi identifica automaticamente i gruppi di log pertinenti quando i filtri hanno come target i campi indicizzati, riducendo il volume di scansione e il tempo di esecuzione delle query.

filterIndexDa utilizzare per restituire solo dati indicizzati, forzando una query a scansionare solo i gruppi di log indicizzati su un campo specificato nella query. Per questi gruppi di log indicizzati in questo campo, ottimizza ulteriormente la query ignorando i gruppi di log che non hanno eventi di registro contenenti il campo specificato nella query per il campo indicizzato. Riduce ulteriormente il volume scansionato tentando di scansionare solo gli eventi di registro di questi gruppi di log che corrispondono al valore specificato nella query per questo indice di campo. Per ulteriori informazioni sugli indici dei campi e su come crearli, vedi Creare indici di campo per migliorare le prestazioni delle query e ridurre il volume di scansione.

In SQL, filterIndex viene utilizzato per specificare quali coppie chiave-valore devono essere trattate come indici. La sintassi è la seguente

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

dove:

  1. FilterIndex (...) specifica, tratta i valori chiave al loro interno come indici di campo. Ogni coppia chiave-valore è separata da una virgola (esempio sotto)

  2. 'region' = 'us-east-1' specifica la condizione effettiva da applicare

    1. Nota: invece di = i clienti possono utilizzare IN per specificare più valori (esempio sotto)

L'utilizzo di più FilterIndex combinerebbe le condizioni utilizzando «AND». Nell'esempio, verrebbero interrogati i log che corrispondono a status=200 e region in us-east-1 o us-west-2.

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

Restrizioni

Le seguenti restrizioni si applicano quando si utilizza SQL per eseguire query in Logs Insights. OpenSearch CloudWatch

  • È possibile includere un solo JOIN in un'istruzione SELECT.

  • Non è possibile utilizzare JOIN o sottoquery con le query sull'origine dati.

  • È supportato un solo livello di sottoquery annidate.

  • Le interrogazioni con più istruzioni separate da punto e virgola (;) non sono supportate.

  • Le interrogazioni contenenti nomi di campo identici ma diversi solo per le maiuscole e minuscole (come field1 e FIELD1) non sono supportate.

    Ad esempio, la seguente query non è supportata:

    Select AWSAccountId, AwsAccountId from LogGroup

    Tuttavia, la seguente query è supportata perché il nome del campo (@logStream) è identico in entrambi i gruppi di log:

    Select a.`@logStream`, b.`@logStream` from Table A INNER Join Table B on a.id = b.id
  • Le funzioni e le espressioni devono operare sui nomi dei campi e far parte di un'istruzione SELECT con un gruppo di log specificato nella clausola FROM.

    Ad esempio, questa query non è supportata:

    SELECT cos(10) FROM LogGroup

    Questa query è supportata:

    SELECT cos(field1) FROM LogGroup
  • Quando usi i comandi SQL o PPL, racchiudi determinati campi tra backtick per interrogarli correttamente. I backtick sono necessari per i campi con caratteri speciali (non alfabetici e non numerici). Ad esempio, @message racchiudi e tra i backtick. Operation.Export Test::Field Non è necessario racchiudere i campi con nomi puramente alfabetici nei backtick.

    Esempio di interrogazione con campi semplici:

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

    Query simile con i backtick aggiunti:

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