À propos des enregistrements des journaux de flux VPC
Cette page décrit le format d'enregistrement des journaux de flux VPC, y compris les champs de base et de métadonnées disponibles. Il explique également comment vous pouvez utiliser le filtrage des journaux afin que seuls les journaux correspondant à certains critères soient générés.
Format de l'enregistrement
Les enregistrements de journal contiennent des champs de base, qui constituent les principaux champs de chaque enregistrement de journal, ainsi que des champs de métadonnées qui ajoutent des informations supplémentaires. Les champs de métadonnées peuvent être omis pour réduire les coûts de stockage.
Le format "multi-champs" de certains champs affiche plusieurs données dans un même champ. Par exemple, le champ connection
est au format IpConnection
, qui contient l'adresse IP et les ports sources et de destination ainsi que le protocole, dans un seul champ. Ces champs particuliers sont décrits sous le tableau relatif au format de l'enregistrement.
Remarque : Les valeurs des champs de métadonnées ne sont pas basées sur le chemin du plan de données. Elles sont approximatives, et peuvent être manquantes ou incorrectes. En revanche, les valeurs des champs de base proviennent directement des en-têtes des paquets.
Champ | Format du champ | Type de champ : métadonnées de base ou facultatives |
---|---|---|
connexion |
IpConnection
5-tuple décrivant le flux. |
Couches |
reporter |
string
Côté ayant signalé le flux. Il peut s'agir de SRC , DEST , SRC_GATEWAY ou DEST_GATEWAY .
|
Couches |
rtt_msec |
int64
Latence mesurée pendant l'intervalle de temps. Ce champ n'est disponible que pour le trafic TCP signalé par les VM. La latence mesurée correspond au temps écoulé entre l'envoi d'une séquence et la réception de l'indicateur ACK correspondant. Le résultat de la latence correspond à la somme de la latence DAR du réseau et de tout délai lié à l'application. |
Couches |
bytes_sent |
int64
Quantité d'octets envoyés depuis la source vers la destination. |
Couches |
packets_sent |
int64
Nombre de paquets envoyés depuis la source vers la destination. |
Couches |
start_time | string
Horodatage (format de chaîne de date RFC 3339) du premier paquet observé pendant l'intervalle de temps cumulé. |
Couches |
end_time |
string
Code temporel (format de chaîne de date RFC 3339) du dernier paquet observé pendant l'intervalle de temps cumulé. |
Couches |
Champs de métadonnées source et de destination | ||
src_gateway |
GatewayDetails
Si la source du flux est un point de terminaison cloud ou sur site connecté à Google Cloud via une passerelle telle qu'un rattachement VLAN pour Cloud Interconnect ou un tunnel Cloud VPN, et si l'une des conditions suivantes est remplie, ce champ est renseigné avec les détails de la passerelle :
|
Métadonnées |
dest_gateway |
GatewayDetails
Si la destination du flux est un point de terminaison cloud ou sur site connecté à Google Cloud via une passerelle telle qu'un rattachement VLAN pour Cloud Interconnect ou un tunnel Cloud VPN, et si l'une des conditions suivantes est remplie, ce champ est renseigné avec les informations de la passerelle :
|
Métadonnées |
src_gke_details |
GkeDetails
Si la source du flux est un point de terminaison Google Kubernetes Engine (GKE), ce champ contient les détails du point de terminaison GKE. |
Métadonnées |
dest_gke_details |
GkeDetails
Si la destination du flux est un point de terminaison GKE, ce champ contient les détails du point de terminaison GKE. |
Métadonnées |
src_google_service |
GoogleServiceDetails
Si la source du flux est une API Google, les métadonnées de l'API Google disponibles sont insérées dans ce champ. |
Métadonnées |
dest_google_service |
GoogleServiceDetails
Si la destination du flux est une API Google, les métadonnées de l'API Google disponibles sont insérées dans ce champ. |
Métadonnées |
src_instance |
InstanceDetails
Si la source du flux est une VM située sur un réseau VPC et que l'une des conditions suivantes est remplie, les détails de l'instance de VM sont insérés dans ce champ :
|
Métadonnées |
dest_instance |
InstanceDetails
Si la destination du flux est une VM située sur un réseau VPC et que l'une des conditions suivantes est remplie, les détails de l'instance de VM sont insérés dans ce champ.
|
Métadonnées |
src_location |
GeographicDetails
Si la source du flux est une adresse IP publique en dehors du réseau VPC, les métadonnées disponibles relatives à l'emplacement sont insérées dans ce champ. |
Métadonnées |
dest_location |
GeographicDetails
Si la destination du flux est une adresse IP publique en dehors du réseau VPC, les métadonnées disponibles concernant l'emplacement sont insérées dans ce champ. |
Métadonnées |
src_vpc |
VpcDetails
Si la source du flux est une VM située sur un réseau VPC et que l'une des conditions suivantes est remplie, ce champ contient les détails du réseau VPC :
|
Métadonnées |
dest_vpc |
VpcDetails
Si la destination du flux est une VM située sur un réseau VPC et que l'une des conditions suivantes est remplie, ce champ contient les détails du réseau VPC :
|
Métadonnées |
Autres champs de métadonnées | ||
internet_routing_details |
InternetRoutingDetails
Si le flux est établi entre Google Cloud et Internet, ce champ est renseigné avec des détails de routage. Disponible uniquement pour les flux de sortie. |
Métadonnées |
load_balancing |
LoadBalancingDetails
Si le flux passe par un équilibreur de charge dans l'une des configurations suivantes, ce champ est renseigné avec les informations de Cloud Load Balancing :
|
Métadonnées |
network_service |
NetworkServiceDetails
Si l'en-tête DSCP (Differentiated Services Code Point) est défini, ce champ contient les détails du service réseau. |
Métadonnées |
psc |
PrivateServiceConnectDetails
Si le flux passe par Private Service Connect dans l'une des configurations suivantes, ce champ est renseigné avec des informations sur Private Service Connect :
|
Métadonnées |
Format de champ IpConnection
Champ | Type | Description |
---|---|---|
protocol | int32 | Numéro de protocole IANA |
src_ip | string | Adresse IP source |
dest_ip | string | Adresse IP de destination |
src_port | int32 | Port source |
dest_port | int32 | Port de destination |
Format de champ GatewayDetails
Champ | Type | Description |
---|---|---|
project_id | chaîne | ID de projet Google Cloud de la passerelle |
emplacement | chaîne | Région de la passerelle |
nom | chaîne | Nom de la passerelle |
type | chaîne |
Type de passerelle. Il peut s'agir de INTERCONNECT_ATTACHMENT ou VPN_TUNNEL .
|
vpc | VpcDetails | Détails du réseau VPC de la passerelle |
Format de champ GkeDetails
Champ | Type | Description |
---|---|---|
cluster | ClusterDetails | Métadonnées du cluster GKE. |
pod | PodDetails | Métadonnées du pod GKE, renseignées lorsque la source ou la destination du trafic est un pod. |
service | ServiceDetails |
Métadonnées du service GKE, renseignées seulement dans les points de terminaison du service. L'enregistrement contient jusqu'à deux services. S'il existe plus de deux services pertinents, ce champ contient un seul service avec un marqueur MANY_SERVICES spécial.
|
Format de champ ClusterDetails
Champ | Type | Description |
---|---|---|
cluster_location | chaîne | Emplacement du cluster. Il peut s'agir d'une zone ou d'une région selon que le cluster est zonal ou régional. |
cluster_name | chaîne | Nom du cluster GKE. |
Format de champ PodDetails
Champ | Type | Description |
---|---|---|
pod_name | chaîne | Nom du pod |
pod_namespace | chaîne | Espace de noms du pod |
pod_workload | WorkloadDetails | Métadonnées sur la ressource de charge de travail de premier niveau qui contrôle le pod |
Format de champ WorkloadDetails
Champ | Type | Description |
---|---|---|
workload_name | chaîne | Nom du contrôleur de charge de travail de premier niveau |
workload_type | chaîne |
Type du contrôleur de charge de travail de premier niveau. Il peut s'agir de DEPLOYMENT , REPLICA_SET , STATEFUL_SET , DAEMON_SET , JOB , CRON_JOB ou REPLICATION_CONTROLLER .
|
Format de champ ServiceDetails
Champ | Type | Description |
---|---|---|
service_name | chaîne |
Nom du service. S'il existe plus de deux services pertinents, le champ est défini sur un marqueur MANY_SERVICES spécial.
|
service_namespace | chaîne | Espace de noms du service. |
Exemple :
S'il existe deux services, le champ "Service" se présente comme suit :
service: [ 0: { service_name: "my-lb-service" service_namespace: "default" } 1: { service_name: "my-lb-service2" service_namespace: "default" } ]
S'il existe plus de deux services, le champ "Service" se présente comme suit :
service: [ 0: { service_name: "MANY_SERVICES" } ]
Format de champ GoogleServiceDetails
Champ | Type | Description |
---|---|---|
type | chaîne | Ce champ est défini sur GOOGLE_API . |
Format de champ InstanceDetails
Champ | Type | Description |
---|---|---|
project_id | chaîne | ID du projet Google Cloud contenant la ressource VM |
région | chaîne | Région de la VM |
vm_name | chaîne | Nom d'instance de la VM |
zone | chaîne | Zone de la VM |
Format de champ GeographicDetails
Champ | Type | Description |
---|---|---|
asn | int32 | Numéro ASN du réseau externe auquel ce point de terminaison appartient. |
city | chaîne | Ville des points de terminaison externes |
continent | chaîne | Continent des points de terminaison externes |
pays | chaîne | Pays des points de terminaison externes, représentés par leurs codes pays sur trois lettres (code alpha-3 selon l'ISO 3166-1). |
région | chaîne | Région des points de terminaison externes |
Format de champ VpcDetails
Champ | Type | Description |
---|---|---|
project_id | chaîne | ID du projet Google Cloud contenant le VPC. Dans une configuration de VPC partagé, project_id correspond à l'ID du projet hôte. |
subnetwork_name | chaîne | Nom du sous-réseau, le cas échéant |
subnetwork_region | chaîne | Région du sous-réseau, le cas échéant |
vpc_name | chaîne | Nom du réseau |
Format du champ InternetRoutingDetails
Champ | Type | Description |
---|---|---|
egress_as_path | AsPath | Liste des chemins AS correspondants. Si plusieurs chemins AS sont disponibles pour le flux, le champ peut contenir plusieurs chemins AS. |
Format du champ AsPath
Champ | Type | Description |
---|---|---|
as_details | AsDetails | Liste des détails AS pour tous les systèmes dans le chemin AS. La liste commence par le premier AS externe au réseau Google Cloud et se termine par l'AS auquel appartient l'adresse IP distante. |
Format du champ AsDetails
Champ | Type | Description |
---|---|---|
asn | uint32 | Numéro de système autonome (ASN) de l'AS |
Format de champ LoadBalancingDetails
Champ | Type | Description |
---|---|---|
forwarding_rule_project_id | chaîne | ID de projet Google Cloud de la règle de transfert |
reporter | chaîne | Outil de signalement Cloud Load Balancing. Peut correspondre à CLIENT ou BACKEND .
|
type | chaîne | Type d'équilibreur de charge. Il peut s'agir de APPLICATION_LOAD_BALANCER , PROXY_NETWORK_LOAD_BALANCER , PASSTHROUGH_NETWORK_LOAD_BALANCER ou PROTOCOL_FORWARDING . |
schéma | chaîne | Schéma de l'équilibreur de charge. Il peut s'agir de EXTERNAL_MANAGED , INTERNAL_MANAGED , EXTERNAL , INTERNAL ou INTERNAL_SELF_MANAGED . |
url_map_name | chaîne | Nom du mappage d'URL. Inséré si le type de l'équilibreur de charge est APPLICATION_LOAD_BALANCER . |
forwarding_rule_name | chaîne | Nom de la règle de transfert |
backend_service_name | chaîne | Nom du service de backend. Inséré si le signaleur est BACKEND et que le type d'équilibreur de charge est PASSTHROUGH_NETWORK_LOAD_BALANCER . Si le type de groupe de backend est TARGET_POOL , ce champ n'est pas renseigné. |
backend_group_name | chaîne | Nom du groupe de backend. Inséré si le signaleur est BACKEND et que le type d'équilibreur de charge est PASSTHROUGH_NETWORK_LOAD_BALANCER . |
backend_group_type | chaîne | Type du groupe de backend. Il peut s'agir de INSTANCE_GROUP , NETWORK_ENDPOINT_GROUP ou TARGET_POOL .
Inséré si le signaleur est BACKEND et que le type d'équilibreur de charge est PASSTHROUGH_NETWORK_LOAD_BALANCER . |
backend_group_location | chaîne | Emplacement du groupe de backend. Peut être une zone ou une région, selon que le champ d'application du groupe de backend est zonal ou régional.
Inséré si le signaleur est BACKEND et que le type d'équilibreur de charge est PASSTHROUGH_NETWORK_LOAD_BALANCER . Si le type de groupe de backend est TARGET_POOL , ce champ n'est pas renseigné. |
vpc | VpcDetails | Détails du réseau VPC de l'équilibreur de charge |
Format de champ NetworkServiceDetails
Champ | Type | Description |
---|---|---|
dscp | int32 | Si le champ Differentiated Services est présent dans les en-têtes de paquets, la valeur DSCP est insérée dans ce champ. |
Format de champ PrivateServiceConnectDetails
Champ | Type | Description |
---|---|---|
reporter | chaîne | Outil de signalement Private Service Connect
Peut correspondre à CONSUMER ou PRODUCER . |
psc_endpoint | PrivateServiceConnectEndpointDetails |
Informations sur le point de terminaison. Champ renseigné si l'auteur du signalement est CONSUMER .
|
psc_attachment | PrivateServiceConnectAttachmentDetails | Détails du rattachement de service. Inséré si le flux de trafic inclut un producteur Private Service Connect. |
Format de champ PrivateServiceConnectEndpointDetails
Champ | Type | Description |
---|---|---|
project_id | chaîne | ID de projet Google Cloud du point de terminaison Private Service Connect |
région | chaîne | Région du point de terminaison. Non renseigné si le type de service cible est GLOBAL_GOOGLE_APIS . |
psc_connection_id | chaîne | ID de connexion Private Service Connect |
target_service_type | chaîne | Type de service cible. Peut correspondre à GLOBAL_GOOGLE_APIS ou PUBLISHED_SERVICE . |
vpc | VpcDetails | Informations sur le réseau VPC du point de terminaison Private Service Connect |
Format de champ PrivateServiceConnectAttachmentDetails
Champ | Type | Description |
---|---|---|
project_id | chaîne | ID de projet Google Cloud du rattachement de service |
région | chaîne | Région du rattachement de service |
vpc | VpcDetails | Détails du réseau VPC du rattachement de service |
Annotations des métadonnées
Les enregistrements de journal contiennent des champs de base et des champs de métadonnées. La section Format de l'enregistrement répertorie les champs qui sont des métadonnées de type et ceux de base. Tous les champs de base sont toujours inclus. Vous pouvez personnaliser les champs de métadonnées à conserver.
Si vous sélectionnez toutes les métadonnées, tous les champs de métadonnées au format d'enregistrement des journaux de flux VPC sont inclus dans les journaux de flux. Lorsque de nouveaux champs de métadonnées sont ajoutés au format d'enregistrement, les journaux de flux incluent automatiquement les nouveaux champs.
Si vous ne sélectionnez aucune métadonnée, tous les champs de métadonnées sont omis.
Si vous sélectionnez des métadonnées personnalisées, vous pouvez spécifier les champs de métadonnées que vous souhaitez inclure par le champ parent, tels que
src_vpc
, ou par leur nom complet, par exemplesrc_vpc.project_id
.Lorsque de nouveaux champs de métadonnées sont ajoutés au format d'enregistrement, ils sont exclus des journaux de flux, sauf s'ils se trouvent dans un champ parent que vous avez spécifié.
Si vous spécifiez des métadonnées personnalisées à l'aide de champs parents, lorsque de nouveaux champs de métadonnées sont ajoutés au format d'enregistrement au sein de ce champ parent, les journaux de flux incluent automatiquement les nouveaux champs.
Si vous spécifiez des métadonnées personnalisées à l'aide du nom complet du champ, les nouveaux champs de métadonnées ajoutés au champ parent sont exclus des journaux de flux.
Pour en savoir plus sur la personnalisation des champs de métadonnées, consultez les instructions de Google Cloud CLI ou de l'API pour activer la journalisation de flux VPC lorsque vous créez un sous-réseau.
Annotations de métadonnées GKE
Les flux comportant un point de terminaison dans un cluster GKE peuvent être annotés avec des annotations de métadonnées GKE, qui peuvent inclure des détails sur le cluster, le pod et le service du point de terminaison.
Annotations de service GKE
Le trafic envoyé à une ressource ClusterIP, NodePort ou LoadBalancer peut recevoir des annotations de service. Si le trafic est envoyé à une ressource NodePort ou LoadBalancer, le flux reçoit l'annotation de service sur les deux sauts de la connexion.
Le trafic envoyé directement au port de service d'un pod est annoté avec une annotation de service sur le point de terminaison de destination.
Le trafic envoyé au port de service d'un pod où le pod sauvegarde plusieurs services sur le même port de service est annoté avec plusieurs services sur le point de terminaison de destination. Ce processus est limité à deux services. S'il y en a plus, le point de terminaison sera annoté avec un marqueur MANY_SERVICES
spécial.
Annotations de pod sur le trafic Internet
Le trafic entre un pod et Internet ne reçoit pas d'annotations de pod par défaut. Les journaux de flux VPC ne peuvent pas ajouter d'annotations de pod, car pour les paquets à destination d'Internet, l'agent de masquage traduit l'adresse IP du pod en adresse IP du nœud avant que les journaux de flux VPC ne voient le paquet.
En raison du masquage, les annotations de pod ne sont visibles que si les destinations se trouvent dans l'un des deux emplacements suivants : des destinations non masquées par défaut ou une liste nonMasqueradeCIDRs
personnalisée.
Si vous incluez des destinations Internet dans une liste nonMasqueradeCIDRs
personnalisée, vous devez fournir un moyen de traduire les adresses IP internes du pod avant qu'elles ne soient transmises à Internet. Pour les clusters privés et non privés, vous pouvez utiliser Cloud NAT. Consultez la section Interaction avec GKE pour en savoir plus.
Filtrage des journaux
Lorsque vous activez les journaux de flux VPC, vous pouvez définir un filtre basé sur les champs de base et de métadonnées qui ne conservent que les journaux correspondant au filtre. Tous les autres journaux sont supprimés avant d'être écrits dans Logging, ce qui vous permet de réaliser des économies et de réduire le temps nécessaire à la localisation des informations recherchées.
Vous pouvez filtrer sur n'importe quel sous-ensemble des champs répertoriés dans Format des enregistrements, à l'exception des champs suivants :
rtt_msec
bytes_sent
packets_sent
start_time
end_time
Le filtrage des journaux de flux VPC utilise CEL, un langage d'expression intégré pour les expressions logiques basées sur des attributs. Les expressions de filtre pour les journaux de flux VPC sont limitées à 2 048 caractères. Pour en savoir plus, consultez la section Opérateurs logiques CEL compatibles.
Pour plus d'informations sur la syntaxe CEL, consultez la présentation de CEL et la définition du langage. La fonctionnalité de filtre de génération est compatible avec un sous-ensemble limité de la syntaxe CEL.
Pour en savoir plus sur la création d'un sous-réseau qui utilise le filtrage de journaux, consultez les instructions de gcloud CLI ou de l'API pour Activer les journaux de flux VPC lorsque vous créez un sous-réseau.
Pour en savoir plus sur la configuration du filtrage des journaux, consultez les instructions de gcloud CLI ou de l'API pour mettre à jour les paramètres des journaux de flux VPC.
Exemple 1 : Limiter la collecte des journaux à une VM spécifique nommée my-vm
. Dans ce cas, les journaux ne sont enregistrés que lorsque le champ src_instance
, tel qu'il est signalé par la source du trafic, correspond à my-vm
ou lorsque le champ dst_instance
, tel qu'il est signalé par la destination du trafic, correspond à my-vm
.
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')"
Exemple 2 : Limiter la collecte des journaux aux paquets dont les adresses IP sources se trouvent dans le sous-réseau 10.0.0.0/8
.
gcloud compute networks subnets update my-subnet \ --logging-filter-expr="inIpRange(connection.src_ip, '10.0.0.0/8')"
Exemple 3 : Limiter la collecte des journaux au trafic externe à un VPC
gcloud compute networks subnets update my-subnet \ --logging-filter-expr '!(has(src_vpc.vpc_name) && has(dest_vpc.vpc_name))'
Opérateurs logiques CEL compatibles
Expression | Types compatibles | Description |
---|---|---|
true, false | Booléen | Constantes booléennes |
x == y x != y |
Boolean, Int, String | Opérateurs de comparaison Exemple : connection.protocol == 6 |
x && y x || y |
Booléen | Opérateurs logiques booléens Exemple : connection.protocol == 6 && src_instance.vm_name == "vm_1" |
!x | Booléen | Négation |
1, 2.0, 0, ... | Int | Littéraux numériques constants |
x + y | Chaîne | Concaténation de chaînes |
"foo", 'foo', ... | Chaîne | Littéral de chaîne constante |
x.lower() | Chaîne | Renvoie la valeur en minuscules de la chaîne |
x.upper() | Chaîne | Renvoie la valeur en majuscules de la chaîne |
x.contains(y) | Chaîne | Renvoie la valeur "true" si la chaîne contient la sous-chaîne spécifiée |
x.startsWith(y) | Chaîne | Renvoie la valeur "true" si la chaîne commence par la sous-chaîne spécifiée |
x.endsWith(y) | Chaîne | Renvoie la valeur "true" si la chaîne se termine par la sous-chaîne spécifiée |
inIpRange(X, Y) | Chaîne | Renvoie la valeur "true" si X est une adresse IP et si Y est une plage d'adresses IP contenant X. Exemple : inIpRange("1.2.3.1", "1.2.3.0/24") |
x.containsFieldValue(y) |
x: list y: map(string, string) |
Renvoie la valeur "true" si la liste contient un objet dont les champs correspondent aux paires clé/valeur spécifiées. Exemple : dest_gke_details.service.containsFieldValue({'service_name': 'service1', 'service_namespace': 'namespace1'}) |
has(x) | Chaîne | Renvoie la valeur "true" si le champ est présent. |