Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este artigo fornece exemplos de consultas Kusto Query Language (KQL) para ajudá-lo a analisar dados de análise de tráfego de forma eficaz. A análise de tráfego processa logs de fluxo de rede virtual (VNet) e logs de fluxo de grupo de segurança de rede (NSG) 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
- Monitore eventos de segurança e analise ameaças potenciais
- Solucionar problemas de conectividade de rede
- Otimize 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 espaço de trabalho do Log Analytics onde os dados do log de fluxo são armazenados. Para obter mais informações, consulte Visão geral do espaço de trabalho do Log Analytics.
Consultas NTANetAnalytics
Esta seção fornece consultas de exemplo para a tabela NTANetAnalytics que você pode usar para analisar seus dados de análise de tráfego da Rede Virtual. A tabela NTANetAnalytics contém dados de log de fluxo agregados com informações de análise de rede aprimoradas. 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 que não são do 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
Ver tráfego regional cruzado
Use a consulta a seguir para exibir o tráfego intrarregional 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
Ver tráfego com base na subscrição
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 mais 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 mais 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
Ver tráfego da Rota Expressa
Use a consulta a seguir para exibir o tráfego nas conexões de Rota Expressa 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
Ver distribuição de tráfego do balanceador de carga
Use a consulta a seguir para exibir a distribuição de tráfego do seu 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 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 desvio padrão no tráfego recebido por IPs
Use a consulta a seguir para verificar o desvio padrão no tráfego recebido por IPs de máquinas 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
AzureNetworkAnalytics_CL consultas
Esta seção fornece exemplos de consultas para a tabela de consultas AzureNetworkAnalytics_CL que você pode usar para analisar seus dados de logs de fluxo NSG de análise de tráfego.
Listar todas as sub-redes que interagem com IPs públicos
Use a consulta a seguir para listar todas as sub-redes que interagem com IPs públicos que não são do 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 que interagem com IPs públicos
Use a consulta a seguir para exibir o caminho de 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 mais 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 mais 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 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 desvio padrão no tráfego recebido por IPs
Use a consulta a seguir para verificar o desvio padrão no tráfego recebido por IPs de máquinas 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
Verifique quais portas podem ser acessadas ou bloqueadas entre pares de IP com regras NSG
Use a consulta a seguir para verificar quais portas estão acessíveis (ou bloqueadas) entre pares de 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
Evitar 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, dados duplicados podem aparecer se todos os logs de fluxo forem agregados no mesmo espaço de trabalho do Log Analytics. É necessário incluir FlowDirection ou MACAddress evitar duplicações e distinguir entre registros.
Em um fluxo/conexão:
-
MacAddressdenota o MAC do dispositivo no qual o fluxo está sendo capturado. -
SrcIpindica o endereço IP do dispositivo a partir do qual a conexão foi iniciada. -
DestIpindica o endereço IP do dispositivo ao qual a conexão foi feita. -
FlowDirectiondenota 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 é capturado no VM1 , entãoFlowDirectionpara este fluxo seriaOutbound, e se o fluxo é capturado no VM2 , entãoFlowDirectionpara este fluxo seriaInbound. -
BytesSrcToDest/PacketsSrcToDestindicam bytes ou pacotes enviados da origem para o destino, independentemente de onde foram capturados. -
BytesDestToSrc/PacketsDestToSrcindicam 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 | Direção do fluxo |
|---|---|---|---|---|---|---|
| VM1 | 10.0.0.4 | 10.0.0.5 | A1-B1-C1-D1-E1-F1 | 100 | 200 | Outbound |
| VM2 | 10.0.0.4 | 10.0.0.5 | A2-B2-C2-D2-E2-F2 | 100 | 200 | Inbound |
Você pode usar qualquer uma das seguintes consultas para calcular o total de bytes de saída para um dispositivo com endereço 10.0.0.4 IP e endereço A1:B1:C1:D1:E1:F1MAC , 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 10.0.0.4 IP e endereço A1:B1:C1:D1:E1:F1MAC , 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;