Sobre os registros de fluxo de VPC
Nesta página, descrevemos o formato de registro dos registros de fluxo de VPC, incluindo quais campos de base e metadados estão disponíveis. Ela também explica como você pode usar filtragem de registros para que apenas registros correspondentes a determinados critérios sejam gerados.
Formato do registro
Os registros contêm campos básicos, que são os campos principais de cada registro, e campos de metadados que acrescentam informações adicionais. É possível omitir os campos de metadados para economizar custos de armazenamento.
Alguns campos de registro aparecem em um formato múltiplo, com mais de um dado em cada campo. Por exemplo, o campo connection
é do formato IpConnection
, que contém o endereço IP e a porta de origem e destino, mais o protocolo, em um único campo. Esses vários campos estão descritos abaixo da tabela de formatos de registro.
Os valores dos campos de metadados não são baseados no caminho do plano de dados. Eles são aproximações, podendo estar ausentes ou incorretos. Por outro lado, os valores dos campos base são obtidos diretamente dos cabeçalhos dos pacotes.
Campo | Formato do campo | Tipo de campo: base ou metadados opcionais |
---|---|---|
conexão |
IpConnection
5 tuplas que descrevem o fluxo. |
Base |
reporter |
string
O lado que informou o fluxo. Pode ser SRC , DEST , SRC_GATEWAY ou DEST_GATEWAY .
|
Base |
rtt_msec |
int64
Latência medida durante o intervalo de tempo. Esse campo está disponível apenas para tráfego TCP relatado por VMs. A latência medida é o tempo decorrido entre o envio de um SEQ e o recebimento de um ACK correspondente. O resultado da latência é a soma do RTT da rede e de qualquer tempo consumido pelo aplicativo. |
Base |
bytes_sent |
int64
Quantidade de bytes enviados da origem para o destino. |
Base |
packets_sent |
int64
Número de pacotes enviados da origem para o destino. |
Base |
start_time |
string
Carimbo de data/hora (formato de string de data RFC 3339) do primeiro pacote observado durante o intervalo de tempo agregado. |
Base |
end_time |
string
Carimbo de data/hora (formato de string de data RFC 3339) do último pacote observado durante o intervalo de tempo agregado. |
Base |
Campos de metadados de origem e destino | ||
src_gateway |
GatewayDetails
Se a origem do fluxo for um endpoint local ou outro endpoint de nuvem conectado ao Google Cloud por um gateway, como um anexo da VLAN para o Cloud Interconnect ou um túnel do Cloud VPN, e se uma das condições a seguir for atendida, esse campo será preenchido com detalhes do gateway:
|
Metadados |
dest_gateway |
GatewayDetails
Se o destino do fluxo for um endpoint local ou de outro endpoint de nuvem conectado ao Google Cloud por um gateway, como um anexo da VLAN para o Cloud Interconnect ou um túnel do Cloud VPN, e se uma das condições a seguir for atendida, esse campo será preenchido com detalhes do gateway:
|
Metadados |
src_gke_details |
GkeDetails
Se a origem do fluxo for um endpoint do Google Kubernetes Engine (GKE), esse campo será preenchido com detalhes do endpoint do GKE. |
Metadados |
dest_gke_details |
GkeDetails (em inglês)
Se o destino do fluxo for um bucket do GKE endpoint, esse campo é preenchido com o endpoint do GKE detalhes. |
Metadados |
src_google_service |
GoogleServiceDetails (em inglês)
Se a origem do fluxo for uma API do Google, este campo será preenchida com metadados disponíveis da API do Google. |
Metadados |
dest_google_service |
GoogleServiceDetails
Se o destino do fluxo for uma API do Google, esse campo será preenchido com os metadados disponíveis da API. |
Metadados |
src_instance |
InstanceDetails (link em inglês)
Se a origem do fluxo for uma VM localizada em uma VPC rede e uma das condições a seguir for atendida, esse campo será preenchida com detalhes da instância de VM:
|
Metadados |
dest_instance |
InstanceDetails (link em inglês)
Se o destino do fluxo for uma VM localizada em uma VPC e uma das condições a seguir for atendida, este campo é preenchido com detalhes da instância de VM.
|
Metadados |
src_location |
GeographicDetails (Detalhes geográficos)
Se a origem do fluxo for um endereço IP público fora do rede VPC, esse campo é preenchido com metadados de local disponíveis. |
Metadados |
dest_location |
GeographicDetails
Se o destino do fluxo for um endereço IP público fora da rede VPC, esse campo será preenchido com metadados de local disponíveis. |
Metadados |
src_vpc |
VpcDetails (em inglês)
Se a origem do fluxo for uma VM localizada em uma VPC rede e uma das condições a seguir for atendida, esse campo será preenchido com detalhes da rede VPC:
|
Metadados |
dest_vpc |
VpcDetails (em inglês)
Se o destino do fluxo for uma VM localizada em uma rede VPC e uma das condições a seguir for atendida, esse campo será preenchido com detalhes da rede VPC:
|
Metadados |
Outros campos de metadados | ||
internet_routing_details |
InternetRoutingDetails
Se o flow for entre o Google Cloud e a Internet, esse campo será preenchido com os detalhes de roteamento. Disponível apenas para fluxos de saída. |
Metadados |
load_balancing |
LoadBalancingDetails (em inglês)
Se o fluxo passa por um balanceador de carga em um dos seguintes locais de configuração, este campo é preenchido com Cloud Load Balancing detalhes:
|
Metadados |
network_service |
NetworkServiceDetails (em inglês)
Se o cabeçalho Differentiated Services Code Point (DSCP) estiver definido, este campo é preenchido com detalhes do serviço de rede. |
Metadados |
psc |
PrivateServiceConnectDetails
Se o fluxo passar pelo Private Service Connect em uma das seguintes configurações, esse campo será preenchido com detalhes do Private Service Connect:
|
Metadados |
Formato do campo IpConnection
Campo | Tipo | Descrição |
---|---|---|
protocolo | int32 | Número do protocolo IANA |
src_ip | string | Endereço IP de origem |
dest_ip | string | Endereço IP de destino |
src_port | int32 | Porta de origem |
dest_port | int32 | Porta de destino |
Formato do campo GatewayDetails
Campo | Tipo | Descrição |
---|---|---|
project_id | string | ID do projeto do Google Cloud do gateway |
local | string | Região do gateway |
name | string | Nome do gateway |
Tipo | string |
Tipo de gateway. Pode ser INTERCONNECT_ATTACHMENT ou VPN_TUNNEL .
|
vpc | VpcDetails | Detalhes da rede VPC do gateway |
Formato do campo GkeDetails
Campo | Tipo | Descrição |
---|---|---|
cluster | ClusterDetails | Metadados do cluster do GKE |
pod | PodDetails | Metadados do pod do GKE, preenchidos quando a origem ou o destino do tráfego for um pod. |
serviço | ServiceDetails |
Metadados do Serviço do GKE, preenchidos apenas em endpoints de Serviço. O registro contém até dois Serviços. Se houver mais de dois Serviços relevantes, esse campo conterá um único Serviço com um marcador MANY_SERVICES especial.
|
Formato do campo ClusterDetails
Campo | Tipo | Descrição |
---|---|---|
cluster_location | string | Local do cluster. É uma zona ou uma região, dependendo se o cluster for zonal ou regional. |
cluster_name | string | Nome do cluster do GKE |
Formato do campo PodDetails
Campo | Tipo | Descrição |
---|---|---|
pod_name | string | Nome do pod |
pod_namespace | string | Namespace do pod |
pod_workload | WorkloadDetails | Metadados sobre o recurso de carga de trabalho de nível superior que controla o Conjunto |
Formato do campo WorkloadDetails
Campo | Tipo | Descrição |
---|---|---|
workload_name | string | Nome do controlador de carga de trabalho de nível superior |
workload_type | string |
Tipo do controlador de carga de trabalho de nível superior. Pode ser
DEPLOYMENT , REPLICA_SET ,
STATEFUL_SET , DAEMON_SET , JOB ,
CRON_JOB , ou
REPLICATION_CONTROLLER .
|
Formato do campo ServiceDetails
Campo | Tipo | Descrição |
---|---|---|
service_name | string |
Nome do serviço. Se houver mais de dois Serviços relevantes, o campo será definido como um marcador MANY_SERVICES especial.
|
service_namespace | string | Namespace do Serviço |
Exemplo:
Se houver dois serviços, o campo Serviço será semelhante a:
service: [ 0: { service_name: "my-lb-service" service_namespace: "default" } 1: { service_name: "my-lb-service2" service_namespace: "default" } ]
Se houver mais de dois serviços, o campo Serviço será semelhante a:
service: [ 0: { service_name: "MANY_SERVICES" } ]
Formato do campo GoogleServiceDetails
Campo | Tipo | Descrição |
---|---|---|
Tipo | string | Esse campo está definido como GOOGLE_API . |
Formato do campo InstanceDetails
Campo | Tipo | Descrição |
---|---|---|
project_id | string | ID do projeto do Google Cloud que contém o recurso de VM |
região | string | Região da VM |
vm_name | string | Nome da instância da VM |
zona | string | Zona da VM |
Formato do campo GeographicDetails
Campo | Tipo | Descrição |
---|---|---|
asn | int32 | O ASN da rede externa à qual este endpoint pertence. |
cidade | string | Cidade para endpoints externos |
continent | string | Continente para endpoints externos |
país | string | País para endpoints externos, representado por códigos de país ISO 3166-1 Alfa-3. |
região | string | Região para endpoints externos |
Formato do campo VpcDetails
Campo | Tipo | Descrição |
---|---|---|
project_id | string | ID do projeto do Google Cloud que contém a VPC. Em uma
configuração de VPC compartilhada, project_id é o ID
do projeto host. |
subnetwork_name | string | Nome da sub-rede, se aplicável |
subnetwork_region | string | Região da sub-rede, se aplicável |
vpc_name | string | Nome da rede |
Formato do campo InternetRoutingDetails
Campo | Tipo | Descrição |
---|---|---|
egress_as_path | AsPath | Lista de caminhos AS relevantes. Se houver vários caminhos AS disponíveis para o fluxo, o campo pode conter mais de um caminho AS. |
Formato do campo AsPath
Campo | Tipo | Descrição |
---|---|---|
as_details | AsDetails | Lista de detalhes do AS para todos os sistemas no caminho do AS. A lista começa do primeiro AS externo à rede do Google Cloud e termina com o AS ao qual o endereço IP remoto pertence. |
Formato do campo AsDetails
Campo | Tipo | Descrição |
---|---|---|
asn | uint32 | O número de sistema autônomo (ASN, na sigla em inglês) do AS |
Formato do campo LoadBalancingDetails
Campo | Tipo | Descrição |
---|---|---|
forwarding_rule_project_id | string | ID do projeto do Google Cloud da regra de encaminhamento |
reporter | string | Relatório do Cloud Load Balancing. Pode ser
CLIENT ou BACKEND .
|
Tipo | string | Tipo do balanceador de carga. Pode ser APPLICATION_LOAD_BALANCER ,
PROXY_NETWORK_LOAD_BALANCER ,
PASSTHROUGH_NETWORK_LOAD_BALANCER ,
ou PROTOCOL_FORWARDING . |
esquema | string | Esquema do balanceador de carga. Pode ser EXTERNAL_MANAGED ,
INTERNAL_MANAGED , EXTERNAL ,
INTERNAL , ou INTERNAL_SELF_MANAGED . |
url_map_name | string | Nome do mapa de URL. Preenchido se o tipo de
balanceador de carga é APPLICATION_LOAD_BALANCER . |
forwarding_rule_name | string | Nome da regra de encaminhamento |
backend_service_name | string | Nome do serviço de back-end. Será preenchido se
o informante for BACKEND e o tipo de balanceador de carga for
PASSTHROUGH_NETWORK_LOAD_BALANCER . Se o tipo de grupo de back-end
for TARGET_POOL , esse campo não será preenchido. |
backend_group_name | string | Nome do grupo de back-ends. Será preenchido se
o informante for BACKEND e o tipo de balanceador de carga for
PASSTHROUGH_NETWORK_LOAD_BALANCER . |
backend_group_type | string | Tipo do grupo de back-ends. Pode ser INSTANCE_GROUP ,
NETWORK_ENDPOINT_GROUP , ou TARGET_POOL .
Preenchido se o informante for BACKEND e o balanceador de carga
o tipo é PASSTHROUGH_NETWORK_LOAD_BALANCER . |
backend_group_location | string | Local do grupo de back-ends. Pode ser uma zona ou região, dependendo se o escopo do grupo de back-ends é zonal ou regional.
Preenchido se o informante for BACKEND e o balanceador de carga
o tipo é PASSTHROUGH_NETWORK_LOAD_BALANCER . Se o tipo de grupo de back-end for TARGET_POOL , esse campo não será preenchido. |
vpc | VpcDetails | Detalhes da rede VPC do balanceador de carga |
Formato do campo NetworkServiceDetails
Campo | Tipo | Descrição |
---|---|---|
dscp | int32 | Se o campo "Serviços diferenciados" estiver presente nos cabeçalhos dos pacotes, ele será preenchido com o valor DSCP. |
Formato do campo PrivateServiceConnectDetails
Campo | Tipo | Descrição |
---|---|---|
reporter | string | Gerador de relatórios do Private Service Connect.
Pode ser CONSUMER ou PRODUCER . |
psc_endpoint | PrivateServiceConnectEndpointDetails |
Detalhes do endpoint. Preenchido se o denunciante for CONSUMER .
|
psc_attachment | PrivateServiceConnectAttachmentDetails | Detalhes do anexo de serviço. Preenchido se o tráfego inclui um produtor do Private Service Connect. |
Formato do campo PrivateServiceConnectEndpointDetails
Campo | Tipo | Descrição |
---|---|---|
project_id | string | ID do projeto do Google Cloud do endpoint do Private Service Connect |
região | string | Região do endpoint. Não preenchido se
o tipo de serviço segmentado é GLOBAL_GOOGLE_APIS . |
psc_connection_id | string | ID da conexão do Private Service Connect |
target_service_type | string | Tipo de serviço de destino. Pode ser GLOBAL_GOOGLE_APIS ou PUBLISHED_SERVICE . |
vpc | VpcDetails | Detalhes da rede VPC do endpoint do Private Service Connect |
Formato do campo PrivateServiceConnectAttachmentDetails
Campo | Tipo | Descrição |
---|---|---|
project_id | string | ID do projeto do Google Cloud do anexo de serviço |
região | string | Região do anexo de serviço |
vpc | VpcDetails | Detalhes da rede VPC do anexo de serviço |
Anotações de metadados
Os registros contêm campos de base e de metadados. A seção Formato de registro lista quais campos são do tipo metadados e quais são do tipo base. Todos os campos de base são sempre incluídos. É possível personalizar quais campos de metadados manter.
Se você selecionar todos os metadados, todos os campos de metadados no formato de registros de fluxo de VPC serão incluídos nos registros de fluxo. Quando novos campos de metadados são adicionados ao formato de registro, os registros de fluxo incluem automaticamente os novos campos.
Se você não selecionar metadados, todos os campos de metadados serão omitidos.
Se você selecionar metadados personalizados, poderá especificar os campos de metadados que quer incluir pelo campo pai, como
src_vpc
, ou pelos nomes completos, comosrc_vpc.project_id
.Quando novos campos de metadados são adicionados ao de registro, eles são excluídos dos registros de fluxo, a menos que estejam dentro de um campo pai que você especificou para incluir.
Quando você especifica metadados personalizados usando campos pais, quando novos campos de metadados são adicionados ao formato de registro no campo pai, os registros de fluxo incluem automaticamente os novos campos.
Se você especificar metadados personalizados usando o nome completo do campo, novos campos de metadados adicionados ao campo pai serão excluídos dos registros de fluxo.
Para informações sobre como personalizar campos de metadados, consulte as instruções da CLI do Google Cloud ou da API sobre como ativar a geração de registros de fluxo de VPC quando você cria uma sub-rede.
Anotações de metadados do GKE
É possível que fluxos que tenham um endpoint em um cluster do GKE sejam anotados com anotações do GKE, que incluem detalhes do cluster, do pod e do serviço do endpoint.
Anotações de serviço do GKE
O tráfego enviado para um ClusterIP, NodePort ou LoadBalancer recebe anotações de serviço. Se for enviado para um NodePort ou LoadBalancer, o fluxo receberá a anotação de serviço nos dois saltos da conexão.
O tráfego enviado diretamente para a porta de serviço de um pod será anotado com uma anotação de serviço no endpoint de destino.
O tráfego enviado para a porta de serviço de um pod em que o pod está fazendo mais de um serviço na mesma porta de serviço será anotado com vários serviços no endpoint de destino. Isso se limita a dois serviços. Se houver mais, o endpoint será anotado com um marcador MANY_SERVICES
especial.
Anotações de pod no tráfego da Internet
O tráfego entre um pod e a Internet não recebe anotações de pod por padrão. Os registros de fluxo de VPC não podem adicionar anotações de pod porque, de pacotes para a Internet, o agente de mascaramento traduz o endereço IP do pod para o endereço IP do nó antes que os registros de fluxo de VPC vejam o pacote.
Devido ao mascaramento, as anotações de pod só serão visíveis se os destinos estiverem dentro dos destinos padrão não mascaradosou em uma lista nonMasqueradeCIDRs
personalizada.
Se você incluir destinos de Internet em uma lista nonMasqueradeCIDRs
personalizada, será necessário fornecer uma maneira para que os endereços IP internos do pod sejam traduzidos antes de serem entregues à Internet. Para clusters particulares e não particulares, é possível usar o Cloud NAT. Consulte Interação do
GKE para mais detalhes.
Filtragem de registros
Ao ativar os registros de fluxo de VPC, é possível definir um filtro com base nos campos de base e de metadados que preservam apenas os registros que correspondem ao filtro. Todos os outros registros serão descartados antes de serem gravados no Logging. Isso economiza dinheiro e reduz o tempo necessário para encontrar as informações que você está procurando.
É possível filtrar qualquer subconjunto de campos listados em Formato de registro, exceto os seguintes:
rtt_msec
bytes_sent
packets_sent
start_time
end_time
A filtragem de registros de fluxo de VPC usa CEL, uma linguagem de expressão incorporada para expressões lógicas baseadas em atributos. As expressões de filtro dos registros de fluxo de VPC têm um limite de 2.048 caracteres. Para mais informações, consulte Operadores lógicos de CEL compatíveis.
Para mais informações sobre a CEL, consulte a introdução da CEL e a definição da linguagem. O recurso de filtro de geração é compatível com um subconjunto limitado de sintaxe CEL.
Para informações sobre como criar uma sub-rede que usa filtragem de registros, consulte as instruções da CLI gcloud ou da API sobre Como ativar os registros de fluxo de VPC ao criar uma sub-rede.
Para informações sobre como configurar a filtragem de registros, consulte as instruções da CLI gcloud ou da API sobre como atualizar parâmetros dos registros de fluxo de VPC.
Exemplo 1: limitar a coleta de registros a uma VM específica chamada my-vm
. Nesse caso, serão gravados apenas os registros em que o campo src_instance
for informado como my-vm
pela origem do tráfego ou em que o campo dst_instance
for informado como my-vm
pelo destino do tráfego.
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')"
Exemplo 2: limitar a coleta de registros a pacotes com endereços IP de origem na sub-rede 10.0.0.0/8
.
gcloud compute networks subnets update my-subnet \ --logging-filter-expr="inIpRange(connection.src_ip, '10.0.0.0/8')"
Exemplo 3: limitar a coleta de registros ao tráfego externo a uma VPC.
gcloud compute networks subnets update my-subnet \ --logging-filter-expr '!(has(src_vpc.vpc_name) && has(dest_vpc.vpc_name))'
Operadores lógicos compatíveis com CEL
Expressão | Tipos compatíveis | Descrição |
---|---|---|
verdadeiro, falso | Booleano | Constantes booleanas |
x == y x != y |
Booleano, Int, String | Operadores de comparação Exemplo: connection.protocol == 6 |
x && y x || y |
Booleano | Operadores lógicos booleanos Exemplo: connection.protocol == 6 && src_instance.vm_name == "vm_1" |
!x | Booleano | Negação |
1, 2.0, 0, ... | Int | Literais numéricos constantes |
x + y | String | Concatenação de strings |
"foo", 'foo', ... | String | Literal de string constante |
x.lower() | String | Retorna o valor em minúsculas da string |
x.upper() | String | Retorna o valor em maiúsculas da string |
x.contains(y) | String | Retorna verdadeiro se a string contiver a substring especificada |
x.startsWith(y) | String | Retorna verdadeiro se a string começar com a substring especificada |
x.endsWith(y) | String | Retorna verdadeiro se a string terminar com a substring especificada |
inIpRange(X, Y) | String | Retorna verdadeiro se X for um IP e Y for um intervalo de IP que contenha X Exemplo: inIpRange("1.2.3.1", "1.2.3.0/24") |
x.containsFieldValue(y) |
x: list y: map(string, string) |
Retorna verdadeiro se a lista contiver um objeto com campos que correspondem aos pares de chave-valor especificados Exemplo: dest_gke_details.service.containsFieldValue({'service_name': 'service1', 'service_namespace': 'namespace1'}) |
has(x) | String | Retorna verdadeiro se o campo estiver presente. |