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.
Gli esempi in questa pagina eseguono query sulle visualizzazioni di log. Per eseguire query su una
vista Analytics, utilizza il seguente formato del percorso:
`analytics_view.PROJECT_ID.LOCATION.ANALYTICS_VIEW_ID`
.
Nell'espressione precedente, PROJECT_ID
è l'ID del tuo progetto, mentre
LOCATION
e ANALYTICS_VIEW_ID
sono la posizione e il nome della tua
vista Analytics.
Supporto del linguaggio SQL
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 o utilizzando lo strumento a riga di comando bq:
- Funzioni definite dall'utente JavaScript
- Funzioni BigQuery ML
- Variabili SQL
Best practice
Per impostare l'intervallo di tempo della query, ti consigliamo di utilizzare il selettore dell'intervallo di tempo. Ad esempio, per visualizzare i dati relativi all'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 mostra come
filtrare in base al timestamp:
-- Matches log entries whose timestamp is within the most recent 1 hour.
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.
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 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 nei bucket definiti dall'utente o per eseguire query sulla visualizzazione
_AllLogs
del bucket di log_Default
, vedi 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 Observability Analytics User (
roles/observability.analyticsUser
) sul progetto.
Come utilizzare le query in questa pagina
-
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.
Nel riquadro Query, fai clic su code SQL, poi copia e incolla una query nel riquadro Query SQL.
Prima di copiare una query, nella clausola
FROM
, sostituisci i seguenti campi- PROJECT_ID: l'identificatore del progetto.
- LOCATION: la posizione della visualizzazione log o della visualizzazione Analytics.
- 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.
Di seguito è riportato il formato della clausola
FROM
per una visualizzazione log:FROM `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
Gli esempi di log in questa pagina eseguono query su una visualizzazione log. Per interrogare una vista Analytics, utilizza il seguente formato del percorso:
`analytics_view.PROJECT_ID.LOCATION.ANALYTICS_VIEW_ID`
. Nell'espressione precedente,PROJECT_ID
è l'ID del tuo progetto, mentreLOCATION
eANALYTICS_VIEW_ID
sono la posizione e il nome della tua vista Analytics.
Per utilizzare le query mostrate in questo documento nella pagina BigQuery Studio o per utilizzare lo strumento a riga di comando bq, modifica la clausola FROM
e inserisci il percorso del set di dati collegato.
Ad esempio, per eseguire una query sulla vista _AllLogs
nel set di dati collegato denominato mydataset
che si trova nel progetto myproject
, il percorso è
myproject.mydataset._AllLogs
.
Casi d'uso comuni
Questa sezione elenca diversi casi d'uso comuni che potrebbero aiutarti a creare le tue query personalizzate.
Mostra le voci di log nel bucket di log predefinito
Per eseguire una query sul bucket _Default
, esegui la seguente query:
SELECT
timestamp, severity, resource.type, log_name, text_payload, proto_payload, json_payload
FROM
`PROJECT_ID.LOCATION._Default._AllLogs`
-- Limit to 1000 entries
LIMIT 1000
Estrai il valore del campo in base all'espressione regolare
Per estrarre un valore da una stringa utilizzando un'espressione regolare, utilizza la funzione
REGEXP_EXTRACT
:
SELECT
-- Display the timestamp, and the part of the name that begins with test.
timestamp, REGEXP_EXTRACT(JSON_VALUE(json_payload.jobName), r".*(test.*)$") AS name,
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
-- Get the value of jobName, which is a subfield in a JSON structure.
JSON_VALUE(json_payload.jobName) IS NOT NULL
ORDER BY timestamp DESC
LIMIT 20
Per saperne di più, consulta la
documentazione REGEXP_EXTRACT
.
Per le corrispondenze di sottostringa, come la query precedente, l'utilizzo della funzione
CONTAINS_SUBSTR
genera una query più efficiente.
Filtra le voci di log
Per applicare un filtro alla query, aggiungi una clausola WHERE
. La sintassi che
utilizzi in questa clausola dipende dal tipo di dati del campo. Questa sezione
fornisce diversi esempi per diversi tipi di dati.
Filtrare le voci di log in base al tipo di payload
Le voci di log possono avere uno dei tre tipi di payload. Per filtrare le voci di log in base al tipo di payload, utilizza una delle seguenti clausole:
Payload di testo
-- Matches log entries that have a text payload. WHERE text_payload IS NOT NULL
Payload JSON
-- Matches log entries that have a JSON payload. WHERE json_payload IS NOT NULL
Payload protocollo
-- Matches log entries that have a proto payload. -- Because proto_payload has a data type of RECORD, this statement tests -- whether a mandatory subfield exits. WHERE proto_payload.type IS NOT NULL
Nei risultati della query, i campi json_payload
e proto_payload
vengono visualizzati in formato JSON, che puoi esplorare.
Filtrare i dati di log per timestamp
Per filtrare le voci di log in base al timestamp, ti consigliamo di utilizzare il
selettore intervallo di tempo. Tuttavia, puoi specificare anche timestamp
nella
clausola WHERE
:
-- Matches log entries whose timestamp is within the most recent hour
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 i dati di log in base alla risorsa, aggiungi un'istruzione resource.type
alla clausola WHERE
:
-- Matches log entries whose resource type is gce_instance
WHERE resource.type = "gce_instance"
Filtra per gravità
Per filtrare i dati dei log in base a una gravità, aggiungi un'istruzione severity
alla clausola WHERE
:
-- Matches log entries whose severity is INFO or ERROR
WHERE severity IS NOT NULL AND severity IN ('INFO', 'ERROR')
Puoi anche filtrare le voci di log in base a severity_number
, che è un
numero intero. Ad esempio, la seguente clausola corrisponde a tutte le voci di log il cui
livello di gravità è almeno NOTICE
:
-- Matches log entries whose severity level is at least NOTICE
WHERE severity_number IS NOT NULL AND severity_number > 200
Per informazioni sui valori enumerati, consulta
LogSeverity
.
Filtra per nome del log
Per filtrare i dati dei log in base a un nome di log, aggiungi un'istruzione log_name
o log_id
alla clausola WHERE
:
Il nome del log specifica il percorso della risorsa:
-- Matches log entries that have the following log ID. WHERE log_name="projects/cloud-logs-test-project/logs/cloudaudit.googleapis.com%2Factivity"
L'ID log omette il percorso della risorsa:
-- Matches log entries that have the following log id. WHERE log_id = "cloudaudit.googleapis.com/data_access"
Filtrare le voci di log in base all'etichetta della risorsa
Le etichette delle risorse vengono memorizzate come struttura JSON. Per filtrare in base al valore di
un campo all'interno di una struttura JSON, utilizza la funzione
JSON_VALUE
:
SELECT
timestamp, JSON_VALUE(resource.labels.zone) AS zone, json_payload, resource, labels
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
-- Matches log entries whose resource type is gce_instance and whose zone is
-- us-central1-f. Because resource has data type JSON, you must use JSON_VALUE
-- to get the value for subfields, like zone.
resource.type = "gce_instance" AND
JSON_VALUE(resource.labels.zone) = "us-central1-f"
ORDER BY timestamp ASC
La query precedente si basa sul formato delle etichette delle risorse, così come sono archiviate in una voce di log. Di seguito è riportato un esempio del campo risorsa:
{
type: "gce_instance"
labels: {
instance_id: "1234512345123451"
project_id: "my-project"
zone: "us-central1-f"
}
}
Per informazioni su tutte le funzioni che possono recuperare e trasformare i dati JSON, consulta Funzioni JSON.
Filtra per richiesta HTTP
Per eseguire query solo sulle voci di log che hanno un campo di richiesta HTTP, utilizza la seguente clausola:
-- Matches log entries that have a HTTP request_method field.
-- Don't compare http_request to NULL. This field has a data type of RECORD.
WHERE http_request.request_method IS NOT NULL
Puoi anche utilizzare l'istruzione IN
:
-- Matches log entries whose HTTP request_method is GET or POST.
WHERE http_request.request_method IN ('GET', 'POST')
Filtrare per stato HTTP
Per eseguire query solo sulle voci di log con uno stato HTTP, utilizza la seguente clausola:
-- Matches log entries that have an http_request.status field.
WHERE http_request.status IS NOT NULL
Filtrare in base a un campo all'interno di un tipo di dati JSON
Per eseguire query solo sulle voci di log quando il campo secondario di un campo con un tipo di dati JSON
ha un valore specifico, estrai il valore utilizzando la funzione
JSON_VALUE
:
-- Compare the value of the status field to NULL.
WHERE JSON_VALUE(json_payload.status) IS NOT NULL
La clausola precedente è leggermente diversa dalla seguente:
-- Compare the status field to NULL.
WHERE json_payload.status IS NOT NULL
La prima clausola verifica se il valore del campo stato è NULL
. La
seconda clausola verifica se esiste il campo dello stato. Supponiamo che una visualizzazione di log contenga
due voci di log. Per una voce di log, il campo json_payload
ha il
seguente formato:
{
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"
}
La clausola WHERE json_payload.status IS NOT NULL
corrisponde a entrambe le voci di log.
Tuttavia, la clausola WHERE JSON_VALUE(json_payload.status) IS NOT NULL
corrisponde
solo alla seconda voce di log.
Raggruppare e aggregare le voci di log
Questa sezione si basa sugli esempi precedenti e mostra come raggruppare e aggregare le voci di log. Se non specifichi un raggruppamento, ma
un'aggregazione, viene stampato un 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 le voci di log per timestamp
Per raggruppare i dati in base al timestamp, utilizza la funzione
TIMESTAMP_TRUNC
,
che tronca un timestamp a una granularità specificata, ad esempio HOUR
:
SELECT
-- Truncate the timestamp by hour.
TIMESTAMP_TRUNC(timestamp, HOUR) AS hour,
JSON_VALUE(json_payload.status) AS status,
-- Count the number log entries in each group.
COUNT(*) AS count
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
-- Matches log entries that have a status field whose value isn't NULL.
json_payload IS NOT NULL AND JSON_VALUE(json_payload.status) IS NOT NULL
GROUP BY
-- Group by hour and status
hour,status
ORDER BY hour ASC
Per saperne di più, consulta la documentazione di TIMESTAMP_TRUNC
e le funzioni di data e ora.
Raggruppa le voci di log per risorsa
La seguente query mostra come raggruppare le voci di log per tipo di risorsa e poi contare il numero di voci di log in ogni gruppo:
SELECT
-- Count the number of log entries for each resource type
resource.type, COUNT(*) AS count
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
GROUP BY resource.type
LIMIT 100
Raggruppa le voci di log per gravità
La query seguente mostra come raggruppare le voci di log in base alla gravità e quindi contare il numero di voci di log in ogni gruppo:
SELECT
-- Count the number of log entries for each severity.
severity, COUNT(*) AS count
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
severity IS NOT NULL
GROUP BY severity
ORDER BY severity
LIMIT 100
Raggruppa le voci di log in base al relativo log_id
La query seguente mostra come raggruppare le voci di log in base all'ID log e quindi contare il numero di voci di log in ogni gruppo:
SELECT
-- Count the number of log entries for each log ID.
log_id, COUNT(*) AS count
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
GROUP BY log_id
ORDER BY count DESC
LIMIT 100
Calcola la latenza media delle richieste HTTP per URL
La seguente query mostra come raggruppare le voci di log in base all'URL e alla posizione della richiesta HTTP e quindi contare il numero di voci di log in ogni gruppo:
SELECT
-- Compute the average latency for each group. Because the labels field has a
-- data type of JSON, use JSON_VALUE to get the value of checker_location.
JSON_VALUE(labels.checker_location) AS location,
AVG(http_request.latency.seconds) AS secs, http_request.request_url
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
-- Matches log entries when the request_method field is GET.
http_request IS NOT NULL AND http_request.request_method IN ('GET')
GROUP BY
-- Group by request URL and location
http_request.request_url, location
ORDER BY location
LIMIT 100
Calcola i byte medi inviati per un test della subnet
La seguente query mostra come raggruppare le voci di log in base alla località specificata nelle etichette delle risorse e quindi calcolare il numero di voci di log in ogni gruppo:
SELECT
-- Compute the average number of bytes sent per location. Because labels has
-- a data type of JSON, use JSON_VALUE to get the value of the location field.
-- bytes_sent is a string. Must cast to a FLOAT64 before computing average.
JSON_VALUE(resource.labels.location) AS location,
AVG(CAST(JSON_VALUE(json_payload.bytes_sent) AS FLOAT64)) AS bytes
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
resource.type = "gce_subnetwork" AND json_payload IS NOT NULL
GROUP BY
-- Group by location
location
LIMIT 100
Per saperne di più, consulta Funzioni JSON e 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
:
SELECT
-- Extract the value that begins with test.
-- Count the number of log entries for each name.
REGEXP_EXTRACT(JSON_VALUE(json_payload.jobName), r".*(test.*)$") AS name,
COUNT(*) AS count
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
json_payload.jobName IS NOT NULL
GROUP BY name
ORDER BY count
LIMIT 20
Per altri esempi, consulta la
documentazione di REGEXP_EXTRACT
.
Ricerca tra le colonne
Questa sezione descrive due approcci che puoi utilizzare per cercare in più colonne della visualizzazione su cui stai eseguendo la query:
Ricerche basate su token: specifichi la posizione di ricerca, una query di ricerca e poi utilizzi la funzione
SEARCH
. Poiché la funzioneSEARCH
ha regole specifiche per la ricerca dei dati, ti consigliamo di leggere laSEARCH
documentazione.Ricerche basate su sottostringhe: fornisci la posizione di ricerca, una stringa letterale e poi utilizza la funzione
CONTAINS_SUBSTR
. Il sistema esegue un test senza distinzione tra maiuscole e minuscole per determinare se il valore letterale stringa esiste in un'espressione. La funzioneCONTAINS_SUBSTR
restituisceTRUE
quando esiste il valore letterale stringa eFALSE
in caso contrario. Il valore di ricerca deve essere un valore letteraleSTRING
, ma non il valore letteraleNULL
.
Ricerca basata su token in una visualizzazione log
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
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID` AS t
WHERE
-- Search data access audit logs for the IP address that matches 35.193.12.15.
-- The use of backticks prevents the string from being tokenized.
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
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 in una visualizzazione dei log
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 mostra i 20 più vecchi:
SELECT
timestamp, log_id, proto_payload, severity, resource.type, resource, labels
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID` AS t
WHERE
-- Search data access audit logs for the IP address that matches 35.193.12.15.
-- CONTAINS_SUBSTR performs a contains-test.
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
Eseguire query su più viste
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.
Quando esegui una query su più visualizzazioni, queste devono trovarsi nella stessa posizione. Ad esempio, se due viste si trovano nella posizione us-east1
, una query può interrogare entrambe le viste. Puoi anche eseguire query su due viste che si trovano nella multi-regione us
. Tuttavia, se la posizione di una visualizzazione è global
, questa può
trovarsi in qualsiasi posizione fisica. Pertanto, i join tra due viste che hanno
la posizione di global
potrebbero non riuscire.
Unire due visualizzazioni log in base all'ID traccia
Per combinare le informazioni di due tabelle, utilizza uno degli operatori join:
SELECT
-- Do an inner join on two tables by using the span ID and trace ID.
-- Don't join only by span ID, as this field isn't globally unique.
-- From the first view, show the timestamp, severity, and JSON payload.
-- From the second view, show the JSON payload.
a.timestamp, a.severity, a.json_payload, b.json_payload, a.span_id, a.trace
FROM `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_1` a
JOIN `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_2` b
ON
a.span_id = b.span_id AND
a.trace = b.trace
LIMIT 100
Esegui query su due visualizzazioni di log con un'istruzione union
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
:
SELECT
timestamp, log_name, severity, json_payload, resource, labels
-- Create a union of two log views
FROM(
SELECT * FROM `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_1`
UNION ALL
SELECT * FROM `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_2`
)
-- Sort the union by timestamp.
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.
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: