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 utilizzando 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 JOINs più gruppi di log, correlare i dati tra gruppi di log utilizzando sottoquery e utilizzare il ricco set di funzioni SQL JSON, matematiche, di stringa, condizionali e di altro tipo per eseguire analisi approfondite sui dati di log e di sicurezza.
Consente filterIndex di 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 contengono eventi di registro contenenti il campo specificato nella query e analizzando solo i gruppi di log che corrispondono al valore specificato nella query per questo indice di campo. filterIndexUtilizzatelo per 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'esecuzione di query utilizzando il nome dell'origine dati e il tipo di origine dati.
Nota
Nella tabella seguente sono elencati 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 sugli altri linguaggi di query che è possibile utilizzare, vedere CloudWatch Logs Insights, OpenSearch Service PPL e. CloudWatch Metrics Insights
Comandi SQL supportati
Nota
Nella colonna della query di esempio, sostituiscila secondo necessità a seconda della fonte di dati su cui stai interrogando. <logGroup>
| Comando o funzione | Query di esempio | Description |
|---|---|---|
|
SELECT |
|
Visualizza i valori proiettati. |
|
FROM |
|
Clausola incorporata che specifica le tabelle o le viste di origine da cui recuperare i dati, supportando vari tipi di join e sottoquery. |
|
WHERE |
|
Filtra gli eventi di registro in base ai criteri di campo forniti. |
|
FilterIndex |
|
Restituisce solo dati indicizzati, forzando una query a scansionare solo i gruppi di log indicizzati in un campo specificato nella query. |
|
GROUP BY |
|
I gruppi registrano gli eventi in base alla categoria e trovano la media in base alle statistiche. |
|
HAVING |
|
Filtra i risultati in base alle condizioni di raggruppamento. |
|
ORDER BY |
|
Ordina i risultati in base ai campi della clausola ORDER BY. È possibile ordinare in ordine decrescente o crescente. |
|
JOIN |
|
Unisce i risultati di due tabelle in base a campi comuni. È necessario specificare Inner JOIN o Left Outer Join |
|
LIMIT |
|
Limita i risultati della query visualizzati alle prime N righe. |
|
Funzioni stringa |
|
Funzioni integrate in SQL in grado di manipolare e trasformare stringhe e dati di testo all'interno di query SQL. Ad esempio, la conversione di maiuscole e minuscole, la combinazione di stringhe, l'estrazione di parti e la pulizia del testo. |
|
Funzioni di data |
|
Funzioni integrate 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 |
|
Funzioni integrate che eseguono azioni in base a condizioni specifiche o che valutano le espressioni in modo condizionale. Ad esempio, CASE e IF. |
|
Funzioni di aggregazione |
|
Funzioni integrate che eseguono calcoli su più righe per produrre un unico valore riepilogato. Ad esempio, SUM, COUNT, AVG, MAX e MIN. |
|
Funzioni JSON |
|
Funzioni integrate per l'analisi, l'estrazione, la modifica e l'interrogazione di dati in formato JSON 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 |
|
Funzioni integrate per lavorare con colonne di tipo array nelle query SQL, che consentono operazioni come l'accesso, la modifica e l'analisi dei dati dell'array (ad esempio, size, explode, array_contains). |
|
Funzioni finestra |
|
Funzioni integrate che eseguono calcoli su un insieme specifico di righe relative alla riga (finestra) corrente, abilitando operazioni come la classificazione, l'esecuzione dei totali e le medie mobili. Ad esempio, ROW_NUMBER, RANK, LAG e LEAD |
|
Funzioni di conversione |
|
Funzioni integrate per la conversione dei dati da un tipo all'altro all'interno delle query SQL, che consentono trasformazioni dei tipi di dati e conversioni di formato. Ad esempio, CAST, TO_DATE, TO_TIMESTAMP e BINARY. |
|
Funzioni di predicato |
|
Funzioni integrate che valutano le condizioni e restituiscono valori booleani (vero/falso) in base a criteri o modelli specifici. Ad esempio, IN, LIKE, BETWEEN, IS NULL ed EXISTS. |
|
Seleziona più gruppi di log |
|
Consente di specificare più gruppi di log in un'istruzione SELECT |
|
Seleziona più fonti di dati |
|
Consente di specificare più fonti di dati in un'istruzione SELECT |
SQL supportato per le multi-log-group interrogazioni
Per supportare il caso d'uso per l'interrogazione di più gruppi di log in SQL, è possibile utilizzare il logGroups comando. 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, usa ARNs al posto dei LogGroup nomi.
Query di esempio:
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 durante l' CloudWatch interrogazione dei log.
SELECT Column1, Column2 FROM 'LogGroup1', 'LogGroup2', ...'LogGroupn' WHERE Column1 = 'ABC'
SQL supportato per le interrogazioni sulle fonti di dati
Per supportare il caso d'uso per l'interrogazione di sorgenti di dati in SQL, è possibile utilizzare il comando DataSource. Utilizzando questa sintassi, è possibile interrogare le fonti di dati specificandole nel comando. FROM È possibile specificare fino a 10 fonti di 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, è possibile 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'])`;
Fonte e tipo di dati
I clienti possono interrogare i propri registri utilizzando il nome e il tipo di origine dati.
La selezione delle fonti basata sull'origine dei dati e sul tipo può essere utilizzata quando i clienti sanno quali fonti di 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 fonti di dati in SQL, è possibile utilizzare il comando DataSource. Utilizzando questa sintassi, è possibile interrogare le fonti di dati specificandole nel comando FROM. È possibile specificare fino a 10 fonti di dati.
Sintassi:
`dataSource( ['DataSource1.Type1', 'DataSource2.Type2', ...'DataSourcen.Typen'] )`
Query di esempio:
SELECT DS1.Column1, DS1.Column2 from `dataSource( ['DataSource1.Type1', 'DataSource2.Type2'] )` as DS1 WHERE DS1.Column1 = 'ABC'
Per ulteriori informazioni sulle interrogazioni in base alle fonti di dati, vedereUsa le sfaccettature per raggruppare ed esplorare i log.
Esempio per la combinazione
I clienti possono specificare tutti gli operatori di selezione della fonte 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 tra cui un'ampia varietà di indici. Quando viene eseguita la seguente query, i risultati restituiti avranno solo eventi di origine e tipo DataSource 1.Type1 e corrispondenti ai criteri di 'status' = 200.
SELECT * FROM ` logGroups(logGroupIdentifier: ['/aws/lambda/my-function']) filterIndex('status' = 200) dataSource(['DataSource1.Type1']) `;
Indici di campo
La selezione della fonte basata sull'indice di campo identifica automaticamente i gruppi di log pertinenti quando i filtri si rivolgono ai 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 contengono eventi di registro contenenti il campo specificato nella query per il campo indicizzato. Riduce ulteriormente il volume scansionato tentando di analizzare 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 di campo e su come crearli, consulta 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:
-
filterIndex (...) specifica, tratta i valori chiave al loro interno come indici di campo. Ogni coppia chiave-valore è separata da una virgola (esempio seguente)
-
'region' = 'us-east-1' specifica la condizione effettiva da applicare
-
Nota: invece di = i clienti possono utilizzare IN per specificare più valori (esempio seguente)
-
L'utilizzo di FilterIndex multiplo 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 query sull'origine dati.
-
È supportato solo un livello di sottoquery annidate.
-
Le query di istruzioni multiple separate da punto e virgola (;) non sono supportate.
-
Le query contenenti nomi di campo identici ma che differiscono solo per maiuscole e minuscole (ad esempio field1 e) non sono supportate. FIELD1
Ad esempio, la seguente query non è supportata:
Select AWSAccountId, AwsAccountId from LogGroupTuttavia, 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 LogGroupQuesta interrogazione è supportata:
SELECT cos(field1) FROM LogGroup -
Quando usi i comandi SQL o PPL, racchiudi alcuni campi tra i backtick per interrogarli correttamente. I backtick sono necessari per i campi con caratteri speciali (non alfabetici e non numerici). Ad esempio, racchiude e inserisce i segni di spunta rovesciati
@message.Operation.ExportTest::FieldNon è necessario racchiudere campi con nomi puramente alfabetici nei backtick.Query di esempio con campi semplici:
SELECT SessionToken, Operation, StartTime FROM `LogGroup-A` LIMIT 1000;Query simile con backtick aggiunti:
SELECT `@SessionToken`, `@Operation`, `@StartTime` FROM `LogGroup-A` LIMIT 1000;