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 den GitHub-Repositories logging-analytics-samples
und security-analytics
.
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_NAME_OF_LOG_VIEW durch den Tabellennamen für die Logansicht. die Sie abfragen möchten. Dieser Name hat das Format
project_ID.region.bucket_ID.view_ID
Rufen Sie zur Identifizierung dieses Namens die Liste Logansichten im Loganalysen, suchen Sie nach der Logansicht und wählen Sie Abfrage: Der Bereich Abfrage enthält eine Standardabfrage, die den Tabellennamen für die abgefragte Protokollansicht enthält. Informationen zum Zugriff auf die Standardabfrage finden Sie unter Protokollansicht abfragen.
Um die in diesem Dokument gezeigten Abfragen für die BigQuery Studio, ersetzen Sie TABLE_NAME_OF_LOG_VIEW 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 Log Analytics 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 Schema für die Logansicht: in der Liste Logansichten nach der gewünschten Ansicht und wählen Sie Name der Ansicht.
Das Schema wird angezeigt. Über das Feld Filter bestimmte Felder zu finden. Sie können das Schema nicht ändern.
-
Logs filtern
SQL-Abfragen bestimmen, welche Einträge in der Logansicht verarbeitet werden sollen, und gruppieren und Aggregationsvorgänge durchfü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_NAME_OF_LOG_VIEW`
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_NAME_OF_LOG_VIEW`
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
Wenn Sie nach einem Lognamen filtern möchten, können Sie eine Einschränkung für den Wert des Felds log_name
oder log_id
hinzufügen. 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_NAME_OF_LOG_VIEW`
WHERE
log_id = "cloudaudit.googleapis.com/data_access"
ORDER BY timestamp ASC
LIMIT 100
Nach Ressourcenlabel filtern
Die meisten überwachten Ressourcendeskriptoren definieren Labels, die zur Identifizierung der 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
In der folgenden Abfrage werden beispielsweise die neuesten Daten gelesen und dann die Zeilen beibehalten, bei denen die Ressource eine Compute Engine-Instanz ist, die sich in der Zone us-central1-f
befindet:
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
Informationen zu allen Funktionen, die JSON abrufen und transformieren können finden Sie unter JSON-Funktionen.
Nach HTTP-Anfrage filtern
Um die Logansicht so zu filtern, dass nur Logeinträge angezeigt werden, die einem HTTP-
anfragen oder beantworten, 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_NAME_OF_LOG_VIEW`
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_NAME_OF_LOG_VIEW`
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_NAME_OF_LOG_VIEW`
WHERE
http_request IS NOT NULL AND
http_request.status IS NOT NULL
ORDER BY timestamp ASC
LIMIT 100
Um den Datentyp zu ermitteln, der in einem Feld gespeichert ist, können Sie das Schema aufrufen oder das Feld anzeigen. 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_NAME_OF_LOG_VIEW`
WHERE
json_payload.status IS NOT NULL
und
SELECT
json_payload
FROM
`TABLE_NAME_OF_LOG_VIEW`
WHERE
JSON_VALUE(json_payload.status) IS NOT NULL
Bei den vorherigen Abfragen wird der Wert des Felds json_payload
im
Logeintrag. Beide Abfragen
Logeinträge verwerfen, die das Feld 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 Logansicht,
zwei Logeinträge. Für einen Logeintrag enthält das Feld json_payload
Folgendes:
Formular:
{
status: {
measureTime: "1661517845"
}
}
Für den anderen Logeintrag hat das Feld 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 Logeinträge erfüllen die Einschränkung json_payload.status IS NOT NULL
.
Das heißt, das Ergebnis der ersten Abfrage enthält beide Logeinträge.
Lautet die Einschränkung jedoch JSON_VALUE(json_payload.status) IS NOT NULL
,
nur der zweite Logeintrag im Abfrageergebnis enthalten ist.
Nach regulärem Ausdruck filtern
Wenn Sie den Teilstring zurückgeben möchten, 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
diese 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_NAME_OF_LOG_VIEW`
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
Logeinträge gruppieren und aggregieren. Wenn Sie keine Gruppierung, aber eine Aggregation angeben, wird ein einzelnes Ergebnis ausgegeben, da SQL alle Zeilen, die der WHERE
-Klausel entsprechen, als eine einzige Gruppe behandelt.
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. Beispiel: Ein Zeitstempel von 15:30:11
, der als hours:minutes:seconds
formatiert ist, wird zu 15:30:00
, wenn die Granularität auf MINUTE
festgelegt ist.
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_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
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 Logeinträge nach Ressourcentyp. Dann wird die Anzahl der Zeilen für jeden Ressourcentyp und gibt eine Tabelle mit zwei Spalten zurück. In der ersten Spalte werden die Ressourcentyp, während die zweite Spalte die Anzahl der Zeilen Ressourcentyp:
SELECT
resource.type, COUNT(*) AS count
FROM
`TABLE_NAME_OF_LOG_VIEW`
GROUP BY resource.type
LIMIT 100
Nach Schweregrad gruppieren
Die folgende Abfrage liest die Daten der letzten Stunde und behält dann Zeilen mit einem Schweregradfeld bei. 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_NAME_OF_LOG_VIEW`
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_NAME_OF_LOG_VIEW`
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_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
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 gesendeten Byte für einen Subnetzwerktest berechnen
Die folgende Abfrage zeigt, wie Sie die durchschnittliche Anzahl der gesendeten Byte nach Standort anzeigen können.
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_NAME_OF_LOG_VIEW`
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_NAME_OF_LOG_VIEW`
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
die Sie verwenden können, siehe Funktionen, Operatoren und Bedingungen.
Spaltenübergreifende Suche
In diesem Abschnitt werden zwei verschiedene Ansätze beschrieben, mit denen Sie in mehreren Spalten einer Tabelle suchen können.
Tokenbasierte Suche
Wenn Sie in einer Log-Ansicht nach Einträgen suchen möchten, die mit einer Reihe von Suchbegriffen übereinstimmen, verwenden Sie die Funktion SEARCH
. Für diese Funktion sind zwei Parameter erforderlich: der Ort, an dem 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_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
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 Anführungszeichen im Abfragestring weggelassen werden, wird der Abfragestring gemäß den in der SEARCH
-Dokumentation definierten Regeln aufgeteilt.
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 stimmt mit einer Zeile überein, wenn ein einzelnes Feld mit allen vier Tokens übereinstimmt. Die Reihenfolge der Tokens spielt keine Rolle.
Sie können mehrere SEARCH
-Anweisungen in eine Abfrage aufnehmen. In der vorherigen Abfrage könnten Sie den Filter für die Log-ID beispielsweise durch eine Anweisung wie die folgende ersetzen:
SEARCH(t,"`cloudaudit.googleapis.com/data_access`")
Mit der vorherigen Anweisung wird in jedem Feld der Logeinträge in der Logansicht gesucht
Die ursprüngliche Anweisung durchsucht nur das Feld log_id
der
Logeinträge.
Wenn Sie mehrere Suchen in mehreren Feldern ausführen möchten, trennen Sie die einzelnen Strings mit einem Leerzeichen. Die folgende Anweisung entspricht beispielsweise Zeilen, in denen ein Feld enthält "Hello World", "happy" und "days":
SEARCH(t,"`Hello World` happy days")
Außerdem können Sie nach bestimmten Feldern suchen, anstatt nach einer ganzen Tabelle. Mit der folgenden Anweisung wird beispielsweise nur in den Spalten text_payload
und json_payload
gesucht:
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_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
In 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 durchsuchen eine oder mehrere Tabellen oder Ausdrücke und geben die berechneten Ergebniszeilen zurück. 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_NAME_OF_LOG_VIEW_1 stammen, dem Feld json_payload
von
ABLE_NAME_OF_LOG_VIEW_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_NAME_OF_LOG_VIEW_1` a
JOIN `ABLE_NAME_OF_LOG_VIEW_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
.
Mit der folgenden Abfrage werden die Daten der letzten Stunde TABLE_NAME_OF_LOG_VIEW_1 führt das Ergebnis mit der letzten Stunde des aus ABLE_NAME_OF_LOG_VIEW_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_NAME_OF_LOG_VIEW_1`
UNION ALL
SELECT * FROM `ABLE_NAME_OF_LOG_VIEW_2`
)
ORDER BY timestamp ASC
LIMIT 100
Beschränkungen
Abfragen, die auf der Seite Loganalysen verwendet werden, unterstützen GoogleSQL-Funktionen mit einigen Ausnahmen.
Die folgenden SQL-Befehle werden für SQL-Abfragen nicht unterstützt, die über die Seite Log Analytics ausgeführt werden:
- DDL- und DML-Befehle
- Benutzerdefinierte JavaScript-Funktionen
- BigQuery ML-Funktionen
- SQL-Variablen
Folgendes wird nur unterstützt, wenn Sie ein verknüpftes Dataset mit die Seiten BigQuery Studio und Looker Studio und die bq-Befehlszeilentool:
- Benutzerdefinierte JavaScript-Funktionen
- BigQuery ML-Funktionen
- SQL-Variablen
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: