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, 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 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. |