Acerca de los registros de flujo de VPC
En esta página, se describe el formato de los registros de flujo de VPC, incluido qué campos de bases y de metadatos están disponibles. También se explica cómo puedes usar el filtrado de registros para que solo se generen los registros que coincidan con ciertos criterios.
Formato del registro
Los registros contienen campos base, que son los campos principales de cada registro, y campos de metadatos que agregan información adicional. Los campos de metadatos se pueden omitir para ahorrar costos de almacenamiento.
Algunos campos de registro se encuentran en formato de varios campos y poseen más de un dato en un campo específico. Por ejemplo, el campo connection
tiene el formato IpConnection
, que contiene el puerto y la dirección IP de origen y destino, además del protocolo, en un solo campo. Estos campos de varios campos se describen a continuación en la tabla de formato de registros.
Los valores de los campos de metadatos no se basan en la ruta del plano de datos; son aproximaciones y es posible que algunos falten o sean incorrectos. A diferencia de los campos de metadatos, los valores de los campos de base se toman directamente de los encabezados de paquetes.
Campo | Formato del campo | Tipo del campo: base o metadatos opcionales |
---|---|---|
connection |
IpConnection 5 tuplas que describen el flujo. |
Base |
reporter |
string El lado que reportó el flujo. Puede ser SRC , DEST , SRC_GATEWAY o
DEST_GATEWAY .
|
Base |
rtt_msec |
int64 Latencia medida durante el intervalo de tiempo. Este campo solo está disponible para el tráfico de TCP informado desde las VMs. La latencia medida es el tiempo transcurrido entre el envío de un SEQ y la recepción de un ACK correspondiente. El resultado de la latencia es la suma del RTT de la red y el tiempo que consume la aplicación. |
Base |
bytes_sent | int64 Cantidad de bytes que se enviaron desde el origen hacia el destino. |
Base |
packets_sent | int64 Cantidad de paquetes que se enviaron desde el origen hacia el destino. |
Base |
start_time | string Marca de tiempo (string con formato de fecha RFC 3339) del primer paquete observado durante el intervalo de tiempo agregado |
Base |
end_time | cadena Marca de tiempo (cadena con formato de fecha RFC 3339) del último paquete que se observó durante el intervalo de tiempo agregado. |
Base |
Campos de metadatos de origen y destino | ||
src_gateway |
GatewayDetails
Si la fuente del flujo es un extremo local o de otra nube que está conectado a Google Cloud a través de una puerta de enlace, como un adjunto de VLAN para Cloud Interconnect o un túnel de Cloud VPN, y se cumple alguna de las siguientes condiciones, este campo se propaga con los detalles de la puerta de enlace:
|
Metadatos |
dest_gateway |
GatewayDetails
Si el destino del flujo es un extremo local o de otra nube que está conectado a Google Cloud a través de una puerta de enlace, como un adjunto de VLAN para Cloud Interconnect o un túnel de Cloud VPN, y se cumple alguna de las siguientes condiciones, este campo se propaga con los detalles de la puerta de enlace:
|
Metadatos |
src_gke_details |
GkeDetails Si la fuente del flujo es un extremo de Google Kubernetes Engine (GKE), este campo se propaga con los detalles del extremo de GKE. |
Metadatos |
dest_gke_details |
GkeDetails
Si el destino del flujo es un extremo de GKE, este campo se completa con los detalles del extremo de GKE. |
Metadatos |
src_google_service |
GoogleServiceDetails
Si la fuente del flujo es una API de Google, este campo se completa con los metadatos disponibles de la API de Google. |
Metadatos |
dest_google_service |
GoogleServiceDetails
Si el destino del flujo es una API de Google, este campo se completa con los metadatos disponibles de la API de Google. |
Metadatos |
src_instance |
InstanceDetails
Si la fuente del flujo es una VM ubicada en una red de VPC y se cumple alguna de las siguientes condiciones, este campo se propaga con los detalles de la instancia de VM:
|
Metadatos |
dest_instance |
InstanceDetails
Si el destino del flujo es una VM ubicada en una red de VPC y se cumple alguna de las siguientes condiciones, este campo se propaga con los detalles de la instancia de VM.
|
Metadatos |
src_location |
GeographicDetails
Si la fuente del flujo es una dirección IP pública fuera de la red de VPC, este campo se propaga con los metadatos de ubicación disponibles. |
Metadatos |
dest_location |
GeographicDetails
Si el destino del flujo es una dirección IP pública fuera de la red de VPC, este campo se propaga con los metadatos de ubicación disponibles. |
Metadatos |
src_vpc |
VpcDetails
Si la fuente del flujo es una VM ubicada en una red de VPC y se cumple alguna de las siguientes condiciones, este campo se propaga con los detalles de la red de VPC:
|
Metadatos |
dest_vpc |
VpcDetails
Si el destino del flujo es una VM ubicada en una red de VPC y se cumple cualquiera de las siguientes condiciones, este campo se propaga con los detalles de la red de VPC:
|
Metadatos |
Otros campos de metadatos | ||
internet_routing_details |
InternetRoutingDetails
Si el flujo es entre Internet y Google Cloud, este campo se propaga con los detalles de enrutamiento. Disponible solo para los flujos de salida. |
Metadatos |
load_balancing |
LoadBalancingDetails
Si el flujo pasa por un balanceador de cargas en una de las siguientes configuraciones, este campo se completa con los detalles de Cloud Load Balancing:
|
Metadatos |
network_service |
NetworkServiceDetails
Si se establece el encabezado de punto de código de servicios diferenciados (DSCP), este campo se completa con los detalles del servicio de red. |
Metadatos |
psc |
PrivateServiceConnectDetails
Si el flujo pasa por Private Service Connect en cualquiera de las siguientes configuraciones, este campo se propaga con los detalles de Private Service Connect:
|
Metadatos |
Formato del campo IpConnection
Campo | Tipo | Descripción |
---|---|---|
protocolo | int32 | Número del protocolo IANA |
src_ip | cadena | Dirección IP de origen |
dest_ip | cadena | Dirección IP de destino |
src_port | int32 | Puerto de origen |
dest_port | int32 | Puerto de destino |
Formato del campo GatewayDetails
Campo | Tipo | Descripción |
---|---|---|
project_id | cadena | ID del proyecto de Google Cloud de la puerta de enlace |
ubicación | cadena | Región de la puerta de enlace |
name | cadena | Nombre de la puerta de enlace |
tipo | cadena |
Es el tipo de puerta de enlace. Puede ser INTERCONNECT_ATTACHMENT o VPN_TUNNEL .
|
vpc | VpcDetails | Detalles de la red de VPC de la puerta de enlace |
Formato del campo GkeDetails
Campo | Tipo | Descripción |
---|---|---|
clúster | ClusterDetails | Metadatos del clúster de GKE |
pod | PodDetails | Metadatos del Pod de GKE, propagados cuando el origen o el destino del tráfico es un Pod |
servicio | ServiceDetails |
Metadatos del Service de GKE, propagados solo en los extremos del Service. El registro contiene hasta dos Service. Si hay más de dos Service relevantes, este campo contiene un solo Service con un marcador MANY_SERVICES especial.
|
Formato del campo ClusterDetails
Campo | Tipo | Descripción |
---|---|---|
cluster_location | cadena | Ubicación del clúster. Puede ser una zona o región, dependiendo de si se trata de un clúster zonal o regional. |
cluster_name | cadena | Nombre del clúster de GKE. |
Formato del campo PodDetails
Campo | Tipo | Descripción |
---|---|---|
pod_name | cadena | Nombre del Pod. |
pod_namespace | cadena | Espacio de nombres del Pod. |
pod_workload | WorkloadDetails | Metadatos sobre el recurso de carga de trabajo de nivel superior que controla el Pod |
Formato del campo WorkloadDetails
Campo | Tipo | Descripción |
---|---|---|
workload_name | cadena | Nombre del controlador de carga de trabajo de nivel superior |
workload_type | cadena |
Es el tipo de controlador de cargas de trabajo de nivel superior. Puede ser
DEPLOYMENT , REPLICA_SET ,
STATEFUL_SET , DAEMON_SET , JOB ,
CRON_JOB o
REPLICATION_CONTROLLER .
|
Formato del campo ServiceDetails
Campo | Tipo | Descripción |
---|---|---|
service_name | cadena |
Nombre del Service. Si hay más de dos Service relevantes, el campo se configura como un marcador MANY_SERVICES especial.
|
service_namespace | cadena | Espacio de nombres del Service |
Ejemplo:
Si hay dos servicios, el campo Service tiene el siguiente aspecto:
service: [ 0: { service_name: "my-lb-service" service_namespace: "default" } 1: { service_name: "my-lb-service2" service_namespace: "default" } ]
Si hay más de dos servicios, el campo Service tiene el siguiente aspecto:
service: [ 0: { service_name: "MANY_SERVICES" } ]
Formato del campo GoogleServiceDetails
Campo | Tipo | Descripción |
---|---|---|
tipo | cadena | Este campo se establece como GOOGLE_API . |
Formato del campo InstanceDetails
Campo | Tipo | Descripción |
---|---|---|
project_id | cadena | ID del proyecto de Google Cloud que contiene el recurso de VM |
región | cadena | Región de la VM |
vm_name | cadena | Nombre de la instancia de la VM. |
zona | cadena | Zona de la VM |
Formato del campo GeographicDetails
Campo | Tipo | Descripción |
---|---|---|
asn | int32 | El ASN de la red externa a la que pertenece el extremo. |
ciudad | cadena | Ciudad para los extremos externos. |
continent | cadena | Continente de los extremos externos. |
País | cadena | País para los extremos externos, representado como un código de país de ISO 3166-1 Alpha-3. |
región | cadena | Región de los extremos externos. |
Formato del campo VpcDetails
Campo | Tipo | Descripción |
---|---|---|
project_id | cadena | Es el ID del proyecto de Google Cloud que contiene la VPC. En una configuración de VPC compartida, project_id es el ID del proyecto host. |
subnetwork_name | cadena | Nombre de la subred, si corresponde |
subnetwork_region | cadena | Región de la subred, si corresponde |
vpc_name | cadena | Nombre de la red |
Formato del campo InternetRouteDetails
Campo | Tipo | Descripción |
---|---|---|
egress_as_path | AsPath | Lista de rutas de acceso de AS relevantes. Si hay varias rutas de acceso de AS disponibles para el flujo, el campo puede contener más de una ruta de acceso de AS. |
Formato de campo AsPath
Campo | Tipo | Descripción |
---|---|---|
as_details | AsDetails | Lista de detalles del AS para todos los sistemas de la ruta de acceso del AS. La lista empieza desde el primer AS externo a la red de Google Cloud y termina con el AS al que pertenece la dirección IP remota. |
Formato del campo AsDetails
Campo | Tipo | Descripción |
---|---|---|
asn | uint32 | Es el número de sistema autónomo (ASN) del AS. |
Formato del campo LoadBalancingDetails
Campo | Tipo | Descripción |
---|---|---|
forwarding_rule_project_id | cadena | ID del proyecto de Google Cloud de la regla de reenvío |
reporter | cadena | Generador de informes de Cloud Load Balancing Puede ser CLIENT o BACKEND .
|
tipo | cadena | Tipo de balanceador de cargas. Puede ser
APPLICATION_LOAD_BALANCER , PROXY_NETWORK_LOAD_BALANCER , PASSTHROUGH_NETWORK_LOAD_BALANCER ,
o PROTOCOL_FORWARDING . |
esquema | cadena | Esquema del balanceador de cargas. Puede ser
EXTERNAL_MANAGED , INTERNAL_MANAGED , EXTERNAL ,
INTERNAL o INTERNAL_SELF_MANAGED . |
url_map_name | cadena | Es el nombre del mapa de URL. Se completa si el tipo del
balanceador de cargas es APPLICATION_LOAD_BALANCER . |
forwarding_rule_name | cadena | Nombre de la regla de reenvío |
backend_service_name | cadena | Es el nombre del servicio de backend. Se completa si el generador de informes es BACKEND y el tipo de balanceador de cargas es PASSTHROUGH_NETWORK_LOAD_BALANCER . Si el tipo de grupo de backend es TARGET_POOL , este campo no se completa. |
backend_group_name | cadena | Es el nombre del grupo de backend. Se completa si el generador de informes es BACKEND y el tipo de balanceador de cargas es PASSTHROUGH_NETWORK_LOAD_BALANCER . |
backend_group_type | cadena | Tipo del grupo de backend. Puede ser
INSTANCE_GROUP , NETWORK_ENDPOINT_GROUP o TARGET_POOL .
Se completa si el generador de informes es BACKEND y el tipo de balanceador de cargas es PASSTHROUGH_NETWORK_LOAD_BALANCER . |
backend_group_location | cadena | Es la ubicación del grupo de backend. Puede ser una zona o una región, según si el alcance del grupo de backend es zonal o regional.
Se completa si el generador de informes es BACKEND y el tipo de balanceador de cargas es PASSTHROUGH_NETWORK_LOAD_BALANCER . Si el tipo de grupo de backend es TARGET_POOL , este campo no se completa. |
vpc | VpcDetails | Detalles de la red de VPC del balanceador de cargas |
Formato del campo NetworkServiceDetails
Campo | Tipo | Descripción |
---|---|---|
dscp | int32 | Si el campo de servicios diferenciados está presente en los encabezados de los paquetes, este campo se completa con el valor de DSCP. |
Formato del campo PrivateServiceConnectDetails
Campo | Tipo | Descripción |
---|---|---|
reporter | cadena | Generador de informes de Private Service Connect.
Puede ser CONSUMER o PRODUCER . |
psc_endpoint | PrivateServiceConnectEndpointDetails |
Detalles del extremo. Se propaga si el informador es CONSUMER .
|
psc_attachment | PrivateServiceConnectAttachmentDetails | Detalles del adjunto de servicio. Se propaga si el flujo de tráfico incluye un productor de Private Service Connect. |
Formato del campo PrivateServiceConnectEndpointDetails
Campo | Tipo | Descripción |
---|---|---|
project_id | cadena | ID del proyecto de Google Cloud del extremo de Private Service Connect |
región | cadena | Región del extremo. No se completa si el tipo de servicio de destino es GLOBAL_GOOGLE_APIS . |
psc_connection_id | cadena | ID de conexión de Private Service Connect |
target_service_type | cadena | Tipo de servicio de destino. Puede ser GLOBAL_GOOGLE_APIS o PUBLISHED_SERVICE . |
vpc | VpcDetails | Detalles de la red de VPC del extremo de Private Service Connect |
Formato del campo PrivateServiceConnectAttachmentDetails
Campo | Tipo | Descripción |
---|---|---|
project_id | cadena | ID del proyecto de Google Cloud del adjunto de servicio |
región | cadena | Región del adjunto de servicio |
vpc | VpcDetails | Detalles de la red de VPC del adjunto del servicio |
Anotaciones de metadatos
Los registros contienen campos base y campos de metadatos. En la sección Formato del registro, se enumeran los campos que son de tipo metadatos y los que son de tipo base. Todos los campos base siempre se incluyen. Puedes personalizar qué campos de metadatos conservas.
Si seleccionas todos los metadatos, todos los campos de metadatos en el formato de registro Registros de flujo de VPC se incluyen en los registros de flujo. Cuando se agregan campos de metadatos nuevos al formato del registro, los registros de flujo incluyen automáticamente los campos nuevos.
Si no seleccionas metadatos, se omitirán todos los campos de metadatos.
Si seleccionas metadatos personalizados, puedes especificar los campos de metadatos que deseas incluir con el campo superior, como
src_vpc
, o con sus nombres completos, comosrc_vpc.project_id
Cuando se agregan campos de metadatos nuevos al formato del registro, se excluyen de los registros de flujo, a menos que estén dentro de un campo superior que hayas especificado.
Si especificas metadatos personalizados con campos superiores, cuando los campos de metadatos nuevos se agreguen al formato del registro de ese campo superior, los registros de flujo incluirán automáticamente los campos nuevos.
Si especificas metadatos personalizados con el nombre completo del campo, los campos de metadatos nuevos que se agreguen al campo superior se excluirán de los registros de flujo.
Si quieres obtener información acerca de cómo personalizar campos de metadatos, consulta las instrucciones de Google Cloud CLI o la API para habilitar el registro de flujo de VPC cuando creas una subred.
Anotaciones de metadatos de GKE
Los flujos que tienen un extremo en un clúster de GKE pueden anotarse con anotaciones de los metadatos de GKE, que pueden incluir detalles del clúster, el Pod y el Service del extremo.
Anotaciones del Service de GKE
El tráfico enviado a un ClusterIP, NodePort o LoadBalancer puede recibir anotaciones del servicio. Si se envía a un NodePort o un LoadBalancer, el flujo recibe la anotación del Service en ambos saltos de la conexión.
El tráfico enviado de forma directa al puerto de Service de un Pod se anota con una anotación del Service en el extremo de destino.
El tráfico enviado al puerto de Service de un Pod en el que el Pod está creando una copia de seguridad de más de un Service en el mismo puerto se anota con varios Service en el extremo de destino. Se limita a dos Service. Si hay más que eso, el extremo se anotará con un marcador MANY_SERVICES
especial.
Anotaciones de Pod en el tráfico de Internet
De forma predeterminada, el tráfico entre un Pod e Internet no recibe anotaciones de Pod. Los registros de flujo de VPC no pueden agregar anotaciones de Pod porque, en el caso de los paquetes a Internet, el agente de enmascaramiento traduce la dirección IP del Pod a la dirección IP del nodo antes de que los registros de flujo de VPC vean el paquete.
Debido al enmascaramiento, las anotaciones de Pod solo son visibles si los destinos se encuentran dentro de los destinos predeterminados sin enmascarar o en una lista nonMasqueradeCIDRs
personalizada.
Si incluyes destinos de Internet en una lista nonMasqueradeCIDRs
personalizada, debes proporcionar una forma de que las direcciones IP internas del Pod se traduzcan antes de que se entreguen a Internet. Para los clústeres privados y no privados, puedes usar Cloud NAT. Consulta Interacción de GKE para obtener más detalles.
Filtrado de registros
Cuando habilitas los registros de flujo de VPC, puedes configurar un filtro basado en los campos base y de metadatos que solo conservan los registros que coinciden con el filtro. Todos los demás registros se descartan antes de escribirse en Logging, lo que te ahorra dinero y reduce el tiempo necesario para encontrar la información que buscas.
Puedes filtrar cualquier subconjunto de campos que aparezca en Formato del registro, excepto para los siguientes campos:
rtt_msec
bytes_sent
packets_sent
start_time
end_time
Los filtros de registros de flujo de VPC usan CEL, un lenguaje de expresión incorporado para las expresiones lógicas basadas en atributos. Las expresiones de filtro para los registros de flujo de VPC tienen un límite de 2,048 caracteres. Para obtener más información, consulta Operadores lógicos CEL admitidos.
Para obtener más información acerca del CEL, consulta la introducción a CEL y la definición de lenguaje. La función de filtro de generación admite un subconjunto limitado de sintaxis CEL.
Si deseas obtener información acerca de cómo crear una subred que use el filtrado de registros, consulta las instrucciones de gcloud CLI o de la API para habilitar los registros de flujo de VPC cuando creas una subred.
Si deseas obtener información para configurar el filtrado de registros, consulta gcloud CLI o las instrucciones de la API para actualizar los parámetros de registros de flujo de VPC.
Ejemplo 1: Limita la recopilación de registros a una VM específica llamada my-vm
. En este caso, solo se graban los registros en los que el campo src_instance
informado por la fuente del tráfico es my-vm
o el campo dst_instance
, como lo indica el destino del tráfico es 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')"
Ejemplo 2: Limita la recopilación de registros a los paquetes cuyas direcciones IP de origen estén en la subred 10.0.0.0/8
.
gcloud compute networks subnets update my-subnet \ --logging-filter-expr="inIpRange(connection.src_ip, '10.0.0.0/8')"
Ejemplo 3: Limita la recopilación de registros al tráfico externo a una VPC.
gcloud compute networks subnets update my-subnet \ --logging-filter-expr '!(has(src_vpc.vpc_name) && has(dest_vpc.vpc_name))'
Operadores lógicos CEL admitidos
Expresión | Tipos compatibles | Descripción |
---|---|---|
true, false | Booleano | Constantes booleanas |
x == y x != y |
Booleano, Int, String | Operadores de comparación Ejemplo: connection.protocol == 6 |
x && y x || y |
Booleano | Operadores lógicos booleanos Ejemplo: connection.protocol == 6 && src_instance.vm_name == "vm_1" |
!x | Booleano | Negación |
1, 2.0, 0, ... | Int | Literales numéricos constantes |
x + y | String | Concatenación de cadenas |
"foo", 'foo', ... | String | Literal de string constante |
x.lower() | String | Muestra el valor de la string en minúsculas |
x.upper() | String | Muestra el valor de la string en mayúsculas |
x.contains(y) | String | El resultado es verdadero si la string contiene la substring especificada |
x.startsWith(y) | String | El resultado es verdadero si la string comienza con la substring especificada |
x.endsWith(y) | String | El resultado es verdadero si la string termina con la substring especificada |
inIpRange(X, Y) | String | El resultado es verdadero si X es una IP e Y es un rango de IP que contiene X Ejemplo: inIpRange("1.2.3.1", "1.2.3.0/24") |
x.containsFieldValue(y) | x: lista y: mapa(string, string) |
El resultado es verdadero si la lista contiene un objeto con campos que coinciden con los pares clave-valor especificados. Ejemplo: dest_gke_details.service.containsFieldValue({'service_name': 'service1', 'service_namespace': 'namespace1'}) |
tiene(x) | String | Muestra verdadero si el campo está presente. |