Questo documento contiene query di esempio sulle voci di log archiviate nei
bucket di log di cui è stato eseguito l'upgrade per utilizzare Analisi dei log.
Su questi bucket puoi eseguire query SQL dalla pagina
Analisi dei log nella console Google Cloud . Per altri esempi, consulta i repository GitHub
logging-analytics-samples
e
security-analytics
.
Questo documento non descrive SQL o come instradare e archiviare le voci di log. Per informazioni su questi argomenti, consulta la sezione Passaggi successivi.
Prima di iniziare
Questa sezione descrive i passaggi che devi completare prima di poter utilizzare Log Analytics.
Configura i bucket di log
Assicurati che i bucket di log siano stati sottoposti all'upgrade per utilizzare Analisi dei log:
-
Nella console Google Cloud , vai alla pagina Archiviazione dei log:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Logging.
- Per ogni bucket di log con una visualizzazione dei log che vuoi interrogare, assicurati che la colonna Log Analytics disponibile mostri Apri. Se viene visualizzato il pulsante Esegui l'upgrade, fai clic su Esegui l'upgrade e completa la finestra di dialogo.
Configura ruoli e autorizzazioni IAM
Questa sezione descrive i ruoli o le autorizzazioni IAM necessari per utilizzare Log Analytics:
-
Per ottenere le autorizzazioni necessarie per utilizzare Log Analytics ed eseguire query sulle visualizzazioni log, chiedi all'amministratore di concederti i seguenti ruoli IAM sul progetto:
-
Per eseguire query sui bucket di log
_Required
e_Default
: Visualizzatore log (roles/logging.viewer
) -
Per eseguire query su tutte le visualizzazioni dei log in un progetto:
Logs View Accessor (
roles/logging.viewAccessor
)
Puoi limitare un'entità a una visualizzazione di log specifica aggiungendo una condizione IAM alla concessione del ruolo Accessore visualizzazione log effettuata a livello di progetto oppure aggiungendo un binding IAM al file dei criteri della visualizzazione di log. Per ulteriori informazioni, vedi Controllare l'accesso a una visualizzazione log.
Si tratta delle stesse autorizzazioni necessarie per visualizzare le voci di log nella pagina Esplora log. Per informazioni su ruoli aggiuntivi necessari per eseguire query sulle visualizzazioni dei bucket definiti dall'utente o per eseguire query sulla visualizzazione
_AllLogs
del bucket di log_Default
, consulta Ruoli Cloud Logging. -
Per eseguire query sui bucket di log
-
Per ottenere le autorizzazioni necessarie per eseguire query sulle visualizzazioni di analisi, chiedi all'amministratore di concederti il ruolo IAM Utente di analisi dell'osservabilità (
roles/observability.analyticsUser
) nel progetto.
Come utilizzare queste query
Per utilizzare le query mostrate in questo documento nella pagina Analisi dei log, sostituisci TABLE_NAME_OF_LOG_VIEW con il nome della tabella per la visualizzazione dei log o per la visualizzazione di Analytics su cui vuoi eseguire la query.
Per eseguire una query su una visualizzazione log, nella clausola
FROM
, utilizza il seguente formato:FROM `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
Per eseguire una query su una vista Analytics, nella clausola
FROM
, utilizza il seguente formato:FROM `analytics_view.PROJECT_ID.LOCATION.ANALYTICS_VIEW_ID`
Di seguito viene descritto il significato dei campi nelle espressioni precedenti:
- PROJECT_ID: l'identificatore del progetto.
- LOCATION: La posizione della visualizzazione dei log o della visualizzazione di analisi.
- BUCKET_ID: il nome o l'ID del bucket dei log.
- LOG_VIEW_ID: l'identificatore della visualizzazione dei log, che è limitato a 100 caratteri e può includere solo lettere, cifre, trattini bassi e trattini.
- ANALYTICS_VIEW_ID: l'ID della visualizzazione Analytics, che è limitato a 100 caratteri e può includere solo lettere, cifre, trattini bassi e trattini.
Se hai creato un set di dati BigQuery collegato,
puoi eseguire query sul set di dati collegato dalla pagina BigQuery Studio.
In questa pagina, sostituisci TABLE_NAME_OF_LOG_VIEW con il
percorso della tabella nel set di dati collegato.
Ad esempio, per eseguire una query sulla visualizzazione _AllLogs
nel set di dati collegato mydataset
che si trova nel progetto myproject
, imposta questo campo su
myproject.mydataset._AllLogs
.
Vai alla pagina Analisi dei log.
Per aprire la pagina Log Analytics:
-
Nella console Google Cloud , vai alla pagina Analisi dei log:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Logging.
Per identificare le visualizzazioni dei log e le visualizzazioni di analisi, vai al riquadro Visualizzazioni.
Le visualizzazioni dei log sono elencate nella sezione
Log, mentre le visualizzazioni di Analytics sono elencate nella sezione Visualizzazioni di Analytics.(Facoltativo) Per identificare lo schema per la visualizzazione log o per una visualizzazione Analytics, seleziona la visualizzazione log o la visualizzazione Analytics.
Viene visualizzato lo schema. Puoi utilizzare il campo Filtro per individuare campi specifici. Non puoi modificare lo schema.
Per informazioni su come accedere alla query predefinita per un elemento elencato nel riquadro Viste, consulta Eseguire query e analizzare i log con Analisi dei log.
Filtra log
Le query SQL determinano quali voci nella visualizzazione log elaborare, quindi le raggruppano ed eseguono operazioni di aggregazione. Quando non sono elencate operazioni di raggruppamento e aggregazione, il risultato della query include le righe selezionate dall'operazione di filtro. Gli esempi in questa sezione illustrano il filtraggio.
Filtra per ora
Per impostare l'intervallo di tempo della query, ti consigliamo di utilizzare il selettore dell'intervallo di tempo. Questo selettore viene utilizzato automaticamente quando una query
non specifica un campo timestamp
nella clausola WHERE
.
Ad esempio, per visualizzare i dati dell'ultima settimana, seleziona Ultimi 7 giorni dal
selettore dell'intervallo di tempo. Puoi anche utilizzare il selettore
dell'intervallo di tempo per specificare un'ora di inizio e di fine, specificare un'ora da visualizzare e
modificare i fusi orari.
Se includi un campo timestamp
nella clausola WHERE
, l'impostazione del selettore dell'intervallo di tempo non viene utilizzata. Il seguente esempio filtra i dati utilizzando la funzione TIMESTAMP_SUB
, che consente di specificare un intervallo di analisi a ritroso a partire dall'ora corrente:
WHERE
timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)
Per ulteriori informazioni su come filtrare in base all'ora, vedi Funzioni temporali e Funzioni di timestamp.
Filtra per risorsa
Per filtrare in base alla risorsa, aggiungi una limitazione resource.type
.
Ad esempio, la seguente query legge l'ora più recente di dati, poi
mantiene le righe il cui tipo di risorsa corrisponde a gce_instance
e poi ordina
e visualizza fino a 100 voci:
SELECT
timestamp, log_name, severity, json_payload, resource, labels
FROM
`TABLE_NAME_OF_LOG_VIEW`
WHERE
resource.type = "gce_instance"
ORDER BY timestamp ASC
LIMIT 100
Filtra per gravità
Puoi filtrare in base a una gravità specifica con una limitazione come
severity = 'ERROR'
. Un'altra opzione è utilizzare l'istruzione IN
e specificare un insieme di valori validi.
Ad esempio, la seguente query legge l'ora più recente di dati e
poi conserva solo le righe che contengono un campo severity
il cui valore è
'INFO'
o 'ERROR'
:
SELECT
timestamp, log_name, severity, json_payload, resource, labels
FROM
`TABLE_NAME_OF_LOG_VIEW`
WHERE
severity IS NOT NULL AND
severity IN ('INFO', 'ERROR')
ORDER BY timestamp ASC
LIMIT 100
La query precedente filtra in base al valore del campo severity
. Tuttavia,
puoi anche scrivere query che filtrano in base al valore numerico della gravità del log.
Ad esempio, se sostituisci le righe severity
con le seguenti righe,
la query restituisce tutte le voci di log il cui livello di gravità è almeno NOTICE
:
severity_number IS NOT NULL AND
severity_number > 200
Per informazioni sui valori enumerati, vedi
LogSeverity
.
Filtra per nome del log
Per filtrare in base al nome di un log, puoi aggiungere una limitazione al valore del campo
log_name
o log_id
. Il campo log_name
include il percorso della risorsa. ovvero questo campo ha valori come projects/myproject/logs/mylog
.
Il campo log_id
memorizza solo il nome del log, ad esempio mylog
.
Ad esempio, la seguente query legge i dati dell'ultima ora, poi
mantiene le righe in cui il valore nel campo log_id
è
cloudaudit.googleapis.com/data_access
, quindi ordina e visualizza i
risultati:
SELECT
timestamp, log_id, severity, json_payload, resource, labels
FROM
`TABLE_NAME_OF_LOG_VIEW`
WHERE
log_id = "cloudaudit.googleapis.com/data_access"
ORDER BY timestamp ASC
LIMIT 100
Filtra per etichetta risorsa
La maggior parte dei descrittori risorsa monitorata definisce le etichette utilizzate per identificare la risorsa specifica. Ad esempio, il descrittore di un'istanza Compute Engine include etichette per la zona, l'ID progetto e l'ID istanza. Quando viene scritta la voce di log, vengono assegnati valori a ogni campo. Di seguito è riportato un esempio:
{
type: "gce_instance"
labels: {
instance_id: "1234512345123451"
project_id: "my-project"
zone: "us-central1-f"
}
}
Poiché il tipo di dati del campo labels
è JSON, l'inclusione di una restrizione
come resource.labels.zone = "us-centra1-f"
in una query genera un errore
di sintassi. Per ottenere il valore di un campo con un tipo di dati JSON, utilizza la funzione
JSON_VALUE
.
Ad esempio, la seguente query legge i dati più recenti e poi conserva
le righe in cui la risorsa è un'istanza Compute Engine che si trova
nella zona us-central1-f
:
SELECT
timestamp, log_name, severity, JSON_VALUE(resource.labels.zone) AS zone, json_payload, resource, labels
FROM
`TABLE_NAME_OF_LOG_VIEW`
WHERE
resource.type = "gce_instance" AND
JSON_VALUE(resource.labels.zone) = "us-central1-f"
ORDER BY timestamp ASC
LIMIT 100
Per informazioni su tutte le funzioni che possono recuperare e trasformare i dati JSON, consulta Funzioni JSON.
Filtra per richiesta HTTP
Per filtrare la visualizzazione dei log in modo da includere solo le voci di log corrispondenti a una richiesta o una risposta HTTP, aggiungi una restrizione http_request IS NOT NULL
:
SELECT
timestamp, log_name, severity, http_request, resource, labels
FROM
`TABLE_NAME_OF_LOG_VIEW`
WHERE
http_request IS NOT NULL
ORDER BY timestamp
LIMIT 100
La seguente query include solo le righe corrispondenti alle richieste GET
o POST
:
SELECT
timestamp, log_name, severity, http_request, resource, labels
FROM
`TABLE_NAME_OF_LOG_VIEW`
WHERE
http_request IS NOT NULL AND
http_request.request_method IN ('GET', 'POST')
ORDER BY timestamp ASC
LIMIT 100
Filtra per stato HTTP
Per filtrare in base allo stato HTTP, modifica la clausola WHERE
in modo che richieda la definizione del campo http_request.status
:
SELECT
timestamp, log_name, http_request.status, http_request, resource, labels
FROM
`TABLE_NAME_OF_LOG_VIEW`
WHERE
http_request IS NOT NULL AND
http_request.status IS NOT NULL
ORDER BY timestamp ASC
LIMIT 100
Per determinare il tipo di dati archiviati in un campo, visualizza lo schema o mostra
il campo. I risultati della query precedente mostrano che il campo
http_request.status
memorizza valori interi.
Filtrare in base a un campo con un tipo JSON
Per estrarre un valore da una colonna il cui tipo di dati è JSON, utilizza la funzione
JSON_VALUE
.
Considera le seguenti query:
SELECT
json_payload
FROM
`TABLE_NAME_OF_LOG_VIEW`
WHERE
json_payload.status IS NOT NULL
e
SELECT
json_payload
FROM
`TABLE_NAME_OF_LOG_VIEW`
WHERE
JSON_VALUE(json_payload.status) IS NOT NULL
Le query precedenti testano il valore del campo json_payload
nella voce di log. Entrambe le query
ignorano le voci di log che non contengono un campo etichettato json_payload
.
La differenza tra queste due query è l'ultima riga, che definisce
cosa viene testato rispetto a NULL
. Ora, considera una visualizzazione di log con
due voci di log. Per una voce di log, il campo json_payload
ha il seguente
modulo:
{
status: {
measureTime: "1661517845"
}
}
Per l'altra voce di log, il campo json_payload
ha una struttura diversa:
{
@type: "type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished"
jobName: "projects/my-project/locations/us-central1/jobs/test1"
relativeUrl: "/food=cake"
status: "NOT_FOUND"
targetType: "APP_ENGINE_HTTP"
}
Entrambe le voci di log precedenti soddisfano la limitazione
json_payload.status IS NOT NULL
.
ovvero il risultato della prima query include entrambe le voci di log.
Tuttavia, quando la limitazione è JSON_VALUE(json_payload.status) IS NOT NULL
,
nel risultato della query viene inclusa solo la seconda voce di log.
Filtra per espressione regolare
Per restituire la sottostringa che corrisponde a un'espressione regolare, utilizza la funzione
REGEXP_EXTRACT
. Il tipo restituito di questa funzione è
STRING
o BYTES
.
La seguente query mostra le voci di log più recenti ricevute, conserva
quelle voci con un campo json_payload.jobName
e poi mostra
la parte del nome che inizia con test
:
SELECT
timestamp, REGEXP_EXTRACT(JSON_VALUE(json_payload.jobName), r".*(test.*)$") AS name,
FROM
`TABLE_NAME_OF_LOG_VIEW`
WHERE
json_payload.jobName IS NOT NULL
ORDER BY timestamp DESC
LIMIT 20
Per altri esempi, consulta la
documentazione di REGEXP_EXTRACT
.
Per altri esempi di espressioni regolari che puoi utilizzare, consulta Funzioni, operatori e condizioni.
La query mostrata in questo esempio non è efficiente. Per una corrispondenza di sottostringa, come
quella illustrata, utilizza la funzione CONTAINS_SUBSTR
.
Raggruppare e aggregare le voci di log
Questa sezione si basa sugli esempi precedenti e mostra come puoi
raggruppare e aggregare le voci di log. Se non specifichi un raggruppamento, ma
un'aggregazione, viene stampato un singolo risultato perché SQL considera tutte
le righe che soddisfano la clausola WHERE
come un unico gruppo.
Ogni espressione SELECT
deve essere inclusa nei campi del gruppo o essere aggregata.
Raggruppa per ora
Per raggruppare i dati in base al tempo, utilizza la funzione TIMESTAMP_TRUNC
,
che tronca un timestamp a una granularità specificata, ad esempio MINUTE
. Ad esempio, un timestamp di 15:30:11
, formattato come hours:minutes:seconds
, diventa 15:30:00
quando la granularità è impostata su MINUTE
.
La seguente query legge i dati ricevuti nell'intervallo specificato dal selettore dell'intervallo di tempo e poi conserva le righe in cui il valore del campo json_payload.status
non è NULL.
La query tronca il timestamp di ogni riga per ora, quindi raggruppa le righe in base al timestamp troncato e allo stato:
SELECT
TIMESTAMP_TRUNC(timestamp, HOUR) AS hour,
JSON_VALUE(json_payload.status) AS status,
COUNT(*) AS count
FROM
`TABLE_NAME_OF_LOG_VIEW`
WHERE
json_payload IS NOT NULL AND
JSON_VALUE(json_payload.status) IS NOT NULL
GROUP BY hour,status
ORDER BY hour ASC
Per altri esempi, consulta la
documentazione di TIMESTAMP_TRUNC
.
Per informazioni su altre funzioni basate sul tempo, consulta
Funzioni di data e ora.
Raggruppa per risorsa
La seguente query legge l'ora più recente dei dati e poi raggruppa le voci di log per tipo di risorsa. Conteggia quindi il numero di righe per ciascun tipo di risorsa e restituisce una tabella con due colonne. La prima colonna elenca il tipo di risorsa, mentre la seconda colonna indica il numero di righe per quel tipo di risorsa:
SELECT
resource.type, COUNT(*) AS count
FROM
`TABLE_NAME_OF_LOG_VIEW`
GROUP BY resource.type
LIMIT 100
Raggruppa per gravità
La seguente query legge l'ora più recente di dati e poi conserva le righe che hanno un campo gravità. La query raggruppa quindi le righe per gravità e conta il numero di righe per ogni gruppo:
SELECT
severity, COUNT(*) AS count
FROM
`TABLE_NAME_OF_LOG_VIEW`
WHERE
severity IS NOT NULL
GROUP BY severity
ORDER BY severity
LIMIT 100
Raggruppa per log_id
Il risultato della seguente query è una tabella con due colonne. La prima colonna elenca i nomi dei log e la seconda colonna elenca il numero di voci di log scritte nel log. La query ordina i risultati in base al conteggio delle voci:
SELECT
log_id, COUNT(*) AS count
FROM
`TABLE_NAME_OF_LOG_VIEW`
GROUP BY log_id
ORDER BY count DESC
LIMIT 100
Calcola la latenza media per la richiesta HTTP
La seguente query mostra il raggruppamento per più colonne e il calcolo
di un valore medio. La query raggruppa le righe in base all'URL contenuto nella richiesta HTTP e al valore del campo labels.checker_location
. Dopo aver
raggruppato le righe, la query calcola la latenza media per ogni gruppo:
SELECT
JSON_VALUE(labels.checker_location) AS location,
AVG(http_request.latency.seconds) AS secs, http_request.request_url
FROM
`TABLE_NAME_OF_LOG_VIEW`
WHERE
http_request IS NOT NULL AND
http_request.request_method IN ('GET')
GROUP BY http_request.request_url, location
ORDER BY location
LIMIT 100
Nell'espressione precedente, JSON_VALUE
è necessario per estrarre il valore
del campo labels.checker_location
perché il tipo di dati per
labels
è JSON.
Tuttavia, non utilizzi questa funzione per estrarre il valore dal campo
http_request.latency.seconds
. Il secondo campo ha un tipo di dati
intero.
Calcola i byte medi inviati per un test della subnet
La seguente query mostra come visualizzare il numero medio di byte inviati per località.
La query legge l'ora più recente dei dati e poi conserva solo le righe
la cui colonna del tipo di risorsa è gce_subnetwork
e la cui colonna json_payload
non è NULL. Successivamente, la query raggruppa le righe in base alla posizione della risorsa. A differenza dell'esempio precedente in cui i dati vengono archiviati come valore numerico, il valore del campo bytes_sent
è una stringa e pertanto devi convertire il valore in un FLOAT64
prima di calcolare la media:
SELECT JSON_VALUE(resource.labels.location) AS location,
AVG(CAST(JSON_VALUE(json_payload.bytes_sent) AS FLOAT64)) AS bytes
FROM
`TABLE_NAME_OF_LOG_VIEW`
WHERE
resource.type = "gce_subnetwork" AND
json_payload IS NOT NULL
GROUP BY location
LIMIT 100
Il risultato della query precedente è una tabella in cui ogni riga elenca una località e la media dei byte inviati per quella località.
Per informazioni su tutte le funzioni che possono recuperare e trasformare i dati JSON, consulta Funzioni JSON.
Per informazioni su CAST
e altre funzioni di conversione, consulta
Funzioni di conversione.
Conta le voci di log con un campo che corrisponde a un pattern
Per restituire la sottostringa che corrisponde a un'espressione regolare, utilizza la funzione
REGEXP_EXTRACT
. Il tipo restituito di questa funzione è
STRING
o BYTES
.
La seguente query conserva le voci di log per le quali il valore
del campo json_payload.jobName
non è NULL.
Poi, raggruppa le voci in base al suffisso del nome che inizia
con test
. Infine, la query conta il numero di voci in ogni gruppo:
SELECT
REGEXP_EXTRACT(JSON_VALUE(json_payload.jobName), r".*(test.*)$") AS name,
COUNT(*) AS count
FROM
`TABLE_NAME_OF_LOG_VIEW`
WHERE
json_payload.jobName IS NOT NULL
GROUP BY name
ORDER BY count
LIMIT 20
Per altri esempi, consulta la
documentazione di REGEXP_EXTRACT
.
Per altri esempi di espressioni regolari che puoi utilizzare, consulta Funzioni, operatori e condizioni.
Ricerca tra colonne
Questa sezione descrive due approcci diversi che puoi utilizzare per cercare in più colonne di una tabella.
Ricerca basata su token
Per cercare in una visualizzazione log le voci che corrispondono a un insieme di termini di ricerca,
utilizza la funzione SEARCH
. Questa funzione richiede due parametri:
dove cercare e la query di ricerca.
Poiché la funzione SEARCH
ha regole specifiche su come vengono cercati i dati,
ti consigliamo di leggere la SEARCH
documentazione.
La seguente query conserva solo le righe che hanno un campo che corrisponde esattamente a "35.193.12.15":
SELECT
timestamp, log_id, proto_payload, severity, resource.type, resource, labels
FROM
`TABLE_NAME_OF_LOG_VIEW` AS t
WHERE
proto_payload IS NOT NULL AND
log_id = "cloudaudit.googleapis.com/data_access" AND
SEARCH(t,"`35.193.12.15`")
ORDER BY timestamp ASC
LIMIT 20
Nella query precedente, i backtick racchiudono il valore da cercare. In questo modo, la funzione SEARCH
cerca una corrispondenza esatta tra un valore di campo e il valore tra gli apici inversi.
Quando gli apici inversi vengono omessi nella stringa di query, la stringa di query viene suddivisa
in base alle regole definite nella documentazione di SEARCH
.
Ad esempio, quando viene eseguita la seguente istruzione,
la stringa di query viene suddivisa in quattro token: "35", "193", "12" e "15":
SEARCH(t,"35.193.12.15")
L'istruzione SEARCH
precedente corrisponde a una riga quando un singolo campo
corrisponde a tutti e quattro i token. L'ordine dei token non è importante.
Puoi includere più istruzioni SEARCH
in una query. Ad esempio, nella
query precedente, puoi sostituire il filtro sull'ID log con un'istruzione
come la seguente:
SEARCH(t,"`cloudaudit.googleapis.com/data_access`")
L'istruzione precedente esegue la ricerca in ogni campo delle voci di log nella visualizzazione log,
mentre l'istruzione originale esegue la ricerca solo nel campo log_id
delle
voci di log.
Per eseguire più ricerche su più campi, separa le singole stringhe con uno spazio. Ad esempio, la seguente istruzione corrisponde alle righe in cui un campo contiene "Hello World", "happy" e "days":
SEARCH(t,"`Hello World` happy days")
Infine, puoi cercare campi specifici anziché un'intera tabella. Ad esempio, la seguente istruzione esegue la ricerca solo
nelle colonne denominate text_payload
e json_payload
:
SEARCH((text_payload, json_payload) ,"`35.222.132.245`")
Per informazioni su come vengono elaborati i parametri della funzione SEARCH
,
consulta la pagina di riferimento di BigQuery Funzioni di ricerca.
Ricerca di sottostringhe
Per eseguire un test senza distinzione tra maiuscole e minuscole per determinare se un valore esiste in un'espressione, utilizza la funzione CONTAINS_SUBSTR
.
Questa funzione restituisce TRUE
quando il valore esiste e
FALSE
in caso contrario. Il valore di ricerca deve essere un valore letterale STRING
, ma non il
valore letterale NULL
.
Ad esempio, la seguente query recupera tutte le voci di audit log degli accessi ai dati con un indirizzo IP specifico i cui timestamp rientrano in un intervallo di tempo specifico. Infine, la query ordina i risultati e poi visualizza i 20 più vecchi:
SELECT
timestamp, log_id, proto_payload, severity, resource.type, resource, labels
FROM
`TABLE_NAME_OF_LOG_VIEW` AS t
WHERE
proto_payload IS NOT NULL AND
log_id = "cloudaudit.googleapis.com/data_access" AND
CONTAINS_SUBSTR(t,"35.193.12.15")
ORDER BY timestamp ASC
LIMIT 20
La query precedente esegue un test di sottostringa. Pertanto, una riga contenente
"35.193.12.152" corrisponde all'istruzione CONTAINS_SUBSTR
.
Combinare i dati di più fonti
Le istruzioni di query analizzano una o più tabelle o espressioni e restituiscono le
righe di risultati calcolati. Ad esempio, puoi utilizzare le istruzioni di query per unire i risultati delle istruzioni SELECT
su tabelle o set di dati diversi in vari modi e poi selezionare le colonne dai dati combinati.
Combinare i dati di due tabelle con le unioni
Per combinare le informazioni di due tabelle, utilizza uno degli operatori join. Il tipo di join e la clausola condizionale che utilizzi determinano il modo in cui le righe vengono combinate ed eliminate.
La seguente query restituisce i campi json_payload
delle righe di
due tabelle diverse scritte dallo stesso intervallo di traccia. La query esegue un
inner JOIN
su due tabelle per le righe in cui i valori delle
colonne span_id
e trace
in entrambe le tabelle corrispondono. Da questo risultato,
la query seleziona i campi timestamp
, severity
e json_payload
provenienti da TABLE_NAME_OF_LOG_VIEW_1, il campo json_payload
da
TABLE_NAME_OF_LOG_VIEW_2 e i valori dei campi span_id
e trace
su cui sono state unite le due tabelle e restituisce fino a 100
righe:
SELECT
a.timestamp, a.severity, a.json_payload, b.json_payload, a.span_id, a.trace
FROM `TABLE_NAME_OF_LOG_VIEW_1` a
JOIN `TABLE_NAME_OF_LOG_VIEW_2` b
ON
a.span_id = b.span_id AND
a.trace = b.trace
LIMIT 100
Combinare più selezioni con le unioni
Per combinare i risultati di due o più istruzioni SELECT
ed eliminare
le righe duplicate, utilizza l'operatore UNION
. Per conservare le righe
duplicate, utilizza l'operatore UNION ALL
.
La seguente query legge l'ora più recente di dati da TABLE_NAME_OF_LOG_VIEW_1, unisce il risultato all'ora più recente di dati da TABLE_NAME_OF_LOG_VIEW_2, ordina i dati uniti in base al timestamp crescente e poi visualizza le 100 voci meno recenti:
SELECT
timestamp, log_name, severity, json_payload, resource, labels
FROM(
SELECT * FROM `TABLE_NAME_OF_LOG_VIEW_1`
UNION ALL
SELECT * FROM `TABLE_NAME_OF_LOG_VIEW_2`
)
ORDER BY timestamp ASC
LIMIT 100
Rimuovere le voci di log duplicate
Log Analytics non rimuove le voci di log duplicate prima dell'esecuzione di una query. Questo comportamento è diverso da quello che si verifica quando esegui query sulle voci di log utilizzando Esplora log, che rimuove le voci duplicate confrontando i campi relativi a nomi log, timestamp e ID inserimento.
Puoi utilizzare la convalida a livello di riga per rimuovere le voci di log duplicate.
Per saperne di più, vedi Risoluzione dei problemi: nei risultati di Log Analytics sono presenti voci di log duplicate.
Limitazioni
Le query utilizzate nella pagina Analisi dei log supportano le funzioni GoogleSQL con alcune eccezioni.
I seguenti comandi SQL non sono supportati per le query SQL eseguite utilizzando la pagina Analisi dei log:
- Comandi DDL e DML
- Funzioni definite dall'utente JavaScript
- Funzioni BigQuery ML
- Variabili SQL
I seguenti elementi sono supportati solo quando esegui query su un set di dati collegato utilizzando le pagine BigQuery Studio e Looker Studio e lo strumento a riga di comando bq:
- Funzioni definite dall'utente JavaScript
- Funzioni BigQuery ML
- Variabili SQL
Passaggi successivi
Per informazioni su come instradare e archiviare le voci di log, consulta i seguenti documenti:
- Crea un bucket di log
- Eseguire l'upgrade di un bucket per utilizzare Analisi dei log
- Collegare un bucket dei log a un set di dati BigQuery
- Configurare e gestire i sink
Per la documentazione di riferimento di SQL, consulta i seguenti documenti: