Informationen zu VPC-Flusslogs
Auf dieser Seite wird das Eintragsformat von VPC-Flusslogs beschrieben, einschließlich der verfügbaren Basis- und Metadatenfelder. Außerdem wird erklärt, wie Sie die Logfilterung nutzen, sodass nur Logs generiert werden, die bestimmten Kriterien entsprechen.
Eintragsformat
Logdatensätze umfassen Basisfelder – die wichtigsten Felder jedes Logdatensatzes – sowie Metadatenfelder, die zusätzliche Informationen enthalten. Metadatenfelder können weggelassen werden, um Speicherkosten zu sparen.
Einige Logfelder haben ein Mehrfeldformat mit mehr als einem Datenelement in einem bestimmten Feld. Das Feld connection
hat beispielsweise das Format IpConnection
. Dieses Format enthält die Quell- und Ziel-IP-Adresse sowie Protokoll und Port in einem einzigen Feld. Diese Felder mit Mehrfeldformat werden unter der Eintragsformattabelle beschrieben.
Für Metadatenfelder gelten die folgenden Einschränkungen:
- Hinweis: Die Werte für Metadatenfelder beruhen nicht auf dem Datenebenenpfad. Es handelt sich um Näherungswerte, die möglicherweise fehlen oder falsch sind. Im Gegensatz zu Metadatenfeldern werden die Werte für Basisfelder direkt aus Paketheadern übernommen.
- Für das Feld
internet_routing_details
fehlt der Pfad des autonomen Systems (AS) möglicherweise. Wenn beispielsweise Pakete in einer Virtual Private Cloud (VPC) weitergeleitet werden, sind keine AS-Pfadinformationen enthalten.
Feld | Feldformat | Feldtyp: Basis- oder optionale Metadaten |
---|---|---|
Verbindung |
IpConnection
5-Tupel, das diese Verbindung beschreibt. |
Basis |
reporter |
string
Die Seite, die den Datenfluss gemeldet hat. Kann entweder SRC oder DEST sein.
|
Basis |
rtt_msec |
int64 Latenz, gemessen während des Zeitintervalls, nur für TCP-Flüsse. Die gemessene Latenz ist die Zeit, die zwischen dem Senden einer SEQ und dem Empfang einer entsprechenden ACK vergangen ist. Das Latenzergebnis ist die Summe der Netzwerk-RTT und der durch die Anwendung verbrauchten Zeit. |
Basis |
bytes_sent |
int64
Anzahl der Byte, die von der Quelle an das Ziel gesendet werden. |
Basis |
packets_sent |
int64
Anzahl der Pakete, die von der Quelle an das Ziel gesendet werden. |
Basis |
start_time |
string
Zeitstempel (RFC 3339-Datumsstring-Format) des ersten beobachteten Pakets während des aggregierten Zeitintervalls. |
Basis |
end_time |
string
Zeitstempel (RFC 3339-Datumsstring-Format) des letzten beobachteten Pakets während des aggregierten Zeitintervalls. |
Basis |
internet_routing_details |
InternetRoutingDetails
Wenn die Verbindung zwischen Google Cloud und dem Internet besteht, wird dieses Feld mit Routingdetails gefüllt. Nur verfügbar für ausgehende Datenflüsse. |
Metadaten |
src_gke_details |
GkeDetails
GKE-Metadaten für Quellendpunkte. Nur verfügbar, wenn der Endpunkt GKE ist. |
Metadaten |
dest_gke_details |
GkeDetails
GKE-Metadaten für Zielendpunkte. Nur verfügbar, wenn der Endpunkt GKE ist. |
Metadaten |
src_instance |
InstanceDetails
Wenn die Quelle der Verbindung eine VM in der gleichen VPC war, wird dieses Feld mit VPC-Instanzdetails gefüllt. In einer freigegebenen VPC-Konfiguration entspricht project_id dem Projekt, zu dem die Instanz gehört (normalerweise das Dienstprojekt).
|
Metadaten |
dest_instance |
InstanceDetails
Wenn das Ziel der Verbindung eine VM in der gleichen VPC war, wird dieses Feld mit VM-Instanzdetails gefüllt. In einer freigegebenen VPC-Konfiguration entspricht project_id dem Projekt, zu dem die Instanz gehört (normalerweise das Dienstprojekt).
|
Metadaten |
src_location | GeographicDetails
Wenn die Quelle der Verbindung außerhalb der VPC lag, wird dieses Feld mit verfügbaren Standortmetadaten gefüllt. |
Metadaten |
dest_location | GeographicDetails
Wenn das Ziel der Verbindung außerhalb der Google-VPC lag, wird dieses Feld mit verfügbaren Standortmetadaten gefüllt. |
Metadaten |
src_vpc |
VpcDetails
Wenn die Quelle der Verbindung eine VM in der gleichen VPC war, wird dieses Feld mit VPC-Netzwerkdetails gefüllt. In einer freigegebenen VPC-Konfiguration entspricht project_id der ID des Hostprojekts.
|
Metadaten |
dest_vpc |
VpcDetails
Wenn das Ziel der Verbindung eine VM in der gleichen VPC war, wird dieses Feld mit VPC-Netzwerkdetails gefüllt. In einer freigegebenen VPC-Konfiguration entspricht project_id der ID des Hostprojekts.
|
Metadaten |
Feldformat von IpConnection
Feld | Typ | Beschreibung |
---|---|---|
Protokoll | int32 | Die IANA-Protokollnummer |
src_ip | String | Quell-IP-Adresse |
dest_ip | String | Ziel-IP-Adresse |
src_port | int32 | Quellport |
dest_port | int32 | Zielport |
Feldformat von InternetRoutingDetails
Feld | Typ | Beschreibung |
---|---|---|
egress_as_path | AsPath | Liste der relevanten AS-Pfade. Wenn mehrere AS-Pfade für den Fluss verfügbar sind, kann das Feld mehr als einen AS-Pfad enthalten. |
Feldformat von AsPath
Feld | Typ | Beschreibung |
---|---|---|
as_details | AsDetails | Liste der AS-Details für alle Systeme im AS-Pfad. Die Liste beginnt mit dem ersten AS außerhalb des Google Cloud-Netzwerks und endet mit dem AS, zu dem die Remote-IP-Adresse gehört. |
Feldformat von AsDetails
Feld | Typ | Beschreibung |
---|---|---|
asn | uint32 | Die Nummer des autonomen Systems (Autonomous System Number, ASN) des AS. |
Feldformat von GkeDetails
Feld | Typ | Beschreibung |
---|---|---|
Cluster | Clusterdetails | GKE-Clustermetadaten. |
Pod | PodDetails | GKE-Pod-Metadaten, die ausgefüllt werden, wenn die Quelle oder das Ziel des Traffics ein Pod ist. |
Dienst | ServiceDetails |
GKE-Dienstmetadaten, die nur in Dienstendpunkten ausgefüllt werden. Der Eintrag enthält bis zu zwei Dienste. Wenn mehr als zwei relevante Dienste vorhanden sind, enthält dieses Feld einen einzelnen Dienst mit einer speziellen MANY_SERVICES -Markierung.
|
Feldformat von ClusterDetails
Feld | Typ | Beschreibung |
---|---|---|
cluster_location | String | Speicherort des Clusters. Dies kann eine Zone oder Region sein, je nachdem, ob der Cluster zonal oder regional ist. |
cluster_name | String | Name des GKE-Clusters. |
Feldformat von PodDetails
Feld | Typ | Beschreibung |
---|---|---|
pod_name | String | Name des Pods. |
pod_namespace | String | Namespace des Pods. |
Feldformat von ServiceDetails
Feld | Typ | Beschreibung |
---|---|---|
service_name | String |
Name des Dienstes, Wenn mehr als zwei relevante Dienste vorhanden sind, wird das Feld auf eine spezielle MANY_SERVICES -Markierung gesetzt.
|
service_namespace | String | Namespace des Dienstes. |
Beispiel:
Wenn zwei Dienste vorhanden sind, sieht das Dienstfeld so aus:
service: [ 0: { service_name: "my-lb-service" service_namespace: "default" } 1: { service_name: "my-lb-service2" service_namespace: "default" } ]
Wenn mehr als zwei Dienste vorhanden sind, sieht das Dienstfeld so aus:
service: [ 0: { service_name: "MANY_SERVICES" } ]
Feldformat von InstanceDetails
Feld | Typ | Beschreibung |
---|---|---|
project_id | string | ID des Projekts, das die VM enthält |
Region | String | Region der VM |
vm_name | string | Instanzname der VM |
Zone | String | Zone der VM |
Feldformat von GeographicDetails
Feld | Typ | Beschreibung |
---|---|---|
asn | int32 | Die ASN des externen Netzwerks, zu dem der Endpunkt gehört. |
Ort | string | Stadt für externe Endpunkte |
continent | string | Kontinent für externe Endpunkte |
country | String | Land für externe Endpunkte, dargestellt als Ländercodes gemäß ISO 3166-1 Alpha-3. |
Region | string | Region für externe Endpunkte |
Feldformat von VpcDetails
Feld | Typ | Beschreibung |
---|---|---|
project_id | String | ID des Projekts, das die VPC enthält |
subnetwork_name | String | Subnetzwerk, auf dem die VM ausgeführt wird |
vpc_name | String | VPC, in der die VM ausgeführt wird |
Metadatenannotationen
Logdatensätze umfassen Basisfelder und Metadatenfelder. Unter Eintragsformat wird angezeigt, welche Felder vom Typ Metadaten sind und welche Typ Basis sind. Die Basisfelder sind immer enthalten. Sie können festlegen, welche Metadatenfelder beibehalten werden.
Wenn Sie alle Metadaten auswählen, sind alle Metadatenfelder im Eintragsformat für VPC-Flusslogs enthalten. Wenn dem Eintragsformat neue Metadatenfelder hinzugefügt werden, enthalten die Flusslogs automatisch die neuen Felder.
Wenn Sie keine Metadaten auswählen, werden alle Metadatenfelder weggelassen.
Wenn Sie benutzerdefinierte Metadaten auswählen, können Sie die Metadatenfelder, die Sie vom übergeordneten Feld einschließen möchten, angeben, z. B.
src_vpc
, oder ihren vollständigen Namen angeben, z. B.src_vpc.project_id
.Wenn dem Eintragsformat neue Metadatenfelder hinzugefügt werden, werden sie aus den Flusslogs ausgeschlossen, sofern sie sich nicht in einem übergeordneten Feld befinden, das Sie angegeben haben.
Wenn Sie benutzerdefinierte Metadaten mithilfe von übergeordneten Feldern festlegen, werden den neuen Audit-Logs automatisch die neuen Felder hinzugefügt, wenn dem Eintragsformat in dem übergeordneten Feld neue Metadatenfelder hinzugefügt werden.
Wenn Sie benutzerdefinierte Metadaten mit dem vollständigen Namen des Felds angeben, werden neue Metadatenfelder, die dem übergeordneten Feld hinzugefügt werden, aus den Flusslogs ausgeschlossen.
Informationen zum Anpassen von Metadatenfeldern finden Sie in der Google Cloud CLI oder der API-Anleitung VPC-Fluss-Logging beim Erstellen eines Subnetzes aktivieren.
GKE-Metadatenannotationen
Flüsse, die einen Endpunkt in einem GKE-Cluster haben, können mit GKE-Annotationen annotiert werden. Diese können Details zum Cluster, Pod und Dienst des Endpunkts enthalten.
GKE-Dienstannotationen
Traffic, der an einen ClusterIP, NodePort oder LoadBalancer gesendet wird, kann Dienstannotationen empfangen. Wenn er an einen NodePort oder LoadBalancer gesendet wird, empfängt der Fluss die Dienstannotation in beiden Hops der Verbindung.
Traffic, der direkt an den Dienstport eines Pods gesendet wird, wird mit einer Dienstannotation am Zielendpunkt annotiert.
Traffic, der an den Dienstport eines Pods gesendet wird, der mehr als einen Dienst am selben Dienstport unterstützt, wird mit mehreren Diensten am Zielendpunkt annotiert. Dies ist auf zwei Dienste beschränkt. Wenn mehr Dienste vorhanden sind, wird der Endpunkt mit einer speziellen MANY_SERVICES
-Markierung versehen.
Pod-Annotationen zu Internettraffic
Der Traffic zwischen einem Pod und dem Internet erhält standardmäßig keine Pod-Annotationen. VPC-Flusslogs können keine Pod-Annotationen hinzufügen, da der Masquerade-Agent bei Paketen im Internet die Pod-IP-Adresse in die Knoten-IP-Adresse übersetzt, bevor VPC-Flusslogs das Paket sehen.
Aufgrund der Masquerade sind Pod-Annotationen nur sichtbar, wenn sich die Ziele entweder innerhalb der Standardziele ohne Masquerade oder in einer benutzerdefinierten nonMasqueradeCIDRs
-Liste befinden.
Wenn Sie Internetziele in eine benutzerdefinierte nonMasqueradeCIDRs
-Liste aufnehmen, müssen Sie eine Möglichkeit bereitstellen, damit die internen Pod-IP-Adressen übersetzt werden können, bevor sie im Internet bereitgestellt werden. Für private und nicht private Cluster können Sie Cloud NAT verwenden. Weitere Informationen finden Sie unter GKE-Interaktion.
Logfilterung
Wenn Sie VPC-Flusslogs aktivieren, können Sie einen Filter anhand von Basis- und Metadatenfeldern festlegen, die nur Logs beibehalten, die dem Filter entsprechen. Alle anderen Logs werden verworfen, bevor sie in Logging geschrieben werden. Dadurch sparen Sie Geld und können die benötigte Zeit für die Suche nach den gewünschten Informationen reduzieren.
Sie können nach einer beliebigen Teilmenge von Feldern filtern, die im Eintragsformat aufgeführt sind, mit Ausnahme der folgenden Felder:
rtt_msec
bytes_sent
packets_sent
start_time
end_time
Bei der VPC-Flusslog-Filterung wird CEL verwendet, eine eingebettete Ausdruckssprache für attributbasierte logische Ausdrücke. Filterausdrücke für VPC-Flusslogs sind auf 2.048 Zeichen begrenzt. Weitere Informationen finden Sie unter Unterstützte CEL-Operatoren.
Weitere Informationen zu CEL finden Sie in der CEL-Einführung und in der Sprachdefinition. Das Generierungsfilter-Feature unterstützt eine begrenzte Teilmenge der CEL-Syntax.
Informationen zum Erstellen eines Subnetzes mit Logfilterung finden Sie in der gcloud CLI oder der API-Anleitung VPC-Flusslogs beim Erstellen eines Subnetzes aktivieren.
Informationen zum Konfigurieren der Logfilterung finden Sie in der gcloud CLI oder der API-Anleitung Parameter für VPC-Flusslogs aktualisieren.
Beispiel 1: Beschränken Sie die Logerfassung auf eine bestimmte VM mit dem Namen my-vm
. In diesem Fall werden nur Logs aufgezeichnet, bei denen das Feld src_instance
, das von der Quelle des Traffics gemeldet wird, my-vm
ist, oder das Feld dst_instance
, das vom Ziel des Traffics gemeldet wird, my-vm
ist.
gcloud compute networks subnets update my-subnet \ --logging-filter-expr="(src_instance.vm_name == 'my-vm' && reporter=='SRC') || (dest_instance.vm_name == 'my-vm' && reporter=='DEST')"
Beispiel 2: Beschränken Sie die Logerfassung auf Pakete, deren Quell-IP-Adressen im Subnetz 10.0.0.0/8
enthalten sind.
gcloud compute networks subnets update my-subnet \ --logging-filter-expr="inIpRange(connection.src_ip, '10.0.0.0/8')"
Beispiel 3: Beschränken Sie die Logerfassung auf Traffic außerhalb einer VPC.
gcloud compute networks subnets update my-subnet \ --logging-filter-expr '!(has(src_vpc.vpc_name) && has(dest_vpc.vpc_name))'
Unterstützte logische CEL-Operatoren
Ausdruck | unterstützte Typen | Beschreibung |
---|---|---|
true, false | Boolesch | Boolesche Konstanten |
x == y x != y |
Boolean, Int, String | Vergleichsoperator Beispiel: connection.protocol == 6 |
x && y x || y |
Boolesch | Boolesche logische Operatoren Beispiel: connection.protocol == 6 && src_instance.vm_name == "vm_1" |
!x | Boolesch | Negation |
1, 2.0, 0, ... | Int | Konstante numerische Literale |
x + y | String | String-Verkettung |
"foo", 'foo', ... | String | Konstantes Stringliteral |
x.lower() | String | Gibt den Kleinbuchstabenwert des Strings zurück |
x.upper() | String | Gibt den Großbuchstabenwert des Strings zurück |
x.contains(y) | String | Gibt "true" zurück, wenn der String den angegebenen Teilstring enthält |
x.startsWith(y) | String | Gibt "true" zurück, wenn der String mit dem angegebenen Teilstring beginnt. |
x.endsWith(y) | String | Gibt "true" zurück, wenn der String mit dem angegebenen Teilstring endet. |
inIpRange(X, Y) | String | Gibt "true" zurück, wenn X eine IP-Adresse und Y ein IP-Bereich ist, der X enthält. Example: inIpRange("1.2.3.1", "1.2.3.0/24") |
x.containsFieldValue(y) | x: list y: map(string, string) |
Gibt "true" zurück, wenn die Liste ein Objekt mit Feldern enthält, die mit den angegebenen Schlüssel/Wert-Paaren übereinstimmen. Beispiel: dest_gke_details.service.containsFieldValue({'service_name': 'service1', 'service_namespace': 'namespace1'}) |
has(x) | String | Gibt „true“ zurück, wenn das Feld vorhanden ist. |