Faça query dos logs estendidos de tráfego de rede
Visualização
Esse recurso está na Prévia privada. Para experimentar, entre em contato com o seu contato no Databricks.
Este artigo descreve como query os logs de tráfego de rede estendidos para analisar o tráfego de rede de saída do compute Serverless. Para ver uma visão geral do que os logs registram e de como as tabelas se relacionam, consulte Logs de tráfego de rede estendidos.
Requisitos
- Sua account Databricks deve estar inscrita na prévia privada de Logs estendidos de tráfego de rede. Para solicitar a inscrição, entre em contato com a equipe da sua account Databricks.
- Depois que sua account for inscrita, um administrador de account deverá ativar a prévia na página Previews do console da account. Consulte Gerenciar prévias em nível de account.
- É necessário ter acesso às tabelas do sistema de query. Consulte a referência das tabelas do sistema.
Os logs estendidos do tráfego de rede estão disponíveis em qualquer nível da plataforma.
Eventos de acesso à rede permitidos por query
A query a seguir retorna os eventos de acesso de saída à rede permitidos das últimas 24 horas, incluindo o destino e os endereços IP resolvidos:
SELECT
event_time,
workspace_id,
network_source_type,
destination_type,
destination,
CASE
WHEN destination_type = 'DNS'
THEN dns_event.rdata
WHEN destination_type = 'STORAGE'
THEN storage_event.rdata
END AS resolved_ips
FROM system.access.outbound_network
WHERE event_time >= current_timestamp() - INTERVAL 1 DAY
AND access_type = 'ALLOWED'
ORDER BY event_time DESC;
Volumes de tráfego de query por IP de destino
A query a seguir retorna o total de bytes enviados e recebidos por meio de um gateway de rede privada nas últimas 24 horas, agrupados por workspace e endereço IP de destino. Use-o para encontrar os destinos que recebem a maior quantidade de dados de saída.
SELECT
workspace_id,
destination_ip,
connection_type,
connection_method,
SUM(sent_bytes) AS total_sent_bytes,
SUM(received_bytes) AS total_received_bytes
FROM system.access.outbound_traffic
WHERE period_start_time >= current_timestamp() - INTERVAL 1 DAY
GROUP BY
workspace_id,
destination_ip,
connection_type,
connection_method
ORDER BY total_sent_bytes DESC;
Correlacionar eventos de acesso com logs de fluxo
Para conectar hostname a volumes de tráfego, faça o join de system.access.outbound_network com system.access.outbound_traffic usando o ID da account, o ID do Workspace e o endereço IP de destino resolvido, considerando que o event_time do evento de acesso esteja dentro do intervalo do log de fluxo. Para ver detalhes sobre como as tabelas se relacionam, consulte Como as tabelas se relacionam.
Encontrar solicitações permitidas com tráfego correspondente do gateway de rede privada
A query a seguir adiciona uma coluna has_matching_png_traffic aos eventos de acesso à rede de saída das últimas 24 horas:
WITH params AS (
SELECT
current_timestamp() - INTERVAL 24 HOURS AS start_time,
current_timestamp() AS end_time
),
network_events AS (
SELECT n.*
FROM system.access.outbound_network n
CROSS JOIN params p
WHERE n.event_time >= p.start_time
AND n.event_time < p.end_time
),
allowed_ips AS (
SELECT
n.event_id,
n.account_id,
n.workspace_id,
n.event_time,
resolved_ip
FROM network_events n
LATERAL VIEW EXPLODE(
CASE
WHEN n.destination_type = 'DNS'
THEN n.dns_event.rdata
WHEN n.destination_type = 'STORAGE'
THEN n.storage_event.rdata
WHEN n.destination_type = 'IP'
THEN ARRAY(n.destination)
ELSE ARRAY()
END
) e AS resolved_ip
WHERE n.access_type = 'ALLOWED'
),
png_matches AS (
SELECT DISTINCT
n.account_id,
n.workspace_id,
n.event_id
FROM allowed_ips n
JOIN system.access.outbound_traffic t
ON t.account_id = n.account_id
AND t.workspace_id = n.workspace_id
AND t.destination_ip = n.resolved_ip
AND n.event_time >= t.period_start_time
AND n.event_time < t.period_end_time
AND t.connection_method = 'PRIVATE_NETWORK_GATEWAY'
CROSS JOIN params p
WHERE t.period_end_time > p.start_time
AND t.period_start_time < p.end_time
)
SELECT
n.*,
CASE
WHEN n.access_type <> 'ALLOWED' THEN NULL
ELSE m.event_id IS NOT NULL
END AS has_matching_png_traffic
FROM network_events n
LEFT JOIN png_matches m
ON m.account_id = n.account_id
AND m.workspace_id = n.workspace_id
AND m.event_id = n.event_id;
A coluna has_matching_png_traffic tem os seguintes valores:
Valor | Descrição |
|---|---|
| Foi encontrado um registro correspondente de tráfego do gateway de rede privada. |
| O evento de acesso permitido não tinha um registro correspondente de tráfego do gateway de rede privada. |
| O evento de acesso não era um evento |
Um valor de FALSE não significa necessariamente que a solicitação usou conectividade pública ou outra conectividade privada. Um fluxo correspondente também pode estar ausente devido a limitações de registro em log ou diferenças no horário dos eventos. Se dois hostnames forem resolvidos para o mesmo endereço IP, ambos serão TRUE.
Estime o volume de tráfego por hostname de destino
A query a seguir estima o volume de tráfego associado a cada hostname de destino nas últimas 24 horas. Ele correlaciona os endereços IP resolvidos dos eventos de acesso com os endereços IP de destino dos logs de fluxo e, em seguida, soma os bytes enviados e recebidos.
WITH params AS (
SELECT
current_timestamp() - INTERVAL 24 HOURS AS start_time,
current_timestamp() AS end_time
),
allowed_ips AS (
SELECT
n.account_id,
n.workspace_id,
n.destination,
n.event_time,
resolved_ip
FROM system.access.outbound_network n
CROSS JOIN params p
LATERAL VIEW EXPLODE(
CASE
WHEN n.destination_type = 'DNS'
THEN n.dns_event.rdata
WHEN n.destination_type = 'STORAGE'
THEN n.storage_event.rdata
WHEN n.destination_type = 'IP'
THEN ARRAY(n.destination)
ELSE ARRAY()
END
) e AS resolved_ip
WHERE n.access_type = 'ALLOWED'
AND n.event_time >= p.start_time
AND n.event_time < p.end_time
),
matched_flows AS (
SELECT
t.event_id,
t.workspace_id,
t.connection_method,
MAX(t.received_bytes) AS received_bytes,
MAX(t.sent_bytes) AS sent_bytes,
COLLECT_SET(n.destination) AS destinations
FROM allowed_ips n
JOIN system.access.outbound_traffic t
ON t.account_id = n.account_id
AND t.workspace_id = n.workspace_id
AND t.destination_ip = n.resolved_ip
AND n.event_time >= t.period_start_time
AND n.event_time < t.period_end_time
CROSS JOIN params p
WHERE t.period_end_time > p.start_time
AND t.period_start_time < p.end_time
GROUP BY
t.event_id,
t.workspace_id,
t.connection_method
)
SELECT
workspace_id,
destinations,
connection_method,
SUM(received_bytes) AS total_received_bytes,
SUM(sent_bytes) AS total_sent_bytes
FROM matched_flows
GROUP BY
workspace_id,
destinations,
connection_method
ORDER BY total_sent_bytes DESC;
Os resultados incluem as seguintes colunas:
workspace_id: Workspace de origem do tráfego.destinations: hostname de destino ou locais de armazenamento correlacionados ao tráfego. Esta lista tem mais de uma entrada quando vários hostnames compartilham um endereço IP de destino.connection_method: Método de conectividade usado. O valor éPRIVATE_NETWORK_GATEWAY.total_received_bytes: Total de bytes recebidos pelo compute serverless em todos os registros de fluxo correspondentes.total_sent_bytes: Total de bytes enviados pelo compute serverless em todos os registros de fluxo correspondentes.
Para evitar contar um fluxo mais de uma vez quando vários hostnames forem resolvidos para o mesmo endereço IP, a query agrupa esses hostnames em um único array e conta os bytes de cada registro de fluxo uma única vez. Os resultados são uma estimativa e não atribuem bytes exatos a cada hostname quando vários hostnames compartilham um endereço IP. O tráfego sem um evento de acesso correspondente é excluído.