Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article fournit des exemples de requêtes Kusto Query Language (KQL) pour vous aider à analyser efficacement les données d’analyse du trafic. Traffic Analytics traite les journaux de flux de réseau virtuel et les journaux de flux de groupe de sécurité réseau (NSG) pour fournir des insights détaillés sur les modèles de trafic réseau, les événements de sécurité et les métriques de performances.
Utilisez ces requêtes pour :
- Identifier les modèles de trafic réseau et les principaux points de terminaison de communication
- Surveiller les événements de sécurité et analyser les menaces potentielles
- Résoudre les problèmes de connectivité réseau
- Optimiser les performances réseau et l’utilisation des ressources
Prerequisites
- Analyse du trafic configurée pour vos journaux de flux. Pour plus d’informations, consultez Activer ou désactiver l’analyse du trafic.
- Accès à l’espace de travail Log Analytics où sont stockées vos données de journal de flux. Pour plus d’informations, consultez Vue d’ensemble de l’espace de travail Log Analytics.
Requêtes NTANetAnalytics
Cette section fournit des exemples de requêtes pour la table NTANetAnalytics que vous pouvez utiliser pour analyser vos données d’analyse du trafic de réseau virtuel. La table NTANetAnalytics contient des données de journal de flux agrégées avec des informations d’analyse réseau améliorées. Pour plus d’informations sur le schéma de table et les champs disponibles, consultez NTANetAnalytics.
Répertorier les sous-réseaux qui interagissent avec les adresses IP publiques
Utilisez la requête suivante pour répertorier tous les sous-réseaux qui interagissent avec des adresses IP publiques non-Azure au cours des 30 derniers jours.
NTANetAnalytics
| where SubType == "FlowLog" and FlowStartTime > ago(30d) and FlowType == "ExternalPublic"
| project SrcSubnet, DestSubnet
Répertorier les sous-réseaux qui interagissent les uns avec les autres
Utilisez la requête suivante pour répertorier tous les sous-réseaux qui ont échangé du trafic entre eux au cours des 30 derniers jours et le total des octets échangés.
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
Afficher le trafic interrégional
Utilisez la requête suivante pour afficher le trafic intrarégional et interrégional au cours des 30 derniers jours.
NTANetAnalytics
| where TimeGenerated > ago(30d)
| project SrcRegion, DestRegion, BytesDestToSrc, BytesSrcToDest
| where isnotempty(SrcRegion) and isnotempty(DestRegion)
| summarize TransferredBytes=sum(BytesDestToSrc+BytesSrcToDest) by SrcRegion, DestRegion
Afficher le trafic en fonction de l’abonnement
Utilisez la requête suivante pour afficher le trafic Azure regroupé par abonnements au cours des 30 derniers jours.
NTANetAnalytics
| where TimeGenerated > ago(30d)
| project SrcSubscription, DestSubscription, BytesDestToSrc, BytesSrcToDest
| where isnotempty(SrcSubscription) and isnotempty(DestSubscription)
| summarize TransferredBytes=sum(BytesDestToSrc+BytesSrcToDest) by SrcSubscription, DestSubscription
Répertorier les machines virtuelles recevant la plupart du trafic local
Utilisez la requête suivante pour vérifier quelles machines virtuelles reçoivent la plupart du trafic 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
Répertorier les adresses IP recevant la plupart du trafic local
Utilisez la requête suivante pour vérifier quelles adresses IP reçoivent la plupart du trafic 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
Répertorier les adresses IP qui envoient ou reçoivent du trafic vers ou depuis une machine virtuelle
Utilisez la requête suivante pour répertorier toutes les adresses IP qui ont échangé des données avec une machine virtuelle à l’aide de son adresse IP au cours des 30 derniers jours.
NTANetAnalytics
| where TimeGenerated > ago(30d)
| where SrcIp == "10.1.1.8" and strlen(DestIp)>0
| summarize TotalBytes=sum(BytesDestToSrc+BytesSrcToDest) by SrcIp, DestIp
Afficher le trafic ExpressRoute
Utilisez la requête suivante pour afficher le trafic sur les connexions ExpressRoute au cours des 30 derniers jours.
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
Afficher la distribution du trafic de l’équilibreur de charge
Utilisez la requête suivante pour afficher la distribution du trafic de votre application qui a un équilibreur de charge devant lui.
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
Vérifier l’écart type dans le trafic reçu par les machines virtuelles
Utilisez la requête suivante pour vérifier l’écart type dans le trafic reçu par les machines virtuelles à partir d’ordinateurs locaux.
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
Vérifier l’écart type dans le trafic reçu par les adresses IP
Utilisez la requête suivante pour vérifier l’écart type dans le trafic reçu par les adresses IP des ordinateurs locaux.
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
Requêtes NTAIpDetails
Cette section fournit des exemples de requêtes pour la table NTAIpDetails que vous pouvez utiliser pour analyser des informations spécifiques à l’adresse IP dans vos données d’analyse du trafic. Pour plus d’informations, consultez NTAIpDetails.
Afficher les types de flux et les emplacements d’adresses IP publiques
Utilisez la requête suivante pour en savoir plus sur les types de flux et l’emplacement des adresses IP publiques dans vos données d’analyse du trafic.
NTAIpDetails
| distinct FlowType, PublicIpDetails, Location
Afficher les types de flux malveillants
Utilisez la requête suivante pour afficher les types de threads dans des flux malveillants.
NTAIpDetails
| where TimeGenerated > ago(30d)
| where FlowType == "MaliciousFlow"
| summarize count() by ThreatType
| render piechart
Requêtes AzureNetworkAnalytics_CL
Cette section fournit des exemples de requêtes pour la table de requêtes AzureNetworkAnalytics_CL que vous pouvez utiliser pour analyser vos données de flux de groupe de sécurité réseau d’analyse du trafic.
Répertorier tous les sous-réseaux qui interagissent avec des adresses IP publiques
Utilisez la requête suivante pour répertorier tous les sous-réseaux qui interagissent avec des adresses IP publiques non-Azure au cours des 30 derniers jours.
AzureNetworkAnalytics_CL
| where SubType_s == "FlowLog" and FlowStartTime_t >= ago(30d) and FlowType_s == "ExternalPublic"
| project Subnet1_s, Subnet2_s
Afficher le chemin de blob pour les flux qui interagissent avec les adresses IP publiques
Utilisez la requête suivante pour voir le chemin de blob pour les flux dans la requête précédente.
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
La requête précédente construit une URL permettant d’accéder directement à l’objet blob, comme suit :
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
Répertorier les machines virtuelles recevant la plupart du trafic local
Utilisez la requête suivante pour vérifier quelles machines virtuelles reçoivent la plupart du trafic 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
Répertorier les adresses IP recevant la plupart du trafic local
Utilisez la requête suivante pour vérifier quelles adresses IP reçoivent la plupart du trafic 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
Vérifier l’écart type dans le trafic reçu par les machines virtuelles
Utilisez la requête suivante pour vérifier l’écart type dans le trafic reçu par les machines virtuelles à partir d’ordinateurs locaux.
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
Vérifier l’écart type dans le trafic reçu par les adresses IP
Utilisez la requête suivante pour vérifier l’écart type dans le trafic reçu par les adresses IP des ordinateurs locaux.
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
Vérifier quels ports sont accessibles ou bloqués entre les paires d’adresses IP avec les règles du groupe de sécurité réseau
Utilisez la requête suivante pour vérifier quels ports sont accessibles (ou bloqués) entre les paires IP avec des règles de groupe de sécurité réseau.
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
Empêcher les enregistrements en double
Si la journalisation des flux est activée des deux côtés d’une connexion, un flux peut être capturé sur plusieurs appareils. Par conséquent, les données en double peuvent apparaître si tous les journaux de flux sont agrégés dans le même espace de travail Log Analytics. Il est nécessaire d’inclure FlowDirection ou MACAddress d’empêcher la duplication et de faire la distinction entre les enregistrements.
Dans un flux/une connexion :
-
MacAddressindique le MAC de l’appareil sur lequel le flux est capturé. -
SrcIpindique l’adresse IP de l’appareil à partir duquel la connexion a été lancée. -
DestIpindique l’adresse IP de l’appareil auquel la connexion a été établie. -
FlowDirectionindique la direction de la connexion par rapport à l’appareil. Par exemple, lorsqu’une connexion est établie à partir de VM1 (IP :10.0.0.4et MAC :A1:B1:C1:D1:E1:F1) à VM2 (IP :10.0.0.5et MAC :A2:B2:C2:D2:E2:F2), si le flux est capturé sur VM1, alorsFlowDirectionpour ce flux seraitOutbound, et si le flux est capturé sur VM2, alorsFlowDirectionpour ce flux seraitInbound. -
BytesSrcToDest/PacketsSrcToDestindique les octets ou les paquets envoyés de la source à la destination, quel que soit l’emplacement où ils ont été capturés. -
BytesDestToSrc/PacketsDestToSrcindique les octets ou les paquets envoyés de la destination à la source, quel que soit l’emplacement où ils ont été capturés.
Par exemple, si une connexion est établie de VM1 à VM2 avec les champs suivants.
| VM | SrcIp | DestIp | MAC | BytesSrcToDest | BytesDestToSrc | FlowDirection |
|---|---|---|---|---|---|---|
| MV1 | 10.0.0.4 | 10.0.0.5 | A1-B1-C1-D1-E1-F1 | 100 | 200 | Règle de trafic sortant |
| MV2 | 10.0.0.4 | 10.0.0.5 | A2-B2-C2-D2-E2-F2 | 100 | 200 | Trafic entrant |
Vous pouvez utiliser l’une des requêtes suivantes pour calculer le nombre total d’octets sortants pour un appareil avec l’adresse IP 10.0.0.4 et l’adresse MAC A1:B1:C1:D1:E1:F1, pour les connexions initiées par cet appareil.
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);
De même, vous pouvez utiliser l’une des requêtes suivantes pour calculer le nombre total d’octets sortants pour un appareil avec l’adresse IP 10.0.0.4 et l’adresse MAC A1:B1:C1:D1:E1:F1, pour les connexions initiées par un autre appareil à cet appareil.
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)
Vous pouvez calculer le nombre total d’octets sortants pour un appareil à l’aide de la requête suivante :
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;