In diesem Dokument wird beschrieben, wie Cloud Logging übergroßes Audit-Log aufteilt: und enthält eine Anleitung zum aufgeteilte Audit-Logs.
Wenn ein einzelner Audit-Logeintrag die Größenbeschränkung überschreitet, Cloud Logging teilt diesen Eintrag auf und verteilt die in der Original-Audit-Logeintrag über mehrere Einträge hinweg. Nutzende möchten vielleicht aufgeteilte Audit-Logs, da die einzelnen Einträge nicht alle aus dem ursprünglichen Audit-Log.
Geteilte Audit-Logeinträge erkennen
Aufgeteilte Logeinträge enthalten Informationen zum ursprünglichen Eintrag, aus dem sie stammen
geteilt wurden. Wenn ein Logeintrag eine
split
, dann
Der Eintrag ist das Ergebnis der Aufteilung eines größeren ursprünglichen Logeintrags. Das split
ist ein LogSplit
Objekt, das die Informationen enthält, die zum Identifizieren des zugehörigen Aufteilungsprotokolls erforderlich sind
Einträge.
Jeder geteilte Logeintrag enthält die folgenden Felder:
split.uid
: Eine eindeutige Kennung für die Gruppe der aufgeteilten Logeinträge. aus einem gemeinsamen ursprünglichen Log-Eintrag. Der Wert dieses Felds ist für alle Einträge identisch, die aus dem ursprünglichen Logeintrag aufgeteilt wurden.split.index
: die Position dieses Eintrags in der Reihe der aufgeteilten Einträge. Die Der erste Eintrag des Splits hat den Index0
.split.index
wird auch an das FeldLogEntry.insertId
angehängt.split.totalSplits
: Die Anzahl der Logeinträge, in die der ursprüngliche Logeintrag aufgeteilt wurde. Der Wert dieses Felds ist für alle Einträge identisch, die aus dem ursprünglichen Logeintrag aufgeteilt wurden.
So wird ein Logeintrag aufgeteilt
Wenn ein übergroßer Audit-Logeintrag aufgeteilt wird, werden die Felder zwischen den sich folgende aufgeteilte Log-Einträge ergeben:
Alle Felder mit Ausnahme des Felds
protoPayload
werden in jedem Split dupliziert zu erstellen.Die folgenden
protoPayload
-Unterfelder können auf mehrere Einträge aufgeteilt werden:protoPayload.metadata
protoPayload.request
protoPayload.response
Alle anderen
protoPayload
-Unterfelder sind in allen aufgeteilten Einträgen enthalten.Für
protoPayload.metadata
,protoPayload.request
undprotoPayload.response
Unterfelder gehören, können die folgenden Feldtypen aufgeteilt werden für mehrere Einträge:
Wenn ein Feld zu einem teilbaren Feld gehört, aber nicht zu den teilbaren Feldtypen, ist es nur in einem der geteilten Logs vorhanden.
Ein boolesches Feld im Unterfeld protoPayload.request
kann beispielsweise
werden in einem aufgeteilten Logeintrag, aber in einem Stringfeld im protoPayload.request
Der Inhalt eines untergeordneten Feldes kann auf mehrere geteilte Logeinträge aufgeteilt werden.
Ein Beispiel für die Aufteilung eines langen Eintrags finden Sie unter Beispiel für die Aufteilung eines Logeintrags
Wiederkehrende Felder mit vielen Werten
Wenn der Wert von protoPayload.metadata
, protoPayload.request
oder
protoPayload.response
eine Liste wiederholter Werte enthält, kann die Liste
und auf mehrere geteilte Log-Einträge verteilt werden.
Die Liste der Werte [„foo“, „bar“, „baz“] könnte beispielsweise in 2 Werte aufgeteilt werden.
listet: ["foo", "ba"] und ["", "r", "baz"]. Die erste Liste ist der Eintrag mit der
split.index
von 0
, und die zweite Liste befindet sich im Eintrag mit split.index
von
1
Die zweite Liste beginnt mit einer leeren Zeichenfolge, um die Positionen der
der Elemente in der Liste und zeigen an, dass die Elemente an derselben Position
müssen die verschiedenen Listen
zusammengeführt werden. Im Beispiel ist ba
der zweite
Listenelement in Eintrag 0
und r
das zweite Listenelement im Eintrag 1
, sodass
Sie werden beim Zusammenstellen der ursprünglichen Liste in der Reihenfolge bar
neu kombiniert.
Große, nicht wiederkehrende Felder
Wenn große, nicht wiederholte Struct
- und string
-Felder aufgeteilt werden, werden diese Felder so behandelt:
Ein
string
-Feld wird auf Zeichenebene und nicht auf Byteebene aufgeteilt. Multibyte-Zeichen werden also nicht geändert.LogEntry.split.index
steuert die Reihenfolge der Inhalte der Aufteilung, nicht wiederholte Felder.
Geteilten Logeintrag wieder zusammensetzen
So können Sie mehrere geteilte Protokolle wieder zusammenführen:
Die aufgeteilten Audit-Logs in aufsteigender Reihenfolge nach
LogEntry.split.index
sortieren Reihenfolge.Erstellen Sie eine Kopie des ersten geteilten Logs, wobei
LogEntry.split.index == 0
. Diese Kopie ist der Anfang des wieder zusammengesetzten Logs.Durchlaufen Sie für die verbleibenden Logeinträge alle teilbaren Felder von
protoPayload
und führen Sie für jedes Feld die folgenden Schritte aus:Wenn das Feld bereits im wieder zusammengesetzten Log vorhanden ist, hängen Sie den Inhalt von in das wieder zusammengestellte Log.
Wenn das Feld im wieder zusammengesetzten Log nicht vorhanden ist, kopieren Sie es in das wieder zusammengestellte Protokoll
Beim Aufteilen beibehalten wiederkehrende Felder den Index ihrer Elemente, sodass Sie diese Schritte auf Elementebene anwenden, wenn Sie ein wiederkehrendes Feld neu zusammenstellen.
Löschen Sie nach dem Durchlaufen der teilbaren Felder
LogEntry.split
der zusammengestelltes Protokoll.Entfernen Sie das Suffix
.0
ausLogEntry.insert_id
des wieder zusammengesetzten Logs.
Beispielabfragen
Führen Sie den folgenden Befehl aus, um alle Logeinträge zu ermitteln, die aus demselben ursprünglichen Logeintrag aufgeteilt wurden. die folgende Abfrage im Log-Explorer, wobei die Klasse UID mit dem gewünschten Wert:
split.uid="UID"
Beispiel:
split.uid="abc123"
Führen Sie die folgende Abfrage aus, um alle Logeinträge zu ermitteln, die Teil einer Aufteilung sind:
split:*
Split-Audit-Logs herausfiltern
Mit dem folgenden Filter können Sie alle aufgeteilten Audit-Logs aus einer Abfrage ausschließen:
split.totalSplits = 0
Sie können auch nur den ersten Eintrag eines geteilten Audit-Logs einschließen und den Parameter mit folgendem Filter zurück:
split.index = 0
Beispiel für die Aufteilung eines Logeintrags
Das folgende Beispiel zeigt einen Audit-Logeintrag, bevor er in vier neue Logeinträge. Die neuen Einträge zeigen, wie verschiedene Felder in der auf mehrere Spalten aufgeteilt.
Übergroßer Audit-Logeintrag vor der Aufteilung
{
"insertId": "567",
"logName": "projects/1234/logs/cloudaudit.googleapis.com%2Fdata_access",
"resource": {
"type": "audited_resource"
},
"protoPayload": {
"serviceName": "example.googleapis.com",
"methodName": "google.cloud.example.ExampleMethod",
"resourceName": "projects/1234/resources/123",
"status": {
"code": 0
},
"authenticationInfo": {
"principalEmail": "user@example_company.com"
},
"authorizationInfo": [
{
"resource": "example.googleapis.com/projects/1234/resources/123",
"permission": "examples.get",
"granted": "true"
}
],
"request" {
"boolField": true,
"numberField": 123,
"stringField": "Very long string that needs 2 log entries.",
"structField": {
"nestedNumberField": 1337,
"nestedStringField": "Another long string that needs 2 log entries.",
},
"listField" [
{"value": "short 1"},
{"value": "Yet another long string."},
{"value": "short 2"},
{"value": "short 3"},
]
}
}
}
Übergroßer Audit-Logeintrag nach der Aufteilung
Der ursprüngliche Logeintrag wird in die folgenden Einträge aufgeteilt. Beachten Sie, dass jeder Eintrag
enthält das split
-Objekt mit dem uid
-Wert und dem totalSplits
-Wert 4
. Jedes
Eintrag hat den split.index
-Wert 0
, 1
, 2
oder 3
. Dieser Wert gibt an,
Reihenfolge der aufgeteilten Log-Einträge.
Logeintrag aufteilen, Index 0
Hier ist der erste aufgeteilte Logeintrag mit dem split.index
-Wert 0
.
{
"insertId": "567.0",
"logName": "projects/1234/logs/cloudaudit.googleapis.com%2Fdata_access",
"resource": {
"type": "audited_resource"
},
"split": {
"uid": "789+2022-02-22T12:22:22.22+05:00",
"index": 0,
"totalSplits": 4,
},
"protoPayload": {
// The following fields are included in all split entries
"serviceName": "example.googleapis.com",
"methodName": "google.cloud.example.ExampleMethod",
"resourceName": "projects/1234/resources/123",
"status": {
"code": 0
},
"authenticationInfo": { // small size; included in all split entries
"principalEmail": "user@example_company.com"
},
// The following field is included in this split entry only.
"authorizationInfo": [
{
"resource": "spanner.googleapis.com/projects/1234/datasets/123",
"permission": "databases.read",
"granted": "true"
}
],
// The following field is split across all the split entries
"request" {
// boolField and numberField can only be in one split.
"boolField": true,
"numberField": 123,
// Split with the next LogEntry.
"stringField": "Very long string that ",
}
}
}
Logeintrag aufteilen, Index 1
Hier ist der nächste aufgeteilte Logeintrag mit dem split.index
-Wert 1
.
{
"insertId": "567.1",
"logName": "projects/1234/logs/cloudaudit.googleapis.com%2Fdata_access",
"resource": {
"type": "audited_resource"
},
"split": {
"uid": "567+2022-02-22T12:22:22.22+05:00",
"index": 1,
"totalSplits": 4,
},
"protoPayload": {
"serviceName": "example.googleapis.com",
"methodName": "google.cloud.example.ExampleMethod",
"resourceName": "projects/1234/resources/123",
"status": {
"code": 0
},
"authenticationInfo": {
"principalEmail": "user@example_company.com"
},
"request" {
// boolField and numberField aren't present
// Continued from the previous entry.
"stringField": "needs 2 log entries.",
"structField": {
"nestedNumberField": 1337,
// Split with the next LogEntry.
"nestedStringField": "Another long string ",
}
}
}
}
Logeintrag aufteilen, Index 2
Hier ist der nächste aufgeteilte Logeintrag mit dem split.index
-Wert 2
.
{
"insertId": "567.2",
"logName": "projects/1234/logs/cloudaudit.googleapis.com%2Fdata_access",
"resource": {
"type": "audited_resource"
},
"split": {
"uid": "567+2022-02-22T12:22:22.22+05:00",
"index": 2,
"totalSplits": 4,
},
"protoPayload": {
"serviceName": "example.googleapis.com",
"methodName": "google.cloud.example.ExampleMethod",
"resourceName": "projects/1234/resources/123",
"status": {
"code": 0
},
"authenticationInfo": {
"principalEmail": "user@example_company.com"
},
request {
"structField": {
// Continued from the previous entry.
"nestedStringField": "that needs 2 log entries.",
}
"listField" [
{"value": "short 1"},
{"value": "Yet another "}, // Split with the next LogEntry.
// Missing two values, split with the next LogEntry.
]
}
}
}
Logeintrag aufteilen, Index 3
Hier ist der letzte aufgeteilte Logeintrag mit dem split.index
-Wert 3
.
{
"insertId": "567.3",
"logName": "projects/1234/logs/cloudaudit.googleapis.com%2Fdata_access",
"resource": {
"type": "audited_resource"
},
"split": {
"uid": "567+2022-02-22T12:22:22.22+05:00",
"index": 3,
"totalSplits": 4,
},
"protoPayload": {
"serviceName": "example.googleapis.com",
"methodName": "google.cloud.example.ExampleMethod",
"resourceName": "projects/1234/resources/123",
"status": {
"code": 0
},
"authenticationInfo": {
"principalEmail": "user@example_company.com"
},
"request" {
"listField" [
{}, // Padding to ensure correct positioning of elements in split repeated fields.
{"value": "long string."}, // Continuation of the second repeated field.
{"value": "short 2"},
{"value": "short 3"},
]
}
}
}