Delen via


Query's gebruiken in verkeersanalyse

Dit artikel bevat voorbeeldquery's van Kusto Query Language (KQL) om u te helpen bij het effectief analyseren van verkeersanalysegegevens. Traffic Analytics verwerkt stroomlogboeken van virtuele netwerken (VNet) en NSG-stroomlogboeken (netwerkbeveiligingsgroep) om gedetailleerde inzichten te bieden in netwerkverkeerspatronen, beveiligingsgebeurtenissen en metrische prestatiegegevens.

Gebruik deze query's om:

  • Netwerkverkeerspatronen en belangrijkste communicatie-eindpunten identificeren
  • Beveiligingsevenementen bewaken en potentiële bedreigingen analyseren
  • Problemen met netwerkconnectiviteit oplossen
  • Netwerkprestaties en resourcegebruik optimaliseren

Vereiste voorwaarden

NTANetAnalytics-query's

In deze sectie vindt u voorbeeldquery's voor de tabel NTANetAnalytics die u kunt gebruiken om de analysegegevens van het virtuele netwerkverkeer te analyseren. De tabel NTANetAnalytics bevat geaggregeerde stroomlogboekgegevens met uitgebreide netwerkanalysegegevens. Zie NTANetAnalytics voor meer informatie over het tabelschema en de beschikbare velden.

Subnetten weergeven die interactie hebben met openbare IP-adressen

Gebruik de volgende query om alle subnetten weer te geven die in de afgelopen 30 dagen communiceren met niet-Azure openbare IP-adressen.

NTANetAnalytics
| where SubType == "FlowLog" and FlowStartTime > ago(30d) and FlowType == "ExternalPublic"
| project SrcSubnet, DestSubnet

Subnetten weergeven die met elkaar communiceren

Gebruik de volgende query om alle subnetten weer te geven die in de afgelopen 30 dagen verkeer met elkaar hebben uitgewisseld en het totale aantal bytes dat is uitgewisseld.

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

Cross regional traffic weergeven

Gebruik de volgende query om in de afgelopen 30 dagen intraregio- en interregioverkeer weer te geven.

NTANetAnalytics
| where TimeGenerated > ago(30d)
| project SrcRegion, DestRegion, BytesDestToSrc, BytesSrcToDest
| where isnotempty(SrcRegion) and isnotempty(DestRegion)
| summarize TransferredBytes=sum(BytesDestToSrc+BytesSrcToDest) by SrcRegion, DestRegion

Verkeer weergeven op basis van abonnement

Gebruik de volgende query om Azure-verkeer te bekijken dat is gegroepeerd op abonnementen in de afgelopen 30 dagen.

NTANetAnalytics
| where TimeGenerated > ago(30d)
| project SrcSubscription, DestSubscription, BytesDestToSrc, BytesSrcToDest
| where isnotempty(SrcSubscription) and isnotempty(DestSubscription)
| summarize TransferredBytes=sum(BytesDestToSrc+BytesSrcToDest) by SrcSubscription, DestSubscription

Een lijst weergeven van virtuele machines die het meeste on-premises verkeer ontvangen

Gebruik de volgende query om te controleren welke virtuele machines het meeste on-premises verkeer ontvangen.

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

IP-adressen weergeven die het meeste on-premises verkeer ontvangen

Gebruik de volgende query om te controleren welke IP-adressen het meeste on-premises verkeer ontvangen.

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

IP-adressen weergeven die verkeer naar of van een virtuele machine verzenden of ontvangen

Gebruik de volgende query om alle IP-adressen weer te geven die gegevens hebben uitgewisseld met een virtuele machine met behulp van het IP-adres van de afgelopen 30 dagen.

NTANetAnalytics
| where TimeGenerated > ago(30d)
| where SrcIp == "10.1.1.8" and strlen(DestIp)>0
| summarize TotalBytes=sum(BytesDestToSrc+BytesSrcToDest) by SrcIp, DestIp

ExpressRoute-verkeer weergeven

Gebruik de volgende query om verkeer over ExpressRoute-verbindingen in de afgelopen 30 dagen weer te geven.

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

Verdeling van verkeer van load balancer weergeven

Gebruik de volgende query om de verkeersdistributie van uw toepassing met een load balancer voor de toepassing weer te geven.

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

Standaarddeviatie controleren in verkeer dat wordt ontvangen door virtuele machines

Gebruik de volgende query om de standaarddeviatie te controleren in verkeer dat wordt ontvangen door virtuele machines van on-premises machines.

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

Standaarddeviatie controleren in verkeer dat is ontvangen door IP-adressen

Gebruik de volgende query om de standaarddeviatie te controleren in verkeer dat is ontvangen door IP-adressen van on-premises machines.

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

NTAIpDetails-query's

Deze sectie bevat voorbeeldquery's voor de tabel NTAIpDetails die u kunt gebruiken om IP-specifieke informatie in uw verkeersanalysegegevens te analyseren. Zie NTAIpDetails voor meer informatie.

Stroomtypen en openbare IP-locaties weergeven

Gebruik de volgende query voor meer informatie over de stroomtypen en de locatie van openbare IP-adressen in uw verkeersanalysegegevens.

NTAIpDetails
| distinct FlowType, PublicIpDetails, Location

Schadelijke stroomtypen weergeven

Gebruik de volgende query om de threadtypen in schadelijke stromen weer te geven.

NTAIpDetails
| where TimeGenerated > ago(30d)
| where FlowType == "MaliciousFlow"
| summarize count() by ThreatType
| render piechart

AzureNetworkAnalytics_CL query's

Deze sectie bevat voorbeeldquery's voor de tabel AzureNetworkAnalytics_CL query's die u kunt gebruiken om uw NSG-stroomlogboekgegevens van traffic analytics te analyseren.

Alle subnetten weergeven die interactie hebben met openbare IP-adressen

Gebruik de volgende query om alle subnetten weer te geven die in de afgelopen 30 dagen communiceren met niet-Azure openbare IP-adressen.

AzureNetworkAnalytics_CL
| where SubType_s == "FlowLog" and FlowStartTime_t >= ago(30d) and FlowType_s == "ExternalPublic"
| project Subnet1_s, Subnet2_s  

Blobpad weergeven voor stromen die communiceren met openbare IP-adressen

Gebruik de volgende query om het blobpad voor de stromen in de vorige query weer te geven.

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

De vorige query bouwt als volgt een URL voor toegang tot de blob:

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

Een lijst weergeven van virtuele machines die het meeste on-premises verkeer ontvangen

Gebruik de volgende query om te controleren welke virtuele machines het meeste on-premises verkeer ontvangen.

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

IP-adressen weergeven die het meeste on-premises verkeer ontvangen

Gebruik de volgende query om te controleren welke IP-adressen het meeste on-premises verkeer ontvangen.

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

Standaarddeviatie controleren in verkeer dat wordt ontvangen door virtuele machines

Gebruik de volgende query om de standaarddeviatie te controleren in verkeer dat wordt ontvangen door virtuele machines van on-premises machines.

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

Standaarddeviatie controleren in verkeer dat is ontvangen door IP-adressen

Gebruik de volgende query om de standaarddeviatie te controleren in verkeer dat is ontvangen door IP-adressen van on-premises machines.

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

Controleren welke poorten bereikbaar of geblokkeerd zijn tussen IP-paren met NSG-regels

Gebruik de volgende query om te controleren welke poorten bereikbaar (of geblokkeerd) zijn tussen IP-paren met NSG-regels.

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

Dubbele records voorkomen

Als stroomlogboekregistratie aan beide zijden van een verbinding is ingeschakeld, kan een stroom worden vastgelegd op meerdere apparaten. Als gevolg hiervan kunnen dubbele gegevens worden weergegeven als alle stroomlogboeken worden samengevoegd in dezelfde Log Analytics-werkruimte. Het is nodig om duplicatie op te nemen FlowDirection of MACAddress te voorkomen en onderscheid te maken tussen records.

In een stroom/verbinding:

  • MacAddress geeft de MAC aan van het apparaat waarop de stroom wordt vastgelegd.
  • SrcIp geeft het IP-adres van het apparaat aan van waaruit de verbinding is gestart.
  • DestIp geeft het IP-adres aan van het apparaat waarmee de verbinding is gemaakt.
  • FlowDirection geeft de richting aan van de verbinding met betrekking tot het apparaat. Als er bijvoorbeeld een verbinding wordt gemaakt van VM1 (IP: 10.0.0.4 en MAC: A1:B1:C1:D1:E1:F1) naar VM2 (IP: 10.0.0.5 en MAC: A2:B2:C2:D2:E2:F2), als de stroom wordt vastgelegd op VM1 , FlowDirection dan zou deze stroom zijn Outbounden als de stroom wordt vastgelegd op VM2 , FlowDirection dan zou dit zijn Inboundvoor deze stroom.
  • BytesSrcToDest / PacketsSrcToDest duiden op bytes of pakketten die van de bron naar de bestemming zijn verzonden, ongeacht waar ze zijn vastgelegd.
  • BytesDestToSrc / PacketsDestToSrc duiden op bytes of pakketten die van bestemming naar bron worden verzonden, ongeacht waar ze zijn vastgelegd.

Als er bijvoorbeeld een verbinding wordt gemaakt van VM1 naar VM2 met de volgende velden.

VM SrcIp DestIp MAC BytesSrcToDest BytesDestToSrc FlowDirection
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 Inkomend

U kunt een van de volgende query's gebruiken om het totale aantal uitgaande bytes voor een apparaat met IP-adres 10.0.0.4 en MAC-adres A1:B1:C1:D1:E1:F1te berekenen voor verbindingen die door dit apparaat zijn geïnitieerd.

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);

Op dezelfde manier kunt u een van de volgende query's gebruiken om het totale aantal uitgaande bytes voor een apparaat met IP-adres 10.0.0.4 en MAC-adres A1:B1:C1:D1:E1:F1te berekenen, voor verbindingen die door andere apparaten met dit apparaat zijn geïnitieerd.

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)

U kunt het totale aantal uitgaande bytes voor een apparaat berekenen met behulp van de volgende query:

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;