Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek obsahuje ukázkové dotazy k jazyku KQL (Kusto Query Language), které vám pomůžou efektivně analyzovat data analýzy provozu. Analýza provozu zpracovává protokoly toku virtuální sítě a protokoly toků skupin zabezpečení sítě (NSG) a poskytuje podrobné přehledy o vzorech síťového provozu, událostech zabezpečení a metrikách výkonu.
Pomocí těchto dotazů můžete:
- Identifikace vzorů síťového provozu a nejlepších komunikačních koncových bodů
- Monitorování událostí zabezpečení a analýza potenciálních hrozeb
- Řešení potíží s připojením k síti
- Optimalizace výkonu sítě a využití prostředků
Požadavky
- Analýza provozu nakonfigurovaná pro vaše protokoly toku Další informace najdete v tématu Povolení nebo zakázání analýzy provozu.
- Přístup k pracovnímu prostoru služby Log Analytics, ve kterém jsou uložená data protokolu toku. Další informace najdete v přehledu pracovního prostoru služby Log Analytics.
Dotazy NTANetAnalytics
Tato část obsahuje ukázkové dotazy pro tabulku NTANetAnalytics , kterou můžete použít k analýze dat analýzy provozu virtuální sítě. Tabulka NTANetAnalytics obsahuje agregovaná data protokolu toků s rozšířenými informacemi o analýze sítě. Další informace o schématu tabulky a dostupných polích najdete v tématu NTANetAnalytics.
Výpis podsítí pracujících s veřejnými IP adresami
Pomocí následujícího dotazu zobrazíte seznam všech podsítí, které komunikují s veřejnými IP adresami mimo Azure za posledních 30 dnů.
NTANetAnalytics
| where SubType == "FlowLog" and FlowStartTime > ago(30d) and FlowType == "ExternalPublic"
| project SrcSubnet, DestSubnet
Zobrazení seznamu podsítí, které vzájemně spolupracují
Pomocí následujícího dotazu zobrazíte seznam všech podsítí, které mezi sebou vyměňovaly provoz za posledních 30 dnů, a celkový počet bajtů, které se vyměněly.
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
Zobrazení provozu mezi oblastmi
Pomocí následujícího dotazu můžete zobrazit provoz v jednotlivých oblastech a mezi oblastmi za posledních 30 dnů.
NTANetAnalytics
| where TimeGenerated > ago(30d)
| project SrcRegion, DestRegion, BytesDestToSrc, BytesSrcToDest
| where isnotempty(SrcRegion) and isnotempty(DestRegion)
| summarize TransferredBytes=sum(BytesDestToSrc+BytesSrcToDest) by SrcRegion, DestRegion
Zobrazení provozu na základě předplatného
Pomocí následujícího dotazu můžete zobrazit provoz Azure seskupený podle předplatných za posledních 30 dnů.
NTANetAnalytics
| where TimeGenerated > ago(30d)
| project SrcSubscription, DestSubscription, BytesDestToSrc, BytesSrcToDest
| where isnotempty(SrcSubscription) and isnotempty(DestSubscription)
| summarize TransferredBytes=sum(BytesDestToSrc+BytesSrcToDest) by SrcSubscription, DestSubscription
Výpis virtuálních počítačů, které přijímají většinu místního provozu
Pomocí následujícího dotazu zkontrolujte, které virtuální počítače přijímají nejvíce místního provozu.
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
Výpis IP adres, které přijímají většinu místního provozu
Pomocí následujícího dotazu zkontrolujte, které IP adresy přijímají nejvíce místního provozu.
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
Výpis IP adres odesílaajících nebo přijímajících provoz do nebo z virtuálního počítače
Pomocí následujícího dotazu zobrazíte seznam všech IP adres, které si vyměňovaly data s virtuálním počítačem pomocí jeho IP adresy za posledních 30 dnů.
NTANetAnalytics
| where TimeGenerated > ago(30d)
| where SrcIp == "10.1.1.8" and strlen(DestIp)>0
| summarize TotalBytes=sum(BytesDestToSrc+BytesSrcToDest) by SrcIp, DestIp
Zobrazení provozu ExpressRoute
Následující dotaz slouží k zobrazení provozu přes připojení ExpressRoute za posledních 30 dnů.
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
Zobrazení distribuce provozu nástroje pro vyrovnávání zatížení
Pomocí následujícího dotazu zobrazíte distribuci provozu vaší aplikace, která má před sebou nástroj pro vyrovnávání zatížení.
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
Kontrola směrodatné odchylky provozu přijatých virtuálními počítači
Pomocí následujícího dotazu zkontrolujte směrodatnou odchylku provozu přijatého virtuálními počítači z místních počítačů.
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
Kontrola směrodatné odchylky provozu přijatých IP adresami
Pomocí následujícího dotazu zkontrolujte směrodatnou odchylku provozu přijatého IP adresami z místních počítačů.
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
Dotazy NTAIpDetails
Tato část obsahuje ukázkové dotazy pro tabulku NTAIpDetails , kterou můžete použít k analýze informací specifických pro IP adresy v datech analýzy provozu. Další informace naleznete v tématu NTAIpDetails.
Zobrazení typů toků a umístění veřejných IP adres
Pomocí následujícího dotazu se dozvíte o typech toků a umístění veřejných IP adres v analytických datech provozu.
NTAIpDetails
| distinct FlowType, PublicIpDetails, Location
Zobrazení škodlivých typů toků
Pomocí následujícího dotazu můžete zobrazit typy vláken v škodlivých tocích.
NTAIpDetails
| where TimeGenerated > ago(30d)
| where FlowType == "MaliciousFlow"
| summarize count() by ThreatType
| render piechart
dotazy AzureNetworkAnalytics_CL
Tato část obsahuje ukázkové dotazy pro tabulku AzureNetworkAnalytics_CL dotazů , které můžete použít k analýze dat protokolů toku NSG provozu.
Výpis všech podsítí pracujících s veřejnými IP adresami
Pomocí následujícího dotazu zobrazíte seznam všech podsítí, které komunikují s veřejnými IP adresami mimo Azure za posledních 30 dnů.
AzureNetworkAnalytics_CL
| where SubType_s == "FlowLog" and FlowStartTime_t >= ago(30d) and FlowType_s == "ExternalPublic"
| project Subnet1_s, Subnet2_s
Zobrazení cesty k objektům blob pro toky pracující s veřejnými IP adresami
Pomocí následujícího dotazu zobrazíte cestu k objektům blob pro toky v předchozím dotazu.
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
Předchozí dotaz vytvoří adresu URL pro přímý přístup k objektu blob následujícím způsobem:
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
Výpis virtuálních počítačů, které přijímají většinu místního provozu
Pomocí následujícího dotazu zkontrolujte, které virtuální počítače přijímají nejvíce místního provozu.
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
Výpis IP adres, které přijímají většinu místního provozu
Pomocí následujícího dotazu zkontrolujte, které IP adresy přijímají nejvíce místního provozu.
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
Kontrola směrodatné odchylky provozu přijatých virtuálními počítači
Pomocí následujícího dotazu zkontrolujte směrodatnou odchylku provozu přijatého virtuálními počítači z místních počítačů.
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
Kontrola směrodatné odchylky provozu přijatých IP adresami
Pomocí následujícího dotazu zkontrolujte směrodatnou odchylku provozu přijatého IP adresami z místních počítačů.
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
Zkontrolujte, které porty jsou dostupné nebo blokované mezi páry IP adres pomocí pravidel NSG.
Pomocí následujícího dotazu zkontrolujte, které porty jsou dostupné (nebo blokované) mezi páry IP adres s pravidly 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
Zabránění duplicitním záznamům
Pokud je protokolování toku povolené na obou stranách připojení, je možné tok zachytit na více zařízeních. V důsledku toho se můžou zobrazit duplicitní data, pokud jsou všechny protokoly toku agregované ve stejném pracovním prostoru služby Log Analytics. Je nutné zahrnout FlowDirection nebo MACAddress zabránit duplikaci a rozlišovat mezi záznamy.
V toku nebo připojení:
-
MacAddressoznačuje mac zařízení, na kterém se tok zaznamenává. -
SrcIpoznačuje IP adresu zařízení, ze kterého bylo zahájeno připojení. -
DestIpoznačuje IP adresu zařízení, ke kterému bylo připojení provedeno. -
FlowDirectionoznačuje směr spojení s ohledem na zařízení. Pokud je například připojení provedeno z virtuálního počítače VM1 (IP adresa:10.0.0.4a MAC:A1:B1:C1:D1:E1:F1) k virtuálnímu počítači VM2 (IP adresa:10.0.0.5a MAC:A2:B2:C2:D2:E2:F2), pokud je tok zachycen na virtuálním počítači 1 , pakFlowDirectionpro tento tok budeOutbounda pokud se tok zachytí na virtuálním počítači VM2 , budeFlowDirectionpro tento tokInbound. -
BytesSrcToDest/PacketsSrcToDestoznačuje bajty nebo pakety odeslané ze zdroje do cíle bez ohledu na to, kde byly zachyceny. -
BytesDestToSrc/PacketsDestToSrcoznačuje bajty nebo pakety odeslané z cíle do zdroje bez ohledu na to, kde byly zachyceny.
Pokud je například připojení vytvořené z virtuálního počítače 1 na virtuální počítač 2 s následujícími poli.
| virtuální počítač | SrcIp | DestIp | GUMÁK | BytesSrcToDest | BytesDestToSrc | FlowDirection |
|---|---|---|---|---|---|---|
| Virtuální počítač 1 | 10.0.0.4 | 10.0.0.5 | E1-F1 A1-B1-C1-D1 | 100 | 200 | Outbound |
| Virtuální počítač 2 | 10.0.0.4 | 10.0.0.5 | E2-F2 A2-B2-C2-D2 | 100 | 200 | Příchozí |
Pomocí libovolného z následujících dotazů můžete vypočítat celkový počet odchozích bajtů pro zařízení s IP adresou a adresou 10.0.0.4A1:B1:C1:D1:E1:F1MAC pro připojení iniciovaná tímto zařízením.
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);
Podobně můžete použít libovolný z následujících dotazů k výpočtu celkového počtu odchozích bajtů pro zařízení s IP adresou a adresou 10.0.0.4A1:B1:C1:D1:E1:F1MAC pro připojení iniciovaná jinými zařízeními k tomuto zařízení.
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)
Celkový počet odchozích bajtů pro zařízení můžete vypočítat pomocí následujícího dotazu:
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;