Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel enthält Beispielabfragen der Kusto Query Language (KQL), die Ihnen helfen, Datenverkehrsanalysen effektiv zu analysieren. Datenverkehrsanalyse verarbeitet VNet-Flussprotokolle (Virtual Network) und NSG-Ablaufprotokolle (Network Security Group), um detaillierte Einblicke in Netzwerkdatenverkehrsmuster, Sicherheitsereignisse und Leistungsmetriken zu bieten.
Verwenden Sie diese Abfragen, um:
- Identifizieren von Netzwerkdatenverkehrsmustern und endpunkten der wichtigsten Kommunikation
- Überwachen von Sicherheitsereignissen und Analysieren potenzieller Bedrohungen
- Behandeln von Problemen mit der Netzwerkkonnektivität
- Optimieren der Netzwerkleistung und Ressourcenauslastung
Voraussetzungen
- Datenverkehrsanalysen, die für Ihre Ablaufprotokolle konfiguriert sind. Weitere Informationen finden Sie unter Aktivieren oder Deaktivieren der Datenverkehrsanalyse.
- Zugriff auf den Log Analytics-Arbeitsbereich, in dem Ihre Flussprotokolldaten gespeichert werden. Weitere Informationen finden Sie in der Übersicht über den Log Analytics-Arbeitsbereich.
NTANetAnalytics-Abfragen
Dieser Abschnitt enthält Beispielabfragen für die NTANetAnalytics-Tabelle , die Sie zum Analysieren Ihrer Datenverkehrsanalysedaten im virtuellen Netzwerk verwenden können. Die Tabelle "NTANetAnalytics" enthält aggregierte Flussprotokolldaten mit erweiterten Netzwerkanalyseinformationen. Weitere Informationen zum Tabellenschema und den verfügbaren Feldern finden Sie unter NTANetAnalytics.
Auflisten von Subnetzen, die mit öffentlichen IPs interagieren
Verwenden Sie die folgende Abfrage, um alle Subnetze auflisten, die in den letzten 30 Tagen mit nicht azure öffentlichen IPs interagieren.
NTANetAnalytics
| where SubType == "FlowLog" and FlowStartTime > ago(30d) and FlowType == "ExternalPublic"
| project SrcSubnet, DestSubnet
Auflisten von Subnetzen, die miteinander interagieren
Verwenden Sie die folgende Abfrage, um alle Subnetze auflisten, die datenverkehrsübergreifend in den letzten 30 Tagen ausgetauscht wurden, und die Gesamtzahl der ausgetauschten Bytes.
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
Anzeigen des regionalübergreifenden Verkehrs
Verwenden Sie die folgende Abfrage, um den intraregionalen und interregionalen Datenverkehr in den letzten 30 Tagen anzuzeigen.
NTANetAnalytics
| where TimeGenerated > ago(30d)
| project SrcRegion, DestRegion, BytesDestToSrc, BytesSrcToDest
| where isnotempty(SrcRegion) and isnotempty(DestRegion)
| summarize TransferredBytes=sum(BytesDestToSrc+BytesSrcToDest) by SrcRegion, DestRegion
Anzeigen des Datenverkehrs basierend auf abonnementbasiertem Abonnement
Verwenden Sie die folgende Abfrage, um azure-Datenverkehr nach Abonnements in den letzten 30 Tagen gruppiert anzuzeigen.
NTANetAnalytics
| where TimeGenerated > ago(30d)
| project SrcSubscription, DestSubscription, BytesDestToSrc, BytesSrcToDest
| where isnotempty(SrcSubscription) and isnotempty(DestSubscription)
| summarize TransferredBytes=sum(BytesDestToSrc+BytesSrcToDest) by SrcSubscription, DestSubscription
Auflisten virtueller Computer, die den meisten lokalen Datenverkehr erhalten
Verwenden Sie die folgende Abfrage, um zu überprüfen, welche virtuellen Computer den meisten lokalen Datenverkehr erhalten.
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
Auflisten von IPs, die den meisten lokalen Datenverkehr empfangen
Verwenden Sie die folgende Abfrage, um zu überprüfen, welche IPs den meisten lokalen Datenverkehr erhalten.
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
Auflisten von IPs, die Datenverkehr an oder von einem virtuellen Computer empfangen
Verwenden Sie die folgende Abfrage, um alle IPs auflisten, die Daten mit einem virtuellen Computer ausgetauscht haben, indem Sie ihre IP-Adresse in den letzten 30 Tagen verwenden.
NTANetAnalytics
| where TimeGenerated > ago(30d)
| where SrcIp == "10.1.1.8" and strlen(DestIp)>0
| summarize TotalBytes=sum(BytesDestToSrc+BytesSrcToDest) by SrcIp, DestIp
ExpressRoute-Datenverkehr anzeigen
Verwenden Sie die folgende Abfrage, um Datenverkehr über ExpressRoute-Verbindungen in den letzten 30 Tagen anzuzeigen.
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
Anzeigen der Datenverkehrsverteilung des Lastenausgleichs
Verwenden Sie die folgende Abfrage, um die Datenverkehrsverteilung Ihrer Anwendung mit einem Lastenausgleich vor der Anwendung anzuzeigen.
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
Überprüfen der Standardabweichung des Datenverkehrs, der von virtuellen Computern empfangen wird
Verwenden Sie die folgende Abfrage, um die Standardabweichung des Datenverkehrs zu überprüfen, der von virtuellen Computern von lokalen Computern empfangen wird.
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
Überprüfen der Standardabweichung des Datenverkehrs, der von IPs empfangen wird
Verwenden Sie die folgende Abfrage, um die Standardabweichung des Datenverkehrs zu überprüfen, der von IPs von lokalen Computern empfangen wird.
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-Abfragen
Dieser Abschnitt enthält Beispielabfragen für die Tabelle "NTAIpDetails ", mit der Sie IP-spezifische Informationen in Ihren Datenverkehrsanalysedaten analysieren können. Weitere Informationen finden Sie unter NTAIpDetails.
Anzeigen von Flusstypen und öffentlichen IP-Speicherorten
Verwenden Sie die folgende Abfrage, um mehr über die Flusstypen und den Speicherort öffentlicher IPs in Ihren Datenverkehrsanalysedaten zu erfahren.
NTAIpDetails
| distinct FlowType, PublicIpDetails, Location
Anzeigen bösartiger Flusstypen
Verwenden Sie die folgende Abfrage, um die Threadtypen in bösartigen Flüssen anzuzeigen.
NTAIpDetails
| where TimeGenerated > ago(30d)
| where FlowType == "MaliciousFlow"
| summarize count() by ThreatType
| render piechart
AzureNetworkAnalytics_CL Abfragen
Dieser Abschnitt enthält Beispielabfragen für die AzureNetworkAnalytics_CL Abfragetabelle , die Sie verwenden können, um Ihre NSG-Flussprotokolldaten zu analysieren.
Auflisten aller Subnetze, die mit öffentlichen IPs interagieren
Verwenden Sie die folgende Abfrage, um alle Subnetze auflisten, die in den letzten 30 Tagen mit nicht azure öffentlichen IPs interagieren.
AzureNetworkAnalytics_CL
| where SubType_s == "FlowLog" and FlowStartTime_t >= ago(30d) and FlowType_s == "ExternalPublic"
| project Subnet1_s, Subnet2_s
Anzeigen des BLOB-Pfads für Flüsse, die mit öffentlichen IPs interagieren
Verwenden Sie die folgende Abfrage, um den BLOB-Pfad für die Flüsse in der vorherigen Abfrage anzuzeigen.
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
Die vorherige Abfrage erstellt eine URL für den direkten Zugriff auf das Blob wie folgt:
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
Auflisten virtueller Computer, die den meisten lokalen Datenverkehr erhalten
Verwenden Sie die folgende Abfrage, um zu überprüfen, welche virtuellen Computer den meisten lokalen Datenverkehr erhalten.
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
Auflisten von IPs, die den meisten lokalen Datenverkehr empfangen
Verwenden Sie die folgende Abfrage, um zu überprüfen, welche IPs den meisten lokalen Datenverkehr erhalten.
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
Überprüfen der Standardabweichung des Datenverkehrs, der von virtuellen Computern empfangen wird
Verwenden Sie die folgende Abfrage, um die Standardabweichung des Datenverkehrs zu überprüfen, der von virtuellen Computern von lokalen Computern empfangen wird.
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
Überprüfen der Standardabweichung des Datenverkehrs, der von IPs empfangen wird
Verwenden Sie die folgende Abfrage, um die Standardabweichung des Datenverkehrs zu überprüfen, der von IPs von lokalen Computern empfangen wird.
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
Überprüfen, welche Ports zwischen IP-Paaren mit NSG-Regeln erreichbar oder blockiert sind
Verwenden Sie die folgende Abfrage, um zu überprüfen, welche Ports zwischen IP-Paaren mit NSG-Regeln erreichbar (oder blockiert sind).
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
Verhindern doppelter Datensätze
Wenn die Ablaufprotokollierung auf beiden Seiten einer Verbindung aktiviert ist, kann ein Fluss auf mehreren Geräten erfasst werden. Daher können doppelte Daten angezeigt werden, wenn alle Ablaufprotokolle im selben Log Analytics-Arbeitsbereich aggregiert werden. Es ist erforderlich, Duplizierungen einzuschließen FlowDirection oder MACAddress zu verhindern und zwischen Datensätzen zu unterscheiden.
In einem Fluss/einer Verbindung:
-
MacAddressgibt den MAC des Geräts an, auf dem der Fluss erfasst wird. -
SrcIpgibt die IP-Adresse des Geräts an, von dem die Verbindung initiiert wurde. -
DestIpgibt die IP-Adresse des Geräts an, mit dem die Verbindung hergestellt wurde. -
FlowDirectiongibt die Richtung der Verbindung im Hinblick auf das Gerät an. Wenn z. B. eine Verbindung von VM1 (IP:10.0.0.4und MAC:A1:B1:C1:D1:E1:F1) zu VM2 (IP:10.0.0.5und MAC:A2:B2:C2:D2:E2:F2) hergestellt wird, wenn der Fluss bei VM1FlowDirectionerfasst wird, dann lautetOutboundder Ablauf für diesen Fluss , und wenn der Fluss bei VM2 erfasst wird,FlowDirectiondann lautetInbounddieser Ablauf . -
BytesSrcToDest/PacketsSrcToDestGeben Sie Bytes oder Pakete an, die von der Quelle an das Ziel gesendet wurden, unabhängig davon, wo sie erfasst wurden. -
BytesDestToSrc/PacketsDestToSrcGeben Sie Bytes oder Pakete an, die vom Ziel an die Quelle gesendet wurden, unabhängig davon, wo sie erfasst wurden.
Beispiel: Wenn eine Verbindung von VM1 zu VM2 mit den folgenden Feldern hergestellt wird.
| VM | SrcIp | DestIp | MAC | BytesSrcToDest | BytesDestToSrc | FlowDirection |
|---|---|---|---|---|---|---|
| VM1 | 10.0.0.4 | 10.0.0.5 | A1-B1-C1-D1-E1-F1 | 100 | 200 | Ausgehend |
| VM2 | 10.0.0.4 | 10.0.0.5 | A2-B2-C2-D2-E2-F2 | 100 | 200 | Eingehend |
Sie können eine der folgenden Abfragen verwenden, um die Gesamtanzahl ausgehender Bytes für ein Gerät mit IP-Adresse 10.0.0.4 und MAC-Adresse A1:B1:C1:D1:E1:F1für Verbindungen zu berechnen, die von diesem Gerät initiiert werden.
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);
Ebenso können Sie eine der folgenden Abfragen verwenden, um die Gesamtanzahl ausgehender Bytes für ein Gerät mit IP-Adresse 10.0.0.4 und MAC-Adresse A1:B1:C1:D1:E1:F1für Verbindungen zu diesem Gerät zu berechnen.
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)
Sie können die Gesamtanzahl ausgehender Bytes für ein Gerät mithilfe der folgenden Abfrage berechnen:
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;