مشاركة عبر


استخدام طلبات البحث في تحليلات حركة المرور

توفر هذه المقالة عينة من استعلامات لغة استعلام Kusto (KQL) لمساعدتك في تحليل بيانات تحليلات حركة المرور بشكل فعال. تعالج تحليلات نسبة استخدام الشبكة سجلات تدفق الشبكة الظاهرية (VNet) وسجلات تدفق مجموعة أمان الشبكة (NSG) لتوفير رؤى مفصلة حول أنماط حركة مرور الشبكة وأحداث الأمان ومقاييس الأداء.

استخدم هذه الاستعلامات من أجل:

  • تحديد أنماط حركة مرور الشبكة ونقاط نهاية الاتصال العليا
  • مراقبة الأحداث الأمنية وتحليل التهديدات المحتملة
  • استكشاف مشكلات اتصال الشبكة وإصلاحها
  • تحسين أداء الشبكة واستخدام الموارد

المتطلبات الأساسية

استعلامات NTANetAnalytics

يوفر هذا القسم نماذج من الاستعلامات لجدول NTANetAnalytics التي يمكنك استخدامها لتحليل بيانات تحليلات نسبة استخدام الشبكة الظاهرية. يحتوي جدول NTANetAnalytics على بيانات سجل التدفق المجمعة مع معلومات تحليلات الشبكة المحسنة. لمزيد من المعلومات حول مخطط الجدول والحقول المتوفرة، راجع NTANetAnalytics.

سرد الشبكات الفرعية التي تتفاعل مع عناوين IP العامة

استخدم الاستعلام التالي لسرد جميع الشبكات الفرعية التي تتفاعل مع عناوين IP العامة غير التابعة ل Azure في آخر 30 يوما.

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

سرد الشبكات الفرعية التي تتفاعل مع بعضها البعض

استخدم الاستعلام التالي لسرد كافة الشبكات الفرعية التي تبادلت نسبة استخدام الشبكة مع بعضها البعض خلال آخر 30 يوما وإجمالي وحدات البايت التي تم تبادلها.

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

عرض حركة المرور عبر المناطق

استخدم الاستعلام التالي لعرض حركة المرور داخل المنطقة وبين المناطق خلال آخر 30 يوما.

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

عرض حركة المرور بناء على الاشتراك

استخدم الاستعلام التالي لعرض نسبة استخدام الشبكة Azure المجمعة حسب الاشتراكات على مدار ال 30 يوما الماضية.

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

سرد الأجهزة الظاهرية التي تتلقى معظم نسبة استخدام الشبكة المحلية

استخدم الاستعلام التالي للتحقق من الأجهزة الظاهرية التي تتلقى معظم نسبة استخدام الشبكة المحلية.

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 التي تتلقى معظم نسبة استخدام الشبكة المحلية

استخدم الاستعلام التالي للتحقق من عناوين IP التي تتلقى معظم نسبة استخدام الشبكة المحلية.

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 التي ترسل أو تستقبل نسبة استخدام الشبكة من أو إلى جهاز ظاهري

استخدم الاستعلام التالي لسرد جميع عناوين IP التي تبادلت البيانات مع جهاز ظاهري باستخدام عنوان IP الخاص به على مدار ال 30 يوما الماضية.

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

عرض حركة مرور ExpressRoute

استخدم الاستعلام التالي لعرض نسبة استخدام الشبكة عبر اتصالات ExpressRoute في آخر 30 يوما.

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

عرض توزيع حركة مرور موازن التحميل

استخدم الاستعلام التالي لعرض توزيع نسبة استخدام الشبكة للتطبيق الخاص بك الذي يحتوي على موازن تحميل أمامه.

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

التحقق من الانحراف المعياري في نسبة استخدام الشبكة التي تتلقاها الأجهزة الظاهرية

استخدم الاستعلام التالي للتحقق من الانحراف المعياري في نسبة استخدام الشبكة التي تتلقاها الأجهزة الظاهرية من الأجهزة المحلية.

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

التحقق من الانحراف المعياري في حركة المرور التي تتلقاها عناوين IP

استخدم الاستعلام التالي للتحقق من الانحراف المعياري في حركة المرور التي تتلقاها عناوين IP من الأجهزة المحلية.

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

يوفر هذا القسم نماذج من الاستعلامات لجدول NTAIpDetails التي يمكنك استخدامها لتحليل المعلومات الخاصة ب IP في بيانات تحليلات نسبة استخدام الشبكة. لمزيد من المعلومات، راجع NTAIpDetails.

عرض أنواع التدفق ومواقع IP العامة

استخدم الاستعلام التالي للتعرف على أنواع التدفق وموقع عناوين IP العامة في بيانات تحليلات نسبة استخدام الشبكة.

NTAIpDetails
| distinct FlowType, PublicIpDetails, Location

عرض أنواع التدفقات الضارة

استخدم الاستعلام التالي لعرض أنواع مؤشرات الترابط في التدفقات الضارة.

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

AzureNetworkAnalytics_CL الاستعلامات

يوفر هذا القسم نماذج من الاستعلامات لجدول استعلامات AzureNetworkAnalytics_CL التي يمكنك استخدامها لتحليل بيانات سجلات تدفق NSG لتحليلات نسبة استخدام الشبكة.

سرد جميع الشبكات الفرعية التي تتفاعل مع عناوين IP العامة

استخدم الاستعلام التالي لسرد جميع الشبكات الفرعية التي تتفاعل مع عناوين IP العامة غير التابعة ل Azure في آخر 30 يوما.

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

عرض مسار الكائن الثنائي كبير الحجم للتدفقات التي تتفاعل مع عناوين IP العامة

استخدم الاستعلام التالي لعرض مسار الكائن الثنائي كبير الحجم للتدفقات في الاستعلام السابق.

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

يقوم الاستعلام السابق بإنشاء عنوان URL للوصول إلى الكائن الثنائي كبير الحجم مباشرة على النحو التالي:

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

سرد الأجهزة الظاهرية التي تتلقى معظم نسبة استخدام الشبكة المحلية

استخدم الاستعلام التالي للتحقق من الأجهزة الظاهرية التي تتلقى معظم نسبة استخدام الشبكة المحلية.

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 التي تتلقى معظم نسبة استخدام الشبكة المحلية

استخدم الاستعلام التالي للتحقق من عناوين IP التي تتلقى معظم نسبة استخدام الشبكة المحلية.

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

التحقق من الانحراف المعياري في نسبة استخدام الشبكة التي تتلقاها الأجهزة الظاهرية

استخدم الاستعلام التالي للتحقق من الانحراف المعياري في نسبة استخدام الشبكة التي تتلقاها الأجهزة الظاهرية من الأجهزة المحلية.

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

التحقق من الانحراف المعياري في حركة المرور التي تتلقاها عناوين IP

استخدم الاستعلام التالي للتحقق من الانحراف المعياري في حركة المرور التي تتلقاها عناوين IP من الأجهزة المحلية.

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

تحقق من المنافذ التي يمكن الوصول إليها أو حظرها بين أزواج IP باستخدام قواعد NSG

استخدم الاستعلام التالي للتحقق من المنافذ التي يمكن الوصول إليها (أو المحظورة) بين أزواج IP باستخدام قواعد 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

منع السجلات المكررة

إذا تم تمكين تسجيل التدفق على جانبي الاتصال، فيمكن التقاط تدفق على أجهزة متعددة. ونتيجة لذلك، قد تظهر بيانات مكررة إذا تم تجميع كافة سجلات التدفق في نفس مساحة عمل Log Analytics. من الضروري تضمين FlowDirection أو MACAddress منع الازدواجية والتمييز بين السجلات.

في التدفق/الاتصال:

  • MacAddress يشير إلى MAC للجهاز الذي يتم التقاط التدفق عليه.
  • SrcIp يشير إلى عنوان IP للجهاز الذي بدأ الاتصال منه.
  • DestIp يشير إلى عنوان IP للجهاز الذي تم الاتصال به.
  • FlowDirection يشير إلى اتجاه الاتصال فيما يتعلق بالجهاز. على سبيل المثال ، عند إجراء اتصال من VM1 (IP: 10.0.0.4 و MAC: A1:B1:C1:D1:E1:F1) إلى VM2 (IP: 10.0.0.5 و MAC: A2:B2:C2:D2:E2:F2) ، إذا تم التقاط التدفق في VM1 ، فسيكون FlowDirectionOutboundهذا التدفق ، وإذا تم التقاط التدفق في VM2 ، فسيكون FlowDirectionInboundهذا التدفق .
  • BytesSrcToDest / PacketsSrcToDest الإشارة إلى وحدات البايت أو الحزم المرسلة من المصدر إلى الوجهة بغض النظر عن مكان التقاطها.
  • BytesDestToSrc / PacketsDestToSrc تشير إلى وحدات البايت أو الحزم المرسلة من وجهة إلى أخرى بغض النظر عن مكان التقاطها.

على سبيل المثال، إذا تم إجراء اتصال من VM1 إلى VM2 باستخدام الحقول التالية.

VM SrcIp DestIp الماك BytesSrcToDest بايتسDestToSrc اتجاه التدفق
م 1 10.0.0.4 10.0.0.5 أ1-ب1-ج1-د1-E1-F1 100 200 صادر
م 2 10.0.0.4 10.0.0.5 أ2-ب2-ج2-د2-E2-F2 100 200 الوارده

يمكنك استخدام أي من الاستعلامات التالية لحساب إجمالي وحدات البايت الصادرة لجهاز يحتوي على عنوان 10.0.0.4 IP وعنوان A1:B1:C1:D1:E1:F1MAC ، للاتصالات التي بدأها هذا الجهاز.

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

وبالمثل، يمكنك استخدام أي من الاستعلامات التالية لحساب إجمالي وحدات البايت الصادرة لجهاز بعنوان 10.0.0.4 IP وعنوان A1:B1:C1:D1:E1:F1MAC، للاتصالات التي بدأها أجهزة أخرى بهذا الجهاز.

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)

يمكنك حساب إجمالي وحدات البايت الصادرة لجهاز باستخدام الاستعلام التالي:

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;