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 campos de metadados têm as seguintes limitações:

  • 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.
  • Para o campo internet_routing_details, o caminho do sistema autônomo (AS) pode estar ausente em alguns casos. Por exemplo, quando os pacotes são roteados dentro de uma Nuvem privada virtual (VPC), as informações do caminho do AS não são incluídas.
Campo Formato do campo Tipo de campo: base ou metadados opcionais
conexão IpConnection
Cinco tuplas que descrevem a conexão
Base
reportado por string
O lado que informou o fluxo. Pode ser SRC ou DEST.
Base
rtt_msec int64
Latência medida durante o intervalo de tempo, apenas para fluxos TCP. 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
internet_routing_details InternetRoutingDetails
Se a conexão 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
src_gke_details GkeDetails
Metadados do GKE para endpoints de origem. Disponível apenas se o endpoint for o GKE.
Metadados
dest_gke_details GkeDetails
Metadados do GKE para endpoints de destino. Disponível apenas se o endpoint for o GKE.
Metadados
src_instance InstanceDetails
Se a origem da conexão for uma VM localizada na mesma VPC, esse campo será preenchido com os detalhes da instância da VM. Em uma configuração de VPC compartilhada, project_id corresponde ao projeto proprietário da instância, geralmente o projeto de serviço.
Metadados
dest_instance InstanceDetails
Se o destino da conexão for uma VM localizada na mesma VPC, esse campo será preenchido com os detalhes da instância da VM. Em uma configuração de VPC compartilhada, project_id corresponde ao projeto proprietário da instância, geralmente o projeto de serviço.
Metadados
src_location GeographicDetails
Se a origem da conexão for externa à VPC, esse campo será preenchido com metadados de local disponíveis.
Metadados
dest_location GeographicDetails
Se o destino da conexão for externo à VPC, esse campo será preenchido com metadados de local disponíveis.
Metadados
src_vpc VpcDetails
Se a origem da conexão for uma VM localizada na mesma VPC, esse campo será preenchido com os detalhes da rede VPC. Em uma configuração de VPC compartilhada, project_id corresponde ao do projeto host.
Metadados
dest_vpc VpcDetails
Se o destino da conexão for uma VM localizada na mesma VPC, esse campo será preenchido com os detalhes da rede VPC. Em uma configuração de VPC compartilhada, project_id corresponde ao do projeto host.
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 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 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

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 InstanceDetails

Campo Tipo Descrição
project_id string Código do projeto que contém a VM
region 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.
city string Cidade para endpoints externos
continent string Continente para endpoints externos
country string País para endpoints externos, representado por códigos de país ISO 3166-1 Alfa-3.
region string Região para endpoints externos

Formato do campo VpcDetails

Campo Tipo Descrição
project_id string Código do projeto que contém a VPC
subnetwork_name string Sub-rede em que a VM está operando
vpc_name string VPC em que a VM está operando

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, como src_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 string
"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.

A seguir