À propos des enregistrements de journaux de flux VPC

Cette page décrit le format des enregistrements 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.

Les champs de métadonnées présentent les limites suivantes :

  • 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.
  • Pour le champ internet_routing_details, le chemin du système autonome (AS) peut être manquant dans certains cas. Par exemple, lorsque les paquets sont acheminés au sein d'un cloud privé virtuel (VPC), les informations de chemin du serveur d'authentification ne sont pas incluses.
Champ Format du champ Type de champ : métadonnées de base ou facultatives
connexion IpConnection
5-tuple décrivant cette connexion.
Couches
reporter string
Côté ayant signalé le flux. Défini sur SRC ou DEST.
Couches
rtt_msec int64
Latence mesurée pendant l'intervalle de temps, seulement pour les flux TCP. 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
Horodatage (format de chaîne de date RFC 3339) du dernier paquet observé pendant l'intervalle de temps cumulé.
Couches
internet_routing_details InternetRoutingDetails
Si la connexion est établie 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
src_gke_details GkeDetails
Métadonnées GKE pour les points de terminaison sources. Disponible uniquement si le point de terminaison est un point GKE.
Métadonnées
dest_gke_details GkeDetails
Métadonnées GKE pour les points de terminaison de destination. Disponible uniquement si le point de terminaison est un point GKE.
Métadonnées
src_instance InstanceDetails
Si la source de la connexion est une VM située sur le même réseau VPC, les détails de l'instance de VM sont insérés dans ce champ. Dans une configuration de réseau VPC partagé, project_id correspond au projet propriétaire de l'instance, généralement le projet de service.
Métadonnées
dest_instance InstanceDetails
Si la destination de la connexion est une VM située sur le même réseau VPC, les détails de l'instance de VM sont insérés dans ce champ. Dans une configuration de réseau VPC partagé, project_id correspond au projet propriétaire de l'instance, généralement le projet de service.
Métadonnées
src_location GeographicDetails
Si la source de la connexion est externe au réseau VPC, les métadonnées disponible relatives à l'emplacement sont insérées dans ce champ.
Métadonnées
dest_location GeographicDetails
Si la destination de la connexion est externe au réseau VPC, les métadonnées disponibles relatives à l'emplacement sont insérées dans ce champ.
Métadonnées
src_vpc VpcDetails
Si la source de la connexion est une VM située sur le même réseau VPC, les détails du réseau VPC sont insérés dans ce champ. Dans une configuration de VPC partagé, project_id correspond à l'ID du projet hôte.
Métadonnées
dest_vpc VpcDetails
Si la destination de la connexion est une VM située sur le même réseau VPC, les détails du réseau VPC sont insérés dans ce champ. Dans une configuration de VPC partagé, project_id correspond à l'ID du projet hôte.
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 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 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

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 InstanceDetails

Champ Type Description
project_id string ID du projet contenant la VM
region string Région de la VM
vm_name string Nom d'instance de la VM
zone string 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 string Ville des points de terminaison externes
continent string Continent des points de terminaison externes
country 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).
region string Région des points de terminaison externes

Format de champ VpcDetails

Champ Type Description
project_id string ID du projet contenant le VPC
subnetwork_name string Sous-réseau sur lequel la VM fonctionne
vpc_name string VPC sur lequel la VM fonctionne

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 exemple src_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 la 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 String Concaténation de chaînes
"foo", 'foo', ... String Littéral de chaîne constante
x.lower() String Renvoie la valeur en minuscules de la chaîne
x.upper() String Renvoie la valeur en majuscules de la chaîne
x.contains(y) String Renvoie la valeur "true" si la chaîne contient la sous-chaîne spécifiée
x.startsWith(y) String Renvoie la valeur "true" si la chaîne commence par la sous-chaîne spécifiée
x.endsWith(y) String Renvoie la valeur "true" si la chaîne se termine par la sous-chaîne spécifiée
inIpRange(X, Y) String

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) String

Renvoie la valeur "true" si le champ est présent.

Étapes suivantes