À 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 |
région | 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). |
région | 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 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 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 | 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. |