Dieses Dokument enthält Beispielabfragen für Logeinträge, die in
Log-Buckets, die für die Verwendung von Loganalysen aktualisiert wurden.
Für diese Buckets können Sie SQL-Abfragen über die
Loganalysen in der Google Cloud Console. Weitere Beispiele finden Sie in der
logging-analytics-samples
und die
security-analytics
GitHub-Repositories.
In diesem Dokument werden weder SQL noch das Weiterleiten und Speichern von Logeinträgen beschrieben. Für Informationen zu diesen Themen finden Sie im Abschnitt Weitere Informationen.
Hinweise
So verwenden Sie die in diesem Dokument gezeigten Abfragen auf der Seite Loganalysen: Ersetzen Sie TABLE durch den Namen der Tabelle, zu der Ansicht hinzu, die Sie abfragen möchten. Der Tabellenname hat das Format
project_ID.region.bucket_ID.view_ID
Sie finden den Tabellennamen für eine auf der Seite Loganalysen ansehen die Standardabfrage für ein Log view listet den Tabellennamen in derFROM
-Anweisung auf. Für wie Sie auf die Standardabfrage zugreifen, Siehe Logansicht abfragen.Um die in diesem Dokument gezeigten Abfragen für die BigQuery Studio, ersetzen Sie TABLE durch den Pfad zur Tabelle im verknüpften Dataset. So können Sie beispielsweise die Ansicht
_AllLogs
des verknüpften Datasetsmydataset
abfragen. die sich im Projektmyproject
befindet, legen Sie dieses Feld aufmyproject.mydataset._AllLogs
:Öffnen Sie in der Google Cloud Console die Seite BigQuery:
Sie können diese Seite auch über die Suchleiste finden.
So öffnen Sie die Seite Loganalysen:
-
Rufen Sie in der Google Cloud Console die Seite Loganalysen auf:
Wenn Sie diese Seite über die Suchleiste suchen, wählen Sie das Ergebnis aus, dessen Zwischenüberschrift Monitoring ist.
Optional: So ermitteln Sie das Tabellenschema für die Logansicht: in der Liste Logansichten nach der gewünschten Ansicht und wählen Sie Name der Ansicht.
Das Schema für die Tabelle wird angezeigt. Über das Feld Filter bestimmte Felder zu finden. Sie können das Schema nicht ändern.
-
Logs filtern
SQL-Abfragen bestimmen, welche Zeilen der Tabelle verarbeitet werden sollen, und gruppieren und Aggregatvorgänge ausführen. Wenn keine Gruppierung und Aggregation enthält, enthält das Ergebnis der Abfrage die Zeilen, die vom Filtervorgang. Die Beispiele in diesem Abschnitt veranschaulichen die Filterung.
Nach Uhrzeit filtern
Zum Festlegen des Zeitraums für Ihre Abfrage sollten Sie
die Zeitraumauswahl. Diese Auswahl wird automatisch verwendet,
gibt in der WHERE
-Klausel kein timestamp
-Feld an.
Um beispielsweise die Daten für die vergangene Woche anzuzeigen, wählen Sie Letzte 7 Tage
die Zeitraumauswahl. Sie können auch den Zeitraum
die Start- und Endzeit sowie die Uhrzeit für die Besichtigung und
Zeitzonen zu ändern.
Wenn Sie in die WHERE
-Klausel das Feld timestamp
einfügen, gibt der Zeitraum
wird nicht verwendet. Im folgenden Beispiel werden die Daten nach
Mit der Funktion TIMESTAMP_SUB
, mit der Sie ein Lookback-Window angeben können,
Intervall aus der aktuellen Zeit:
WHERE
timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)
Weitere Informationen zum Filtern nach Zeit finden Sie unter Zeitfunktionen und Zeitstempelfunktionen.
Nach Ressource filtern
Fügen Sie die Einschränkung resource.type
hinzu, um nach Ressource zu filtern.
Die folgende Abfrage liest beispielsweise die Daten der letzten Stunde und
behält die Zeilen bei, deren Ressourcentyp gce_instance
entspricht, und sortiert dann
und bis zu 100 Einträge werden angezeigt:
SELECT
timestamp, log_name, severity, json_payload, resource, labels
FROM
`TABLE`
WHERE
resource.type = "gce_instance"
ORDER BY timestamp ASC
LIMIT 100
Nach Schweregrad filtern
Sie können nach einem bestimmten Schweregrad filtern, z. B. mit einer Einschränkung wie
severity = 'ERROR'
Eine weitere Option ist die Verwendung der IN
-Anweisung
und geben eine Reihe gültiger Werte an.
Die folgende Abfrage liest beispielsweise die Daten der letzten Stunde und
behält dann nur die Zeilen bei, die ein severity
-Feld mit dem Wert
entweder 'INFO'
oder 'ERROR'
:
SELECT
timestamp, log_name, severity, json_payload, resource, labels
FROM
`TABLE`
WHERE
severity IS NOT NULL AND
severity IN ('INFO', 'ERROR')
ORDER BY timestamp ASC
LIMIT 100
Bei der vorherigen Abfrage wird nach dem Wert des Felds severity
gefiltert. Sie können jedoch
Sie können auch Abfragen schreiben, die nach dem numerischen Wert des Logschweregrads filtern.
Wenn Sie beispielsweise die severity
-Zeilen durch die folgenden Zeilen ersetzen,
Die Abfrage gibt alle Logeinträge zurück, deren Schweregrad mindestens NOTICE
ist:
severity_number IS NOT NULL AND
severity_number > 200
Informationen zu den Aufzählungswerten finden Sie unter
LogSeverity
Nach Logname filtern
Um nach einem Lognamen zu filtern, können Sie eine Einschränkung für den Wert des
log_name
oder log_id
. Das Feld log_name
enthält die Ressource
Pfad. Das bedeutet, dass dieses Feld Werte wie projects/myproject/logs/mylog
enthält.
Im Feld log_id
wird nur der Logname gespeichert, z. B. mylog
.
Die folgende Abfrage liest beispielsweise die Daten der letzten Stunde und
behält die Zeilen bei, in denen der Wert im Feld log_id
gleich
cloudaudit.googleapis.com/data_access
. Anschließend werden die
Ergebnisse:
SELECT
timestamp, log_id, severity, json_payload, resource, labels
FROM
`TABLE`
WHERE
log_id = "cloudaudit.googleapis.com/data_access"
ORDER BY timestamp ASC
LIMIT 100
Nach Ressourcenlabel filtern
Die meisten überwachten Ressourcendeskriptoren definieren Labels, mit denen die zu einer bestimmten Ressource. Der Deskriptor für eine Compute Engine-Instanz enthält Labels für die Zone, die Projekt-ID und die Instanz-ID. Wenn der Parameter Protokolleintrag geschrieben wird, werden jedem Feld Werte zugewiesen. Folgendes ist Beispiel:
{
type: "gce_instance"
labels: {
instance_id: "1234512345123451"
project_id: "my-project"
zone: "us-central1-f"
}
}
Weil der Datentyp des Felds labels
JSON ist, einschließlich einer Einschränkung
wie resource.labels.zone = "us-centra1-f"
in einer Abfrage führt zu einer Syntax
Fehler. Um den Wert eines Felds mit dem Datentyp JSON abzurufen, verwenden Sie die Funktion
JSON_VALUE
Mit der folgenden Abfrage werden beispielsweise die neuesten Daten gelesen und dann
in denen die Ressource eine Compute Engine-Instanz ist,
befindet sich in der Zone us-central1-f
:
SELECT
timestamp, log_name, severity, JSON_VALUE(resource.labels.zone) AS zone, json_payload, resource, labels
FROM
`TABLE`
WHERE
resource.type = "gce_instance" AND
JSON_VALUE(resource.labels.zone) = "us-central1-f"
ORDER BY timestamp ASC
LIMIT 100
Informationen zu allen Funktionen, die JSON abrufen und transformieren können finden Sie unter JSON-Funktionen.
Nach HTTP-Anfrage filtern
Um die Tabelle so zu filtern, dass nur Zeilen angezeigt werden, die einer HTTP-Anfrage entsprechen
oder antworten Sie, fügen Sie eine Einschränkung vom Typ „http_request IS NOT NULL
“ hinzu:
SELECT
timestamp, log_name, severity, http_request, resource, labels
FROM
`TABLE`
WHERE
http_request IS NOT NULL
ORDER BY timestamp
LIMIT 100
Die folgende Abfrage enthält nur Zeilen, die GET
oder POST
entsprechen
Anfragen:
SELECT
timestamp, log_name, severity, http_request, resource, labels
FROM
`TABLE`
WHERE
http_request IS NOT NULL AND
http_request.request_method IN ('GET', 'POST')
ORDER BY timestamp ASC
LIMIT 100
Nach HTTP-Status filtern
Ändern Sie zum Filtern nach HTTP-Status die WHERE
-Klausel so, dass Folgendes erforderlich ist:
Legen Sie das Feld http_request.status
fest:
SELECT
timestamp, log_name, http_request.status, http_request, resource, labels
FROM
`TABLE`
WHERE
http_request IS NOT NULL AND
http_request.status IS NOT NULL
ORDER BY timestamp ASC
LIMIT 100
Um den Typ der in einem Feld gespeicherten Daten zu ermitteln, rufen Sie das Schema auf oder zeigen Sie
auf dem Feld. Die Ergebnisse der vorherigen Abfrage zeigen,
Im Feld http_request.status
werden Ganzzahlwerte gespeichert.
Nach einem Feld mit einem JSON-Typ filtern
Um einen Wert aus einer Spalte mit dem Datentyp JSON zu extrahieren, verwenden Sie die Funktion
JSON_VALUE
Betrachten Sie die folgenden Abfragen:
SELECT
json_payload
FROM
`TABLE`
WHERE
json_payload.status IS NOT NULL
und
SELECT
json_payload
FROM
`TABLE`
WHERE
JSON_VALUE(json_payload.status) IS NOT NULL
Bei den vorherigen Abfragen wird der Wert der Spalte json_payload
getestet. der Inhalt
dieser Spalte wird durch den Inhalt eines Logeintrags bestimmt. Beide Abfragen
Zeilen verwerfen, die die Spalte json_payload
nicht enthalten.
Der Unterschied zwischen diesen beiden Abfragen
wird in der letzten Zeile angegeben.
was mit NULL
verglichen wird. Betrachten Sie nun eine Tabelle mit zwei Zeilen. In einem
Zeile hat die Spalte json_payload
das folgende Format:
{
status: {
measureTime: "1661517845"
}
}
In der anderen Zeile hat die Spalte json_payload
eine andere Struktur:
{
@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"
}
Beide vorherigen Zeilen erfüllen die Einschränkung
json_payload.status IS NOT NULL
Das heißt, das Ergebnis der Abfrage enthält beide Zeilen.
Lautet die Einschränkung jedoch JSON_VALUE(json_payload.status) IS NOT NULL
,
nur die zweite Zeile im Ergebnis enthalten ist.
Nach regulärem Ausdruck filtern
Um den Teilstring zurückzugeben, der mit einem regulären Ausdruck übereinstimmt, verwenden Sie die Funktion
REGEXP_EXTRACT
Der Rückgabetyp dieser Funktion ist
entweder STRING
oder BYTES
.
Die folgende Abfrage zeigt die neuesten empfangenen Logeinträge an, behält
Einträge mit dem Feld json_payload.jobName
und zeigt dann
Teil des Namens, der mit test
beginnt:
SELECT
timestamp, REGEXP_EXTRACT(JSON_VALUE(json_payload.jobName), r".*(test.*)$") AS name,
FROM
`TABLE`
WHERE
json_payload.jobName IS NOT NULL
ORDER BY timestamp DESC
LIMIT 20
Weitere Beispiele finden Sie in der
Dokumentation zu REGEXP_EXTRACT
Beispiele für reguläre Ausdrücke, die
die Sie verwenden können, siehe Funktionen, Operatoren und Bedingungen.
Die in diesem Beispiel gezeigte Abfrage ist nicht effizient. Für eine Teilstring-Übereinstimmung wie
verwenden Sie die Funktion CONTAINS_SUBSTR
.
Logeinträge gruppieren und zusammenfassen
Dieser Abschnitt baut auf den vorherigen Beispielen auf und zeigt, wie Sie
Tabellenzeilen gruppieren und aggregieren. Wenn Sie keine Gruppierung angeben,
eine Aggregation angeben, wird ein einzelnes Ergebnis ausgegeben, da SQL alle
Zeilen, die die WHERE
-Klausel erfüllen, als einzelne Gruppe.
Jeder SELECT
-Ausdruck muss in den Gruppenfeldern enthalten oder aggregiert sein.
Nach Zeit gruppieren
Um Daten nach Zeit zu gruppieren, verwenden Sie die Funktion TIMESTAMP_TRUNC
.
, der einen Zeitstempel auf einen bestimmten Detaillierungsgrad wie MINUTE
kürzt. Für
Beispiel einen Zeitstempel von 15:30:11
, der folgendermaßen formatiert ist:
hours:minutes:seconds
wird zu 15:30:00
, wenn der Detaillierungsgrad festgelegt ist:
MINUTE
.
Die folgende Abfrage liest die in dem durch
die Zeitraumauswahl und behält dann
Zeilen, in denen der Wert des Felds json_payload.status
nicht NULL ist.
Die Abfrage kürzt den Zeitstempel in jeder Zeile um Stunde und gruppiert dann
Zeilen mit dem abgeschnittenen Zeitstempel und Status:
SELECT
TIMESTAMP_TRUNC(timestamp, HOUR) AS hour,
JSON_VALUE(json_payload.status) AS status,
COUNT(*) AS count
FROM
`TABLE`
WHERE
json_payload IS NOT NULL AND
JSON_VALUE(json_payload.status) IS NOT NULL
GROUP BY hour,status
ORDER BY hour ASC
Weitere Beispiele finden Sie in der
Dokumentation zu TIMESTAMP_TRUNC
Informationen zu anderen zeitbasierten Funktionen finden Sie unter
Datum/Uhrzeit-Funktionen:
Nach Ressource gruppieren
Die folgende Abfrage liest die Daten der letzten Stunde und gruppiert dann Zeilen nach Ressourcentyp. Dann wird die Anzahl der Zeilen für jeden Typ gezählt, und gibt eine Tabelle mit zwei Spalten zurück. In der ersten Spalte wird die Ressource und die zweite Spalte die Anzahl der Zeilen für diesen Ressourcentyp:
SELECT
resource.type, COUNT(*) AS count
FROM
`TABLE`
GROUP BY resource.type
LIMIT 100
Nach Schweregrad gruppieren
Die folgende Abfrage liest die Daten der letzten Stunde und behält dann Zeilen bei mit einem Feld für den Schweregrad. Die Abfrage gruppiert die Zeilen dann nach Schweregrad und zählt die Anzahl der Zeilen für jede Gruppe:
SELECT
severity, COUNT(*) AS count
FROM
`TABLE`
WHERE
severity IS NOT NULL
GROUP BY severity
ORDER BY severity
LIMIT 100
Nach log_id
gruppieren
Das Ergebnis der folgenden Abfrage ist eine Tabelle mit zwei Spalten. Die erste enthält die Log-Namen und in der zweiten Spalte die Anzahl Logeinträge, die in das Log geschrieben wurden. Die query sortiert die Ergebnisse nach der Anzahl der Einträge:
SELECT
log_id, COUNT(*) AS count
FROM
`TABLE`
GROUP BY log_id
ORDER BY count DESC
LIMIT 100
Durchschnittliche Latenz für HTTP-Anfrage berechnen
Die folgende Abfrage veranschaulicht die Gruppierung nach mehreren Spalten und die Berechnung
ein Durchschnittswert. Die Abfrage gruppiert Zeilen nach der URL, die in der HTTP-
und durch den Wert des Felds labels.checker_location
. Nachher
Durch Gruppieren der Zeilen berechnet die Abfrage die durchschnittliche Latenz für jede Gruppe:
SELECT
JSON_VALUE(labels.checker_location) AS location,
AVG(http_request.latency.seconds) AS secs, http_request.request_url
FROM
`TABLE`
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
Im vorherigen Ausdruck ist JSON_VALUE
erforderlich, um den Wert zu extrahieren
des Feldes labels.checker_location
, weil der Datentyp für
labels
ist JSON.
Sie verwenden diese Funktion jedoch nicht, um den Wert aus dem
http_request.latency.seconds
. Das letzte Feld hat den Datentyp
Integer
Durchschnittliche Byte berechnen, die für einen Subnetzwerktest gesendet wurden
Die folgende Abfrage zeigt, wie Sie den Durchschnitt anzeigen können der vom Standort gesendeten Byte.
Die Abfrage liest die Daten der letzten Stunde und behält dann nur diese Zeilen bei
deren Ressourcentypspalte gce_subnetwork
ist und deren json_payload
Spalte nicht NULL ist. Als Nächstes gruppiert die Abfrage die Zeilen nach dem Speicherort der
. Im Gegensatz zum vorherigen Beispiel, bei dem die Daten als numerische
ist der Wert des Felds bytes_sent
ein String. Daher müssen Sie
wandeln Sie den Wert vor der Berechnung des Durchschnitts in einen FLOAT64
um:
SELECT JSON_VALUE(resource.labels.location) AS location,
AVG(CAST(JSON_VALUE(json_payload.bytes_sent) AS FLOAT64)) AS bytes
FROM
`TABLE`
WHERE
resource.type = "gce_subnetwork" AND
json_payload IS NOT NULL
GROUP BY location
LIMIT 100
Das Ergebnis der vorherigen Abfrage ist eine Tabelle, in der in jeder Zeile ein Standort aufgeführt ist. und die durchschnittlichen Byte, die für diesen Standort gesendet wurden.
Informationen zu allen Funktionen, die JSON abrufen und transformieren können finden Sie unter JSON-Funktionen.
Informationen zu CAST
und anderen Konvertierungsfunktionen finden Sie unter
Conversion-Funktionen.
Logeinträge mit einem Feld zählen, das einem Muster entspricht
Um den Teilstring zurückzugeben, der mit einem regulären Ausdruck übereinstimmt, verwenden Sie die Funktion
REGEXP_EXTRACT
Der Rückgabetyp dieser Funktion ist
entweder STRING
oder BYTES
.
Durch die folgende Abfrage werden die Logeinträge beibehalten, für die der Wert
des Felds json_payload.jobName
ist nicht NULL.
Anschließend werden die Einträge nach dem Namenssuffix gruppiert,
mit test
. Schließlich zählt die Abfrage die Anzahl der Einträge in jeder Gruppe:
SELECT
REGEXP_EXTRACT(JSON_VALUE(json_payload.jobName), r".*(test.*)$") AS name,
COUNT(*) AS count
FROM
`TABLE`
WHERE
json_payload.jobName IS NOT NULL
GROUP BY name
ORDER BY count
LIMIT 20
Weitere Beispiele finden Sie in der
Dokumentation zu REGEXP_EXTRACT
Beispiele für reguläre Ausdrücke,
die Sie verwenden können, siehe Funktionen, Operatoren und Bedingungen.
Spaltenübergreifende Suche
In diesem Abschnitt werden zwei verschiedene Ansätze beschrieben, die Sie für die Suche verwenden können, Spalten in einer Tabelle anzeigen.
Tokenbasierte Suche
Um in einer Tabelle nach Einträgen zu suchen, die mit einer Reihe von Suchbegriffen übereinstimmen,
verwenden Sie die Funktion SEARCH
. Für diese Funktion sind zwei Parameter erforderlich:
wo gesucht werden soll, und die Suchanfrage.
Da die SEARCH
-Funktion bestimmte Regeln dafür hat, wie die Daten durchsucht werden,
empfehlen wir Ihnen, die SEARCH
-Dokumentation zu lesen.
Die folgende Abfrage behält nur die Zeilen bei, die ein Feld enthalten die genau mit "35.193.12.15" übereinstimmt:
SELECT
timestamp, log_id, proto_payload, severity, resource.type, resource, labels
FROM
`TABLE` 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
In der vorherigen Abfrage wird der Wert, nach dem gesucht werden soll, in Backticks gesetzt. Dieses
sucht die Funktion SEARCH
nach einer genauen Übereinstimmung zwischen
einen Feldwert und den Wert zwischen den Graviszeichen.
Wenn Graviszeichen im Abfragestring weggelassen werden, wird der Abfragestring aufgeteilt.
basierend auf Regeln, die in der Dokumentation zu SEARCH
definiert sind.
Wenn beispielsweise die folgende Anweisung ausgeführt wird,
Der Abfragestring wird in vier Tokens aufgeteilt: "35", "193", "12" und "15":
SEARCH(t,"35.193.12.15")
Die vorherige SEARCH
-Anweisung entspricht einer Zeile, wenn ein einzelnes Feld
entspricht allen vier Tokens. Die Reihenfolge der Tokens spielt keine Rolle.
Sie können mehrere SEARCH
-Anweisungen in eine Abfrage aufnehmen. Im Feld
in der vorherigen Abfrage, könnten Sie den Filter für die Log-ID durch einen
wie die folgende:
SEARCH(t,"`cloudaudit.googleapis.com/data_access`")
Mit der vorherigen Anweisung wird die gesamte Tabelle durchsucht, während die ursprüngliche Anweisung
sucht nur in der Spalte log_id
.
Um mehrere Suchvorgänge für eine Spalte durchzuführen, trennen Sie die einzelnen Zeichenfolgen mit ein Leerzeichen. Die folgende Anweisung entspricht beispielsweise Zeilen, in denen ein Feld enthält "Hello World", "happy" und "days":
SEARCH(t,"`Hello World` happy days")
Schließlich können Sie auch in bestimmten Spalten einer Tabelle suchen,
in der gesamten Tabelle. Mit der folgenden Anweisung wird beispielsweise nur nach
die Spalten text_payload
und json_payload
:
SEARCH((text_payload, json_payload) ,"`35.222.132.245`")
Informationen dazu, wie die Parameter der Funktion SEARCH
verarbeitet werden,
finden Sie auf der BigQuery-Referenzseite Suchfunktionen.
Nach Teilstrings suchen
Um einen Test durchzuführen, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird, um festzustellen, ob ein Wert in einem
die Funktion CONTAINS_SUBSTR
.
Diese Funktion gibt TRUE
zurück, wenn der Wert vorhanden ist, und
Andernfalls FALSE
. Der Suchwert muss ein STRING
-Literal sein, aber nicht der
Literal-NULL
.
Mit der folgenden Abfrage werden beispielsweise alle Audit-Logeinträge zum Datenzugriff abgerufen durch eine bestimmte IP-Adresse, deren Zeitstempel in einem bestimmten Zeitraum liegen. Schließlich sortiert die Abfrage die Ergebnisse und zeigt dann die 20 ältesten Ergebnisse an:
SELECT
timestamp, log_id, proto_payload, severity, resource.type, resource, labels
FROM
`TABLE` 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
Mit der vorherigen Abfrage wird ein Teilstringtest durchgeführt. Daher enthält eine Zeile, die
„35.193.12.152“ entspricht der CONTAINS_SUBSTR
-Anweisung.
Daten aus mehreren Quellen kombinieren
Abfrageanweisungen scannen eine oder mehrere Tabellen oder Ausdrücke und geben den Fehlerwert
berechneten Ergebniszeilen. Sie können beispielsweise Abfrageanweisungen verwenden, um
Ergebnisse von SELECT
-Anweisungen für verschiedene Tabellen oder Datasets in
und wählen dann die Spalten aus den kombinierten Daten aus.
Daten aus zwei Tabellen mit Joins kombinieren
Um Informationen aus zwei Tabellen zu kombinieren, verwenden Sie eine der join-Methoden. . Der Join-Typ und die verwendete Bedingungsklausel bestimmen, wie Zeilen kombiniert und verworfen werden.
Mit der folgenden Abfrage erhalten Sie die json_payload
-Felder aus den Zeilen in
zwei verschiedene Tabellen,
die vom selben Trace-Span geschrieben werden. Die Abfrage führt eine
Inner JOIN
über zwei Tabellen für Zeilen, in denen die Werte von
Die Spalten span_id
und trace
in beiden Tabellen stimmen überein. Aus diesem Ergebnis
Die Abfrage wählt dann die Felder timestamp
, severity
und json_payload
aus
die aus TABLE_1 stammen, dem Feld json_payload
von
TABLE_2 und die Werte von span_id
und trace
, mit denen die beiden Tabellen verknüpft wurden, und gibt bis zu 100 zurück.
Zeilen:
SELECT
a.timestamp, a.severity, a.json_payload, b.json_payload, a.span_id, a.trace
FROM `TABLE_1` a
JOIN `TABLE_2` b
ON
a.span_id = b.span_id AND
a.trace = b.trace
LIMIT 100
Mehrfachauswahl mit Unions kombinieren
Zum Kombinieren der Ergebnisse von zwei oder mehr SELECT
-Anweisungen und Verwerfen
doppelte Zeilen erstellen, verwenden Sie den Operator UNION
. Um Duplikate beizubehalten
mit dem Operator UNION ALL
.
Die folgende Abfrage liest die Daten der letzten Stunde aus TABLE_1 führt das Ergebnis mit der letzten Stunde des aus TABLE_2 werden die zusammengeführten Daten durch Erhöhen und zeigt dann die ältesten 100 Einträge an:
SELECT
timestamp, log_name, severity, json_payload, resource, labels
FROM(
SELECT * FROM `TABLE_1`
UNION ALL
SELECT * FROM `TABLE_2`
)
ORDER BY timestamp ASC
LIMIT 100
Nächste Schritte
Informationen zum Weiterleiten und Speichern von Logeinträgen finden Sie in den folgenden Dokumenten:
- Log-Bucket erstellen
- Bucket für die Verwendung von Log Analytics upgraden
- Log-Bucket mit einem BigQuery-Dataset verknüpfen
- Senken konfigurieren und verwalten
Die SQL-Referenzdokumentation finden Sie in den folgenden Dokumenten: