Dieses Dokument enthält Beispielabfragen für Logeinträge, die in Log-Buckets gespeichert sind, für die ein Upgrade zur Verwendung von Loganalysen durchgeführt wurde.
Für diese Buckets können Sie SQL-Abfragen auf der Seite Log Analytics in der Google Cloud Console ausführen. Weitere Beispiele finden Sie in den GitHub-Repositories logging-analytics-samples
und security-analytics
.
In diesem Dokument wird nicht beschrieben, wie Sie SQL verwenden oder Logeinträge weiterleiten und speichern. Informationen zu diesen Themen finden Sie im Abschnitt Weitere Informationen.
In den Beispielen auf dieser Seite werden Logansichten abgefragt. Wenn Sie eine Analytics-Ansicht abfragen möchten, verwenden Sie das folgende Pfadformat:
`analytics_view.PROJECT_ID.LOCATION.ANALYTICS_VIEW_ID`
.
Im vorherigen Ausdruck ist PROJECT_ID
die ID Ihres Projekts und LOCATION
und ANALYTICS_VIEW_ID
sind der Standort und der Name Ihrer Analyseansicht.
Unterstützung von SQL-Sprachen
In Abfragen, die auf der Seite Loganalysen verwendet werden, werden GoogleSQL-Funktionen mit einigen Ausnahmen unterstützt.
Die folgenden SQL-Befehle werden für SQL-Abfragen, die über die Seite Loganalysen ausgegeben werden, nicht unterstützt:
- DDL- und DML-Befehle
- Benutzerdefinierte JavaScript-Funktionen
- BigQuery ML-Funktionen
- SQL-Variablen
Die folgenden Elemente werden nur unterstützt, wenn Sie ein verknüpftes Dataset über die Seiten BigQuery Studio und Looker Studio oder über das bq-Befehlszeilentool abfragen:
- Benutzerdefinierte JavaScript-Funktionen
- BigQuery ML-Funktionen
- SQL-Variablen
Best Practices
Wir empfehlen, den Zeitraum für Ihre Abfrage über die Zeitraumauswahl festzulegen. Wenn Sie beispielsweise die Daten der letzten Woche aufrufen möchten, wählen Sie in der Zeitbereichsauswahl Letzte 7 Tage aus. Sie können auch die Zeitraumauswahl verwenden, um eine Start- und Endzeit festzulegen, eine Uhrzeit anzugeben, um die herum Sie sich die Daten ansehen möchten, und Zeitzonen zu ändern.
Wenn Sie ein timestamp
-Feld in die WHERE
-Klausel einfügen, wird die Einstellung für die Zeitbereichsauswahl nicht verwendet. Das folgende Beispiel zeigt, wie Sie nach Zeitstempel filtern:
-- Matches log entries whose timestamp is within the most recent 1 hour.
WHERE timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)
Weitere Informationen zum Filtern nach Zeit finden Sie unter Zeitfunktionen und Zeitstempelfunktionen.
Hinweise
In diesem Abschnitt werden die Schritte beschrieben, die Sie ausführen müssen, bevor Sie Log Analytics verwenden können.
Log-Buckets konfigurieren
Prüfen Sie, ob für Ihre Log-Buckets ein Upgrade zur Verwendung von Log Analytics durchgeführt wurde:
-
Rufen Sie in der Google Cloud Console die Seite Logspeicher auf:
Wenn Sie diese Seite über die Suchleiste suchen, wählen Sie das Ergebnis aus, dessen Zwischenüberschrift Logging ist.
- Prüfen Sie für jeden Log-Bucket, der eine Logansicht enthält, die Sie abfragen möchten, ob in der Spalte Loganalysen verfügbar die Option Öffnen angezeigt wird. Wenn Upgrade durchführen angezeigt wird, klicken Sie darauf und schließen Sie das Dialogfeld ab.
IAM-Rollen und ‑Berechtigungen konfigurieren
In diesem Abschnitt werden die IAM-Rollen oder Berechtigungen beschrieben, die für die Verwendung von Log Analytics erforderlich sind:
-
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zur Verwendung von Log Analytics und zum Abfragen von Log-Ansichten benötigen:
-
So fragen Sie die Log-Buckets
_Required
und_Default
ab: Loganzeige (roles/logging.viewer
) -
So fragen Sie alle Logansichten in einem Projekt ab:
Zugriffsberechtigter für Logbetrachtung (
roles/logging.viewAccessor
)
Sie können ein Hauptkonto auf eine bestimmte Logansicht beschränken, indem Sie entweder eine IAM-Bedingung für die auf Projektebene erteilte Rolle „Logs View Accessor“ hinzufügen oder eine IAM-Bindung zur Richtliniendatei der Logansicht hinzufügen. Weitere Informationen finden Sie unter Zugriff auf eine Logansicht steuern.
Dies sind dieselben Berechtigungen, die Sie benötigen, um Logeinträge auf der Seite Log-Explorer aufzurufen. Informationen zu zusätzlichen Rollen, die Sie zum Abfragen von Ansichten in benutzerdefinierten Buckets oder zum Abfragen der
_AllLogs
-Ansicht des_Default
-Logbuckets benötigen, finden Sie unter Cloud Logging-Rollen. -
So fragen Sie die Log-Buckets
-
Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Observability Analytics User (
roles/observability.analyticsUser
) für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Abfragen von Analyseansichten benötigen.
Abfragen auf dieser Seite verwenden
-
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 Logging ist.
Klicken Sie im Bereich Abfrage auf code SQL und kopieren Sie dann eine Abfrage in den Bereich „SQL-Abfrage“.
Bevor Sie eine Abfrage kopieren, ersetzen Sie in der
FROM
-Klausel die folgenden Felder:- PROJECT_ID: Die Kennung des Projekts.
- LOCATION: Der Speicherort der Logansicht oder der Analyseansicht.
- BUCKET_ID: Der Name oder die ID des Log-Buckets.
- LOG_VIEW_ID: Die Kennung der Logansicht. Sie ist auf 100 Zeichen begrenzt und darf nur Buchstaben, Ziffern, Unterstriche und Bindestriche enthalten.
Im Folgenden sehen Sie das Format der
FROM
-Klausel für eine Log-Ansicht:FROM `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
Die Logbeispiele auf dieser Seite fragen eine Logansicht ab. Wenn Sie eine Analytics-Ansicht abfragen möchten, verwenden Sie das folgende Pfadformat:
`analytics_view.PROJECT_ID.LOCATION.ANALYTICS_VIEW_ID`
. Im vorherigen Ausdruck istPROJECT_ID
die ID Ihres Projekts undLOCATION
undANALYTICS_VIEW_ID
sind der Standort und der Name Ihrer Analyseansicht.
Wenn Sie die in diesem Dokument gezeigten Abfragen auf der Seite BigQuery Studio verwenden oder das bq-Befehlszeilentool nutzen möchten, bearbeiten Sie die FROM
-Klausel und geben Sie den Pfad zum verknüpften Dataset ein.
Wenn Sie beispielsweise die Ansicht _AllLogs
für das verknüpfte Dataset mit dem Namen mydataset
im Projekt myproject
abfragen möchten, lautet der Pfad myproject.mydataset._AllLogs
.
Gängige Anwendungsfälle
In diesem Abschnitt werden einige gängige Anwendungsfälle aufgeführt, die Ihnen bei der Erstellung Ihrer benutzerdefinierten Abfragen helfen können.
Logeinträge im Standard-Log-Bucket anzeigen
Führen Sie die folgende Abfrage aus, um den _Default
-Bucket abzufragen:
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
Feldwert mit regulärem Ausdruck extrahieren
Wenn Sie einen Wert aus einem String mithilfe eines regulären Ausdrucks extrahieren möchten, verwenden Sie die Funktion 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
Weitere Informationen finden Sie in der Dokumentation zu REGEXP_EXTRACT
.
Bei Teilstring-Übereinstimmungen wie in der vorherigen Abfrage führt die Verwendung der Funktion CONTAINS_SUBSTR
zu einer effizienteren Abfrage.
Log-Einträge filtern
Wenn Sie einen Filter auf Ihre Abfrage anwenden möchten, fügen Sie eine WHERE
-Klausel hinzu. Die Syntax, die Sie in dieser Klausel verwenden, hängt vom Datentyp des Felds ab. Dieser Abschnitt enthält mehrere Beispiele für verschiedene Datentypen.
Logeinträge nach Nutzlasttyp filtern
Logeinträge können einen von drei Nutzlasttypen haben. Verwenden Sie eine der folgenden Klauseln, um Logeinträge nach dem Nutzlasttyp zu filtern:
Textnutzlasten
-- Matches log entries that have a text payload. WHERE text_payload IS NOT NULL
JSON-Nutzlasten
-- Matches log entries that have a JSON payload. WHERE json_payload IS NOT NULL
Proto-Nutzlasten
-- 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
In den Abfrageergebnissen werden sowohl die Felder json_payload
als auch proto_payload
in JSON gerendert, durch die Sie navigieren können.
Protokolldaten nach Zeitstempel filtern
Wenn Sie Logeinträge nach ihrem Zeitstempel filtern möchten, empfehlen wir die Verwendung der Zeitbereichsauswahl. Sie können timestamp
aber auch in der WHERE
-Klausel angeben:
-- Matches log entries whose timestamp is within the most recent hour
WHERE timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)
Weitere Informationen zum Filtern nach Zeit finden Sie unter Zeitfunktionen und Zeitstempelfunktionen.
Nach Ressource filtern
Wenn Sie Ihre Logdaten nach Ressource filtern möchten, fügen Sie der WHERE
-Klausel eine resource.type
-Anweisung hinzu:
-- Matches log entries whose resource type is gce_instance
WHERE resource.type = "gce_instance"
Nach Schweregrad filtern
Wenn Sie Ihre Protokolldaten nach einem Schweregrad filtern möchten, fügen Sie der WHERE
-Klausel eine severity
-Anweisung hinzu:
-- Matches log entries whose severity is INFO or ERROR
WHERE severity IS NOT NULL AND severity IN ('INFO', 'ERROR')
Sie können Ihre Logeinträge auch nach severity_number
filtern. Dabei handelt es sich um eine Ganzzahl. Die folgende Klausel entspricht beispielsweise allen Logeinträgen, deren Wichtigkeitsstufe mindestens NOTICE
ist:
-- Matches log entries whose severity level is at least NOTICE
WHERE severity_number IS NOT NULL AND severity_number > 200
Informationen zu den aufgezählten Werten finden Sie unter LogSeverity
.
Nach Logname filtern
Wenn Sie Ihre Protokolldaten nach einem Protokollnamen filtern möchten, fügen Sie der WHERE
-Klausel eine log_name
- oder log_id
-Anweisung hinzu:
Der Logname gibt den Ressourcenpfad an:
-- Matches log entries that have the following log ID. WHERE log_name="projects/cloud-logs-test-project/logs/cloudaudit.googleapis.com%2Factivity"
Die Log-ID enthält nicht den Ressourcenpfad:
-- Matches log entries that have the following log id. WHERE log_id = "cloudaudit.googleapis.com/data_access"
Logeinträge nach Ressourcenlabel filtern
Ressourcenlabels werden als JSON-Struktur gespeichert. Wenn Sie nach dem Wert eines Felds in einer JSON-Struktur filtern möchten, verwenden Sie die Funktion 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
Die vorherige Abfrage basiert auf dem Format von Ressourcenlabels, wie sie in einem Logeintrag gespeichert sind. Hier ein Beispiel für das Ressourcenfeld:
{
type: "gce_instance"
labels: {
instance_id: "1234512345123451"
project_id: "my-project"
zone: "us-central1-f"
}
}
Informationen zu allen Funktionen, mit denen JSON-Daten abgerufen und transformiert werden können, finden Sie unter JSON-Funktionen.
Nach HTTP-Anfrage filtern
Wenn Sie nur Logeinträge abfragen möchten, die ein HTTP-Anfragefeld haben, verwenden Sie die folgende Klausel:
-- 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
Sie können auch die IN
-Anweisung verwenden:
-- Matches log entries whose HTTP request_method is GET or POST.
WHERE http_request.request_method IN ('GET', 'POST')
Nach HTTP-Status filtern
Wenn Sie nur Logeinträge mit einem HTTP-Status abfragen möchten, verwenden Sie die folgende Klausel:
-- Matches log entries that have an http_request.status field.
WHERE http_request.status IS NOT NULL
Nach einem Feld in einem JSON-Datentyp filtern
Wenn Sie nur Logeinträge abfragen möchten, in denen das Unterfeld eines Felds mit einem JSON-Datentyp einen bestimmten Wert hat, extrahieren Sie den Wert mit der Funktion JSON_VALUE
:
-- Compare the value of the status field to NULL.
WHERE JSON_VALUE(json_payload.status) IS NOT NULL
Die vorherige Klausel unterscheidet sich geringfügig von der folgenden Klausel:
-- Compare the status field to NULL.
WHERE json_payload.status IS NOT NULL
In der ersten Klausel wird geprüft, ob der Wert des Statusfelds NULL
ist. In der zweiten Klausel wird geprüft, ob das Statusfeld vorhanden ist. Angenommen, eine Logansicht enthält zwei Logeinträge. Für einen Logeintrag hat das Feld json_payload
das folgende Format:
{
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"
}
Die Klausel WHERE json_payload.status IS NOT NULL
stimmt mit beiden Logeinträgen überein.
Die Klausel WHERE JSON_VALUE(json_payload.status) IS NOT NULL
stimmt jedoch nur mit dem zweiten Logeintrag überein.
Logeinträge gruppieren und zusammenfassen
In diesem Abschnitt wird auf den vorherigen Beispielen aufgebaut und veranschaulicht, wie Sie Logeinträge gruppieren und aggregieren können. Wenn Sie keine Gruppierung, aber eine Aggregation angeben, wird ein Ergebnis ausgegeben, da in SQL alle Zeilen, die die WHERE
-Klausel erfüllen, als eine Gruppe behandelt werden.
Jeder SELECT
-Ausdruck muss in den Gruppenfeldern enthalten oder aggregiert werden.
Logeinträge nach Zeitstempel gruppieren
Wenn Sie Daten nach Zeitstempel gruppieren möchten, verwenden Sie die Funktion TIMESTAMP_TRUNC
, mit der ein Zeitstempel auf eine bestimmte Granularität wie HOUR
gekürzt wird:
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
Weitere Informationen finden Sie in der Dokumentation zu TIMESTAMP_TRUNC
und unter Datums- und Zeitfunktionen.
Logeinträge nach Ressource gruppieren
In der folgenden Abfrage wird gezeigt, wie Logeinträge nach Ressourcentyp gruppiert und dann die Anzahl der Logeinträge in jeder Gruppe gezählt wird:
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
Logeinträge nach Schweregrad gruppieren
Die folgende Abfrage zeigt, wie Logeinträge nach Schweregrad gruppiert und dann die Anzahl der Logeinträge in jeder Gruppe gezählt wird:
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
Logeinträge nach log_id
gruppieren
In der folgenden Abfrage wird gezeigt, wie Logeinträge nach der Log-ID gruppiert und dann die Anzahl der Logeinträge in jeder Gruppe gezählt wird:
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
Durchschnittliche Latenz von HTTP-Anfragen pro URL berechnen
Die folgende Abfrage veranschaulicht, wie Logeinträge nach der HTTP-Anfrage-URL und dem Standort gruppiert und dann die Anzahl der Logeinträge in jeder Gruppe gezählt wird:
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
Durchschnittliche Anzahl der gesendeten Byte für einen Subnetzwerktest berechnen
In der folgenden Abfrage wird gezeigt, wie Logeinträge nach dem in den Ressourcenlabels angegebenen Standort gruppiert und dann die Anzahl der Logeinträge in jeder Gruppe berechnet wird:
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
Weitere Informationen finden Sie unter JSON-Funktionen und Konversionsfunktionen.
Logeinträge mit einem Feld zählen, das einem Muster entspricht
Wenn Sie den Teilstring zurückgeben möchten, der mit einem regulären Ausdruck übereinstimmt, verwenden Sie die Funktion 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
Weitere Beispiele finden Sie in der Dokumentation zu REGEXP_EXTRACT
.
Spaltenübergreifende Suche
In diesem Abschnitt werden zwei Ansätze beschrieben, mit denen Sie mehrere Spalten der Ansicht durchsuchen können, die Sie abfragen:
Tokenbasierte Suche: Sie geben den Suchort und eine Suchanfrage an und verwenden dann die Funktion
SEARCH
. Da für die FunktionSEARCH
bestimmte Regeln für die Suche in den Daten gelten, empfehlen wir Ihnen, dieSEARCH
-Dokumentation zu lesen.Teilstringbasierte Suche: Sie geben den Suchort und ein String-Literal an und verwenden dann die Funktion
CONTAINS_SUBSTR
. Das System führt einen Test durch, bei dem die Groß-/Kleinschreibung nicht berücksichtigt wird, um festzustellen, ob das Stringliteral in einem Ausdruck vorhanden ist. Die FunktionCONTAINS_SUBSTR
gibtTRUE
zurück, wenn das Stringliteral vorhanden ist, und andernfallsFALSE
. Der Suchwert muss einSTRING
-Literal sein, aber nicht das LiteralNULL
.
Tokenbasierte Suche in einer Logansicht
In der folgenden Abfrage werden nur die Zeilen beibehalten, die ein Feld enthalten, das genau mit „35.193.12.15“ übereinstimmt:
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
Wenn im Abfragestring keine Backticks verwendet werden, wird er anhand der in der SEARCH
-Dokumentation definierten Regeln aufgeteilt.
Wenn beispielsweise die folgende Anweisung ausgeführt wird, wird der Abfragestring 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.
Eine Abfrage kann mehrere SEARCH
-Anweisungen enthalten. In der vorherigen Abfrage können Sie beispielsweise den Filter für die Log-ID durch eine Anweisung wie die folgende ersetzen:
SEARCH(t,"`cloudaudit.googleapis.com/data_access`")
Mit der vorherigen Anweisung wird jedes Feld der Logeinträge in der Logansicht durchsucht, während mit der ursprünglichen Anweisung nur das Feld log_id
der Logeinträge durchsucht wird.
Wenn Sie mehrere Suchvorgänge für mehrere Felder ausführen möchten, trennen Sie die einzelnen Strings durch ein Leerzeichen. Die folgende Anweisung entspricht beispielsweise Zeilen, in denen ein Feld „Hello World“, „happy“ und „days“ enthält:
SEARCH(t,"`Hello World` happy days")
Außerdem können Sie in bestimmten Feldern suchen, anstatt eine ganze Tabelle zu durchsuchen. Mit der folgenden Anweisung werden beispielsweise nur die Spalten mit den Namen text_payload
und json_payload
durchsucht:
SEARCH((text_payload, json_payload) ,"`35.222.132.245`")
Informationen zur Verarbeitung der Parameter der SEARCH
-Funktion finden Sie auf der BigQuery-Referenzseite Suchfunktionen.
Teilstringsuche in einer Logansicht
Mit der folgenden Abfrage werden beispielsweise alle Audit-Logeinträge zum Datenzugriff mit einer bestimmten IP-Adresse abgerufen, deren Zeitstempel in einem bestimmten Zeitraum liegen. Schließlich werden die Ergebnisse sortiert und die 20 ältesten Ergebnisse angezeigt:
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
Mehrere Ansichten abfragen
Abfrageanweisungen durchsuchen eine oder mehrere Tabellen oder Ausdrücke und geben die berechneten Ergebniszeilen zurück. Sie können beispielsweise Abfrageanweisungen verwenden, um die Ergebnisse von SELECT
-Anweisungen für verschiedene Tabellen oder Datasets auf unterschiedliche Weise zusammenzuführen und dann die Spalten aus den kombinierten Daten auszuwählen.
Wenn Sie mehrere Ansichten abfragen, müssen sich diese am selben Speicherort befinden. Wenn sich beispielsweise zwei Ansichten am Speicherort us-east1
befinden, können Sie beide Ansichten mit einer einzigen Abfrage abfragen. Sie können auch zwei Ansichten abfragen, die sich in der Multiregion us
befinden. Wenn der Standort einer Ansicht jedoch global
ist, kann sich diese Ansicht an einem beliebigen physischen Standort befinden. Daher können Joins zwischen zwei Ansichten mit dem Standort global
fehlschlagen.
Zwei Logansichten über die Trace-ID zusammenführen
Wenn Sie Informationen aus zwei Tabellen kombinieren möchten, verwenden Sie einen der Join-Operatoren:
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
Zwei Logansichten mit einer UNION-Anweisung abfragen
Wenn Sie die Ergebnisse von zwei oder mehr SELECT
-Anweisungen kombinieren und doppelte Zeilen verwerfen möchten, verwenden Sie den Operator UNION
. Wenn Sie doppelte Zeilen beibehalten möchten, verwenden Sie den Operator 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
Doppelte Logeinträge entfernen
In Log Analytics werden doppelte Logeinträge nicht entfernt, bevor eine Abfrage ausgeführt wird. Dieses Verhalten unterscheidet sich von dem, wenn Sie Logeinträge mit dem Log-Explorer abfragen. Dort werden doppelte Einträge entfernt, indem die Felder für Lognamen, Zeitstempel und Einfüge-ID verglichen werden.
Mit der Validierung auf Zeilenebene können Sie doppelte Logeinträge entfernen.
Weitere Informationen finden Sie unter Fehlerbehebung: In meinen Loganalysen-Ergebnissen sind doppelte Logeinträge vorhanden.
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
SQL-Referenzdokumentation finden Sie in den folgenden Dokumenten: