Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo fornece consultas KQL (Linguagem de Consulta Kusto) de exemplo para ajudá-lo a analisar dados de análise de tráfego com eficiência. A análise de tráfego processa logs de fluxo de rede virtual (VNet) e logs de fluxo do NSG (grupo de segurança de rede) para fornecer informações detalhadas sobre padrões de tráfego de rede, eventos de segurança e métricas de desempenho.
Use estas consultas para:
- Identificar padrões de tráfego de rede e os principais pontos de extremidade de comunicação
- Monitorar eventos de segurança e analisar possíveis ameaças
- Solucionar problemas de conectividade de rede
- Otimizar o desempenho da rede e a utilização de recursos
Pré-requisitos
- Análise de tráfego configurada para seus logs de fluxo. Para obter mais informações, consulte Habilitar ou desabilitar a análise de tráfego.
- Acesso ao workspace do Log Analytics em que os dados do log de fluxo são armazenados. Para obter mais informações, confira Visão geral do workspace do Log Analytics.
Consultas NTANetAnalytics
Esta seção fornece consultas de exemplo para a tabela NTANetAnalytics que você pode usar para analisar os dados de análise de tráfego da Rede Virtual. A tabela NTANetAnalytics contém dados de log de fluxo agregados com informações avançadas de análise de rede. Para obter mais informações sobre o esquema de tabela e os campos disponíveis, consulte NTANetAnalytics.
Listar sub-redes interagindo com IPs públicos
Use a consulta a seguir para listar todas as sub-redes que interagem com IPs públicos não Azure nos últimos 30 dias.
NTANetAnalytics
| where SubType == "FlowLog" and FlowStartTime > ago(30d) and FlowType == "ExternalPublic"
| project SrcSubnet, DestSubnet
Listar sub-redes interagindo entre si
Use a consulta a seguir para listar todas as sub-redes que trocaram tráfego entre si nos últimos 30 dias e o total de bytes trocados.
NTANetAnalytics
| where SubType == 'FlowLog' and FaSchemaVersion == '3' and TimeGenerated > ago(30d)
| where isnotempty(SrcSubnet) and isnotempty(DestSubnet)
| summarize TotalBytes=sum(BytesSrcToDest + BytesDestToSrc) by SrcSubnet, DestSubnet,L4Protocol,DestPort
Exibir tráfego entre regiões
Use a consulta a seguir para exibir o tráfego intra-regional e inter-regional nos últimos 30 dias.
NTANetAnalytics
| where TimeGenerated > ago(30d)
| project SrcRegion, DestRegion, BytesDestToSrc, BytesSrcToDest
| where isnotempty(SrcRegion) and isnotempty(DestRegion)
| summarize TransferredBytes=sum(BytesDestToSrc+BytesSrcToDest) by SrcRegion, DestRegion
Exibir o tráfego com base na assinatura
Use a consulta a seguir para exibir o tráfego do Azure agrupado por assinaturas nos últimos 30 dias.
NTANetAnalytics
| where TimeGenerated > ago(30d)
| project SrcSubscription, DestSubscription, BytesDestToSrc, BytesSrcToDest
| where isnotempty(SrcSubscription) and isnotempty(DestSubscription)
| summarize TransferredBytes=sum(BytesDestToSrc+BytesSrcToDest) by SrcSubscription, DestSubscription
Listar máquinas virtuais que recebem a maioria do tráfego local
Use a consulta a seguir para verificar quais máquinas virtuais estão recebendo a maioria do tráfego local.
NTANetAnalytics
| where SubType == "FlowLog" and FlowType == "S2S"
| where <Scoping condition>
| mvexpand vm = pack_array(SrcVm, DestVm) to typeof(string)
| where isnotempty(vm)
| extend traffic = AllowedInFlows + DeniedInFlows + AllowedOutFlows + DeniedOutFlows // For bytes use: | extend traffic = InboundBytes + OutboundBytes
| make-series TotalTraffic = sum(traffic) default = 0 on FlowStartTime from datetime(<time>) to datetime(<time>) step 1m by vm
| render timechart
Listar IPs que recebem a maioria do tráfego local
Use a consulta a seguir para verificar quais IPs estão recebendo a maioria do tráfego local.
NTANetAnalytics
| where SubType == "FlowLog" and FlowType == "S2S"
| where <Scoping condition>
| mvexpand vm = pack_array(SrcIp, DestIp) to typeof(string)
| where isnotempty(vm)
| extend traffic = AllowedInFlows + DeniedInFlows + AllowedOutFlows + DeniedOutFlows // For bytes use: | extend traffic = InboundBytes + OutboundBytes
| make-series TotalTraffic = sum(traffic) default = 0 on FlowStartTime from datetime(<time>) to datetime(<time>) step 1m by vm
| render timechart
Listar IPs enviando ou recebendo tráfego de ou para uma máquina virtual
Use a consulta a seguir para listar todos os IPs que trocaram dados com uma máquina virtual usando seu endereço IP nos últimos 30 dias.
NTANetAnalytics
| where TimeGenerated > ago(30d)
| where SrcIp == "10.1.1.8" and strlen(DestIp)>0
| summarize TotalBytes=sum(BytesDestToSrc+BytesSrcToDest) by SrcIp, DestIp
Exibir o tráfego do ExpressRoute
Use a consulta a seguir para exibir o tráfego em conexões do ExpressRoute nos últimos 30 dias.
NTANetAnalytics
| where SubType == 'FlowLog' and TimeGenerated > ago(30d)
| where isnotnull(SrcExpressRouteCircuit) or isnotnull(DestExpressRouteCircuit)
| extend TargetResourceName = tostring(split(TargetResourceId, "/")[2])
| summarize TotalBytes=sum(BytesSrcToDest + BytesDestToSrc) by TargetResourceName, bin(TimeGenerated, 1d)
| render columnchart
Exibir a distribuição de tráfego do balanceador de carga
Use a consulta a seguir para exibir a distribuição de tráfego do aplicativo que tem um balanceador de carga na frente dele.
NTANetAnalytics
| where SubType == 'FlowLog' and TimeGenerated > ago(30d)
| where SrcLoadBalancer contains 'web' or DestLoadBalancer contains 'web'
| summarize TotalBytes = sum(BytesSrcToDest + BytesDestToSrc) by tostring(SrcIp)
| render piechart
Verificar o desvio padrão no tráfego recebido por máquinas virtuais
Use a consulta a seguir para verificar o desvio padrão no tráfego recebido por máquinas virtuais de máquinas locais.
NTANetAnalytics
| where SubType == "FlowLog" and FlowType == "S2S"
| where <Scoping condition>
| mvexpand vm = pack_array(SrcVm, DestVm) to typeof(string)
| where isnotempty(vm)
| extend traffic = AllowedInFlows + DeniedInFlows + AllowedOutFlows + DeniedOutFlows // For bytes use: | extend traffic = InboundBytes + OutboundBytes
summarize deviation = stdev(traffic) by vm
Verificar o desvio padrão no tráfego recebido pelos IPs
Use a consulta a seguir para verificar o desvio padrão no tráfego recebido por IPs de computadores locais.
NTANetAnalytics
| where SubType == "FlowLog" and FlowType == "S2S"
| where <Scoping condition>
| mvexpand vm = pack_array(SrcIp, DestIp) to typeof(string)
| where isnotempty(vm)
| extend traffic = AllowedInFlows + DeniedInFlows + AllowedOutFlows + DeniedOutFlows // For bytes use: | extend traffic = InboundBytes + OutboundBytes
| summarize deviation = stdev(traffic) by IP
Consultas NTAIpDetails
Esta seção fornece consultas de exemplo para a tabela NTAIpDetails que você pode usar para analisar informações específicas de IP em seus dados de análise de tráfego. Para obter mais informações, consulte NTAIpDetails.
Exibir tipos de fluxo e locais de IP públicos
Use a consulta a seguir para saber mais sobre os tipos de fluxo e a localização de IPs públicos em seus dados de análise de tráfego.
NTAIpDetails
| distinct FlowType, PublicIpDetails, Location
Exibir tipos de fluxo mal-intencionados
Use a consulta a seguir para exibir os tipos de thread em fluxos mal-intencionados.
NTAIpDetails
| where TimeGenerated > ago(30d)
| where FlowType == "MaliciousFlow"
| summarize count() by ThreatType
| render piechart
Consultas AzureNetworkAnalytics_CL
Esta seção fornece consultas de exemplo para a tabela de consultas AzureNetworkAnalytics_CL que você pode usar para analisar os dados de logs de fluxo do NSG da análise de tráfego.
Listar todas as sub-redes interagindo com IPs públicos
Use a consulta a seguir para listar todas as sub-redes que interagem com IPs públicos não Azure nos últimos 30 dias.
AzureNetworkAnalytics_CL
| where SubType_s == "FlowLog" and FlowStartTime_t >= ago(30d) and FlowType_s == "ExternalPublic"
| project Subnet1_s, Subnet2_s
Exibir caminho de blob para fluxos interagindo com IPs públicos
Use a consulta a seguir para exibir o caminho do blob para os fluxos na consulta anterior.
let TableWithBlobId =
(AzureNetworkAnalytics_CL
| where SubType_s == "Topology" and ResourceType == "NetworkSecurityGroup" and DiscoveryRegion_s == Region_s and IsFlowEnabled_b
| extend binTime = bin(TimeProcessed_t, 6h),
nsgId = strcat(Subscription_g, "/", Name_s),
saNameSplit = split(FlowLogStorageAccount_s, "/")
| extend saName = iif(arraylength(saNameSplit) == 3, saNameSplit[2], '')
| distinct nsgId, saName, binTime)
| join kind = rightouter (
AzureNetworkAnalytics_CL
| where SubType_s == "FlowLog"
| extend binTime = bin(FlowEndTime_t, 6h)
) on binTime, $left.nsgId == $right.NSGList_s
| extend blobTime = format_datetime(todatetime(FlowIntervalStartTime_t), "yyyy MM dd hh")
| extend nsgComponents = split(toupper(NSGList_s), "/"), dateTimeComponents = split(blobTime, " ")
| extend BlobPath = strcat("https://", saName,
"@insights-logs-networksecuritygroupflowevent/resoureId=/SUBSCRIPTIONS/", nsgComponents[0],
"/RESOURCEGROUPS/", nsgComponents[1],
"/PROVIDERS/MICROSOFT.NETWORK/NETWORKSECURITYGROUPS/", nsgComponents[2],
"/y=", dateTimeComponents[0], "/m=", dateTimeComponents[1], "/d=", dateTimeComponents[2], "/h=", dateTimeComponents[3],
"/m=00/macAddress=", replace(@"-", "", MACAddress_s),
"/PT1H.json")
| project-away nsgId, saName, binTime, blobTime, nsgComponents, dateTimeComponents;
TableWithBlobId
| where SubType_s == "FlowLog" and FlowStartTime_t >= ago(30d) and FlowType_s == "ExternalPublic"
| project Subnet_s , BlobPath
A consulta anterior constrói uma URL para acessar o blob diretamente da seguinte maneira:
https://{storageAccountName}@insights-logs-networksecuritygroupflowevent/resoureId=/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroup}/PROVIDERS/MICROSOFT.NETWORK/NETWORKSECURITYGROUPS/{networkSecurityGroupName}/y={year}/m={month}/d={day}/h={hour}/m=00/macAddress={macAddress}/PT1H.json
Listar máquinas virtuais que recebem a maioria do tráfego local
Use a consulta a seguir para verificar quais máquinas virtuais estão recebendo a maioria do tráfego local.
AzureNetworkAnalytics_CL
| where SubType_s == "FlowLog" and FlowType_s == "S2S"
| where <Scoping condition>
| mvexpand vm = pack_array(VM1_s, VM2_s) to typeof(string)
| where isnotempty(vm)
| extend traffic = AllowedInFlows_d + DeniedInFlows_d + AllowedOutFlows_d + DeniedOutFlows_d // For bytes use: | extend traffic = InboundBytes_d + OutboundBytes_d
| make-series TotalTraffic = sum(traffic) default = 0 on FlowStartTime_t from datetime(<time>) to datetime(<time>) step 1 m by vm
| render timechart
Listar IPs que recebem a maioria do tráfego local
Use a consulta a seguir para verificar quais IPs estão recebendo a maioria do tráfego local.
AzureNetworkAnalytics_CL
| where SubType_s == "FlowLog" and FlowType_s == "S2S"
//| where <Scoping condition>
| mvexpand IP = pack_array(SrcIP_s, DestIP_s) to typeof(string)
| where isnotempty(IP)
| extend traffic = AllowedInFlows_d + DeniedInFlows_d + AllowedOutFlows_d + DeniedOutFlows_d // For bytes use: | extend traffic = InboundBytes_d + OutboundBytes_d
| make-series TotalTraffic = sum(traffic) default = 0 on FlowStartTime_t from datetime(<time>) to datetime(<time>) step 1 m by IP
| render timechart
Verificar o desvio padrão no tráfego recebido por máquinas virtuais
Use a consulta a seguir para verificar o desvio padrão no tráfego recebido por máquinas virtuais de máquinas locais.
AzureNetworkAnalytics_CL
| where SubType_s == "FlowLog" and FlowType_s == "S2S"
//| where <Scoping condition>
| mvexpand vm = pack_array(VM1_s, VM2_s) to typeof(string)
| where isnotempty(vm)
| extend traffic = AllowedInFlows_d + DeniedInFlows_d + AllowedOutFlows_d + DeniedOutFlows_d // For bytes use: | extend traffic = InboundBytes_d + utboundBytes_d
| summarize deviation = stdev(traffic) by vm
Verificar o desvio padrão no tráfego recebido pelos IPs
Use a consulta a seguir para verificar o desvio padrão no tráfego recebido por IPs de computadores locais.
AzureNetworkAnalytics_CL
| where SubType_s == "FlowLog" and FlowType_s == "S2S"
//| where <Scoping condition>
| mvexpand IP = pack_array(SrcIP_s, DestIP_s) to typeof(string)
| where isnotempty(IP)
| extend traffic = AllowedInFlows_d + DeniedInFlows_d + AllowedOutFlows_d + DeniedOutFlows_d // For bytes use: | extend traffic = InboundBytes_d + OutboundBytes_d
| summarize deviation = stdev(traffic) by IP
Verificar quais portas podem ser acessadas ou bloqueadas entre pares IP com regras NSG
Use a consulta a seguir para verificar quais portas podem ser acessadas (ou bloqueadas) entre pares IP com regras NSG.
AzureNetworkAnalytics_CL
| where SubType_s == "FlowLog" and TimeGenerated between (startTime .. endTime)
| extend sourceIPs = iif(isempty(SrcIP_s), split(SrcPublicIPs_s," "), pack_array(SrcIP_s)),
destIPs = iif(isempty(DestIP_s), split(DestPublicIPs_s," "), pack_array(DestIP_s))
| mvexpand SourceIp = sourceIPs to typeof(string)
| mvexpand DestIp = destIPs to typeof(string)
| project SourceIp = tostring(split(SourceIp, "|")[0]), DestIp = tostring(split(DestIp, "|")[0]), NSGList_s, NSGRule_s, DestPort_d, L4Protocol_s, FlowStatus_s
| summarize DestPorts= makeset(DestPort_d) by SourceIp, DestIp, NSGList_s, NSGRule_s, L4Protocol_s, FlowStatus_s
Impedir registros duplicados
Se o log de fluxo estiver habilitado em ambos os lados de uma conexão, um fluxo poderá ser capturado em vários dispositivos. Como resultado, os dados duplicados poderão aparecer se todos os logs de fluxo forem agregados no mesmo workspace do Log Analytics. É necessário incluir FlowDirection ou MACAddress para impedir a duplicação e distinguir entre registros.
Em um fluxo/conexão:
-
MacAddressindica o MAC do dispositivo no qual o fluxo está sendo capturado. -
SrcIpindica o endereço IP do dispositivo do qual a conexão foi iniciada. -
DestIpindica o endereço IP do dispositivo ao qual a conexão foi feita. -
FlowDirectionindica a direção da conexão em relação ao dispositivo. Por exemplo, quando uma conexão é feita de VM1 (IP:10.0.0.4e MAC:A1:B1:C1:D1:E1:F1) para VM2 (IP:10.0.0.5e MAC:A2:B2:C2:D2:E2:F2), se o fluxo for capturado na VM1, oFlowDirectionpara esse fluxo seráOutbounde se o fluxo for capturado na VM2, oFlowDirectionpara esse fluxo seráInbound. -
BytesSrcToDest/PacketsSrcToDestindica bytes ou pacotes enviados da origem para o destino, independentemente de onde foram capturados. -
BytesDestToSrc/PacketsDestToSrcindica bytes ou pacotes enviados do destino para a origem, independentemente de onde foram capturados.
Por exemplo, se uma conexão for feita de VM1 para VM2 com os campos a seguir.
| VM | SrcIp | DestIp | MAC | BytesSrcToDest | BytesDestToSrc | FlowDirection |
|---|---|---|---|---|---|---|
| VM1 | 10.0.0.4 | 10.0.0.5 | A1-B1-C1-D1-E1-F1 | 100 | 200 | Saída |
| VM2 | 10.0.0.4 | 10.0.0.5 | A2-B2-C2-D2-E2-F2 | 100 | 200 | Entrada |
Você pode usar qualquer uma das consultas a seguir para calcular o total de bytes de saída para um dispositivo com endereço IP 10.0.0.4 e endereço MAC A1:B1:C1:D1:E1:F1 para conexões iniciadas por este dispositivo.
NTANetAnalytics
| where SubType == "FlowLog"
| where SrcIp == "10.0.0.4" and MacAddress == "A1:B1:C1:D1:E1:F1" and FlowDirection == "Outbound"
| summarize totalIniBytes = sum(BytesSrcToDest);
NTANetAnalytics
| where SubType == "FlowLog"
| where SrcIp == "10.0.0.4" and FlowDirection == "Outbound"
| summarize totalIniBytes = sum(BytesSrcToDest);
NTANetAnalytics
| where SubType == "FlowLog"
| where SrcIp == "10.0.0.4" and MacAddress == "A1:B1:C1:D1:E1:F1"
| summarize totalIniBytes = sum(BytesSrcToDest);
Da mesma forma, você pode usar qualquer uma das consultas a seguir para calcular o total de bytes de saída para um dispositivo com endereço IP 10.0.0.4 e endereço MAC A1:B1:C1:D1:E1:F1, para conexões iniciadas por outros dispositivos para este dispositivo.
NTANetAnalytics
| where DestIp == "10.0.0.4" and MacAddress == "A1:B1:C1:D1:E1:F1" and FlowDirection == "Inbound"
| summarize totalNoniniBytes = sum(BytesDestToSrc)
NTANetAnalytics
| where DestIp == "10.0.0.4" and FlowDirection == "Inbound"
| summarize totalNoniniBytes = sum(BytesDestToSrc)
NTANetAnalytics
| where DestIp == "10.0.0.4" and MacAddress == "A1:B1:C1:D1:E1:F1"
| summarize totalNoniniBytes = sum(BytesDestToSrc)
Você pode calcular o total de bytes de saída para um dispositivo usando a seguinte consulta:
let InitiatedByVM = NTANetAnalytics
| where SubType == "FlowLog"
| where SrcIp == "10.0.0.4" and MacAddress == "A1:B1:C1:D1:E1:F1" and FlowDirection == "Outbound"
| summarize totalIniBytes = sum(BytesSrcToDest);
let NotInitiatedByVM = NTANetAnalytics
| where DestIp == "10.0.0.4" and MacAddress == "A1:B1:C1:D1:E1:F1" and FlowDirection == "Inbound"
| summarize totalNoniniBytes = sum(BytesDestToSrc);
InitiatedByVM
| join kind=fullouter NotInitiatedByVM on FlowEndTime
| extend Time = iff(isnotnull(FlowEndTime), FlowEndTime, FlowEndTime1)
| summarize totalMB = (sum(totalIniBytes) + sum(totalNoniniBytes)) / 1024.0 /1024.0;