Analýza využití v pracovním prostoru služby Log Analytics

Náklady na Azure Monitor se můžou výrazně lišit v závislosti na objemu shromažďovaných dat v pracovním prostoru služby Log Analytics. Tento svazek je ovlivněn sadou řešení využívajících pracovní prostor a objem dat, která jednotlivá řešení shromažďují. Tento článek obsahuje pokyny k analýze shromážděných dat, které vám pomůžou řídit náklady na příjem dat. Pomůže vám určit příčinu vyššího než očekávaného využití. Pomůže vám také předpovědět náklady při monitorování dalších prostředků a konfiguraci různých funkcí služby Azure Monitor.

Tip

Strategie pro snížení nákladů na Azure Monitor najdete v tématu Optimalizace nákladů a Azure Monitor.

Příčiny vyššího než očekávaného využití

Každý pracovní prostor služby Log Analytics se účtuje jako samostatná služba a přispívá k faktuře za vaše předplatné Azure. Objem příjmu dat může být značný v závislosti na:

  • Sada přehledů a služeb, které jsou povolené a jejich konfigurace.
  • Počet a typ monitorovaných prostředků
  • Objem dat shromážděných z každého monitorovaného prostředku

Neočekávaný nárůst některého z těchto faktorů může vést ke zvýšení poplatků za uchovávání dat. Zbytek tohoto článku poskytuje metody pro detekci takové situace a následnou analýzu shromážděných dat, aby bylo možné identifikovat a zmírnit zdroj zvýšeného využití.

Odeslání upozornění, když je shromažďování dat vysoké

Abyste se vyhnuli neočekávaným fakturám, měli byste být proaktivně upozorněni, kdykoli dojde k nadměrnému využití. Oznámení umožňuje řešit případné anomálie před koncem fakturačního období.

Následující příklad je pravidlo upozornění prohledávání protokolu, které odešle upozornění, pokud fakturovatelný objem dat přijatý za posledních 24 hodin byl větší než 50 GB. Upravte nastavení logiky upozornění tak, aby používalo jinou prahovou hodnotu na základě očekávaného využití ve vašem prostředí. Můžete také zvýšit frekvenci kontroly využití vícekrát denně, ale tato možnost způsobí vyšší poplatek za pravidlo upozornění.

Nastavení Hodnota
Scope
Cílový obor Vyberte pracovní prostor služby Log Analytics.
Condition (Podmínka)
Dotaz Usage | where IsBillable | summarize DataGB = sum(Quantity / 1000)
Měrný systém Míra: DataGB
Typ agregace: Celkem
Členitost agregace: 1 den
Logika upozornění Operátor: Větší než
Prahová hodnota: 50
Frekvence vyhodnocení: 1 den
Akce Vyberte nebo přidejte skupinu akcí, která vás upozorní na překročení prahové hodnoty.
Podrobnosti
Závažnost Upozorňující
Název pravidla upozornění Fakturovatelný objem dat větší než 50 GB za 24 hodin.

Analýza využití ve službě Azure Monitor

Spusťte analýzu pomocí existujících nástrojů ve službě Azure Monitor. Tyto nástroje nevyžadují žádnou konfiguraci a často poskytují potřebné informace s minimálním úsilím. Pokud potřebujete podrobnější analýzu shromážděných dat než existující funkce služby Azure Monitor, použijte v Log Analytics některý z následujících dotazů na protokoly.

Přehledy pracovních prostorů služby Log Analytics

Pracovní prostor služby Log Analytics Přehledy poskytuje rychlý přehled o datech ve vašem pracovním prostoru. Můžete například určit:

  • Tabulky dat, které ingestují největší objem dat v hlavní tabulce.
  • Hlavní zdroje informací, které přispívají k datům
  • Trend příjmu dat

Přehled příjmu dat podle řešení a tabulky najdete na kartě Využití . Tyto informace vám můžou pomoct rychle identifikovat tabulky, které přispívají k hromadnému objemu dat. Na kartě se také zobrazuje trend shromažďování dat v průběhu času. Můžete určit, jestli se shromažďování dat v průběhu času trvale zvýšilo nebo se náhle zvýšilo v reakci na změnu konfigurace.

Vyberte Další dotazy pro předem připravené dotazy, které vám pomůžou lépe porozumět vašim vzorům dat.

Využití a odhadované náklady

V grafu příjem dat na stránce Využití a odhadované náklady pro každý pracovní prostor se zobrazuje celkový objem odeslaných dat a počet odesílaných řešení jednotlivými řešeními za předchozích 31 dnů. Tyto informace vám pomůžou určit trendy, jako je například to, jestli je zvýšení z celkového využití dat nebo využití konkrétním řešením.

Dotazování na objemy dat z tabulky Využití

Analyzujte množství fakturovatelných dat shromážděných konkrétní službou nebo řešením. Tyto dotazy používají tabulku Využití , která shromažďuje data o využití pro každou tabulku v pracovním prostoru.

Poznámka:

Klauzule s TimeGenerated je určená pouze k zajištění toho, aby se prostředí dotazů na webu Azure Portal vrátilo za výchozích 24 hodin. Pokud používáte datový typ Využití a EndTime představuje časové intervaly, StartTime pro které se zobrazují výsledky.

Fakturovatelný objem dat podle typu za poslední měsíc

Usage 
| where TimeGenerated > ago(32d)
| where StartTime >= startofday(ago(31d)) and EndTime < startofday(now())
| where IsBillable == true
| summarize BillableDataGB = sum(Quantity) / 1000. by bin(StartTime, 1d), DataType 
| render columnchart

Fakturovatelný objem dat podle řešení a typu za poslední měsíc

Usage 
| where TimeGenerated > ago(32d)
| where StartTime >= startofday(ago(31d)) and EndTime < startofday(now())
| where IsBillable == true
| summarize BillableDataGB = sum(Quantity) / 1000 by Solution, DataType
| sort by Solution asc, DataType asc

Dotazování objemu dat z událostí přímo

Pokud potřebujete hlubší analýzu shromážděnýchdat, můžete v Log Analytics použít dotazy na protokoly. Každá tabulka v pracovním prostoru služby Log Analytics má následující standardní sloupce, které vám můžou pomoct při analýze fakturovatelných dat:

  • _IsBillable identifikuje záznamy, za které se účtují poplatky za příjem dat. Tento sloupec slouží k filtrování nefakturovatelných dat.
  • _BilledSize poskytuje velikost v bajtech záznamu.

Fakturovatelný objem dat pro konkrétní události

Pokud zjistíte, že určitý datový typ shromažďuje nadměrná data, můžete chtít analyzovat data v této tabulce a určit konkrétní záznamy, které se zvyšují. Tento příklad vyfiltruje konkrétní ID událostí v Event tabulce a pak poskytne počet pro každé ID. Tento dotaz můžete upravit pomocí sloupců z jiných tabulek.

Event
| where TimeGenerated > startofday(ago(31d)) and TimeGenerated < startofday(now()) 
| where EventID == 5145 or EventID == 5156
| where _IsBillable == true
| summarize count(), Bytes=sum(_BilledSize) by EventID, bin(TimeGenerated, 1d)

Objem dat podle prostředků Azure, skupiny prostředků nebo předplatného

Můžete analyzovat množství fakturovatelných dat shromážděných z konkrétního prostředku nebo sady prostředků. Tyto dotazy používají sloupce _ResourceId a _SubscriptionId pro data z prostředků hostovaných v Azure.

Upozorňující

Používejte vyhledávací dotazy střídmě, protože kontroly napříč datovými typy jsou náročné na provádění prostředků. Pokud nepotřebujete výsledky pro každé předplatné, skupinu prostředků nebo název prostředku, použijte tabulku Využití jako v předchozích dotazech.

Fakturovatelný objem dat podle ID prostředku za poslední celý den

find where TimeGenerated between(startofday(ago(1d))..startofday(now())) project _ResourceId, _BilledSize, _IsBillable
| where _IsBillable == true 
| summarize BillableDataBytes = sum(_BilledSize) by _ResourceId 
| sort by BillableDataBytes nulls last

Fakturovatelný objem dat podle skupiny prostředků za poslední celý den

find where TimeGenerated between(startofday(ago(1d))..startofday(now())) project _ResourceId, _BilledSize, _IsBillable
| where _IsBillable == true 
| summarize BillableDataBytes = sum(_BilledSize) by _ResourceId
| extend resourceGroup = tostring(split(_ResourceId, "/")[4] )
| summarize BillableDataBytes = sum(BillableDataBytes) by resourceGroup 
| sort by BillableDataBytes nulls last

Může být užitečné analyzovat _ResourceId:

| parse tolower(_ResourceId) with "/subscriptions/" subscriptionId "/resourcegroups/" 
    resourceGroup "/providers/" provider "/" resourceType "/" resourceName   

Fakturovatelný objem dat podle předplatného za poslední celý den

find where TimeGenerated between(startofday(ago(1d))..startofday(now())) project _BilledSize, _IsBillable, _SubscriptionId
| where _IsBillable == true 
| summarize BillableDataBytes = sum(_BilledSize) by _SubscriptionId 
| sort by BillableDataBytes nulls last

Tip

U pracovních prostorů s velkými objemy dat může být provádění dotazů, jako jsou dotazy uvedené v této části, které se dotazují na velké objemy nezpracovaných dat, možná nutné omezit na jeden den. Pokud chcete sledovat trendy v průběhu času, zvažte nastavení sestavy Power BI a použití přírůstkové aktualizace ke shromažďování objemů dat na prostředek jednou denně.

Objem dat podle počítače

Můžete analyzovat množství fakturovatelných dat shromážděných z virtuálního počítače nebo sady virtuálních počítačů. Tabulka Usage nemá členitost k zobrazení datových svazků pro konkrétní virtuální počítače, takže tyto dotazy používají operátor hledání k prohledávání všech tabulek, které obsahují název počítače. Typ Použití je vynechán, protože tento dotaz je určen pouze pro analýzu trendů dat.

Upozorňující

Používejte vyhledávací dotazy střídmě, protože kontroly napříč datovými typy jsou náročné na provádění prostředků. Pokud nepotřebujete výsledky pro každé předplatné, skupinu prostředků nebo název prostředku, použijte tabulku Využití jako v předchozích dotazech.

Fakturovatelný objem dat podle počítače za poslední celý den

find where TimeGenerated between(startofday(ago(1d))..startofday(now())) project _BilledSize, _IsBillable, Computer, Type
| where _IsBillable == true and Type != "Usage"
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| summarize BillableDataBytes = sum(_BilledSize) by  computerName 
| sort by BillableDataBytes desc nulls last

Počet fakturovatelných událostí podle počítače za poslední celý den

find where TimeGenerated between(startofday(ago(1d))..startofday(now())) project _IsBillable, Computer, Type
| where _IsBillable == true and Type != "Usage"
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| summarize eventCount = count() by computerName  
| sort by eventCount desc nulls last

Dotazování na objemy dat s výjimkou známých bezplatných datových typů

Následující dotaz vrátí měsíční objem dat v GB s výjimkou všech datových typů, které mají být bezplatné z poplatků za příjem dat:

let freeTables = dynamic([
"AppAvailabilityResults","AppSystemEvents","ApplicationInsights","AzureActivity","AzureNetworkAnalyticsIPDetails_CL",
"AzureNetworkAnalytics_CL","AzureTrafficAnalyticsInsights_CL","ComputerGroup","DefenderIoTRawEvent","Heartbeat",
"MAApplication","MAApplicationHealth","MAApplicationHealthIssues","MAApplicationInstance","MAApplicationInstanceReadiness",
"MAApplicationReadiness","MADeploymentPlan","MADevice","MADeviceNotEnrolled","MADeviceReadiness","MADriverInstanceReadiness",
"MADriverReadiness","MAProposedPilotDevices","MAWindowsBuildInfo","MAWindowsCurrencyAssessment",
"MAWindowsCurrencyAssessmentDailyCounts","MAWindowsDeploymentStatus","NTAIPDetails_CL","NTANetAnalytics_CL",
"OfficeActivity","Operation","SecurityAlert","SecurityIncident","UCClient","UCClientReadinessStatus",
"UCClientUpdateStatus","UCDOAggregatedStatus","UCDOStatus","UCDeviceAlert","UCServiceUpdateStatus","UCUpdateAlert",
"Usage","WUDOAggregatedStatus","WUDOStatus","WaaSDeploymentStatus","WaaSInsiderStatus","WaaSUpdateStatus"]);
Usage 
| where DataType !in (freeTables) 
| where TimeGenerated > ago(30d) 
| summarize MonthlyGB=sum(Quantity)/1000

Pokud chcete vyhledat data, která nemusí mít správně nastavenou hodnotu IsBillable (a což může vést k nesprávné fakturaci nebo konkrétně pod fakturaci), použijte tento dotaz ve vašem pracovním prostoru:

let freeTables = dynamic([
"AppAvailabilityResults","AppSystemEvents","ApplicationInsights","AzureActivity","AzureNetworkAnalyticsIPDetails_CL",
"AzureNetworkAnalytics_CL","AzureTrafficAnalyticsInsights_CL","ComputerGroup","DefenderIoTRawEvent","Heartbeat",
"MAApplication","MAApplicationHealth","MAApplicationHealthIssues","MAApplicationInstance","MAApplicationInstanceReadiness",
"MAApplicationReadiness","MADeploymentPlan","MADevice","MADeviceNotEnrolled","MADeviceReadiness","MADriverInstanceReadiness",
"MADriverReadiness","MAProposedPilotDevices","MAWindowsBuildInfo","MAWindowsCurrencyAssessment",
"MAWindowsCurrencyAssessmentDailyCounts","MAWindowsDeploymentStatus","NTAIPDetails_CL","NTANetAnalytics_CL",
"OfficeActivity","Operation","SecurityAlert","SecurityIncident","UCClient","UCClientReadinessStatus",
"UCClientUpdateStatus","UCDOAggregatedStatus","UCDOStatus","UCDeviceAlert","UCServiceUpdateStatus","UCUpdateAlert",
"Usage","WUDOAggregatedStatus","WUDOStatus","WaaSDeploymentStatus","WaaSInsiderStatus","WaaSUpdateStatus"]);
Usage 
| where DataType !in (freeTables) 
| where TimeGenerated > ago(30d) 
| where IsBillable == false 
| summarize MonthlyPotentialUnderbilledGB=sum(Quantity)/1000 by DataType

Dotazování na běžné datové typy

Pokud zjistíte, že u konkrétního datového typu máte nadměrná fakturovatelná data, budete možná muset provést dotaz pro analýzu dat v této tabulce. Následující dotazy poskytují ukázky pro některé běžné datové typy:

Řešení zabezpečení

SecurityEvent 
| summarize AggregatedValue = count() by EventID
| order by AggregatedValue desc nulls last

Řešení pro správu protokolů

Usage 
| where Solution == "LogManagement" and iff(isnotnull(toint(IsBillable)), IsBillable == true, IsBillable == "true") == true 
| summarize AggregatedValue = count() by DataType
| order by AggregatedValue desc nulls last

Datový typ Perf

Perf 
| summarize AggregatedValue = count() by CounterPath
Perf 
| summarize AggregatedValue = count() by CounterName

Datový typ Event

Event 
| summarize AggregatedValue = count() by EventID
Event 
| summarize AggregatedValue = count() by EventLog, EventLevelName

Datový typ Syslog

Syslog 
| summarize AggregatedValue = count() by Facility, SeverityLevel
Syslog 
| summarize AggregatedValue = count() by ProcessName

Datový typ AzureDiagnostics

AzureDiagnostics 
| summarize AggregatedValue = count() by ResourceProvider, ResourceId

Data Application Insights

Existují dva přístupy ke zkoumání množství dat shromážděných pro Přehledy aplikace v závislosti na tom, jestli máte klasickou aplikaci nebo aplikaci založenou na pracovním prostoru. _BilledSize Použijte vlastnost, která je k dispozici pro každou ingestovaná událost pro prostředky založené na pracovním prostoru i klasické prostředky. Pro klasické prostředky můžete také použít agregované informace v tabulce systemEvents .

Poznámka:

Dotazy na tabulky Přehledy aplikací, s výjimkou SystemEvents, budou fungovat pro prostředek založený na pracovním prostoru i klasické aplikace Přehledy. Zpětná kompatibilita umožňuje nadále používat starší názvy tabulek. V případě prostředku založeného na pracovním prostoru otevřete protokoly v nabídce pracovního prostoru služby Log Analytics. V případě klasického prostředku otevřete protokoly v nabídce Přehledy aplikace.

Operace závislostí generují největší objem dat za posledních 30 dnů (založené na pracovním prostoru nebo klasickém)

dependencies
| where timestamp >= startofday(ago(30d))
| summarize sum(_BilledSize) by operation_Name
| render barchart  

Denní objem dat podle typu pro tento prostředek aplikace Přehledy za posledních 7 dnů (jenom classic)

systemEvents
| where timestamp >= startofday(ago(7d)) and timestamp < startofday(now())
| where type == "Billing"
| extend BillingTelemetryType = tostring(dimensions["BillingTelemetryType"])
| extend BillingTelemetrySizeInBytes = todouble(measurements["BillingTelemetrySize"])
| summarize sum(BillingTelemetrySizeInBytes) by BillingTelemetryType, bin(timestamp, 1d)  

Pokud se chcete podívat na trendy objemu dat pro prostředky Přehledy aplikace založené na pracovním prostoru, použijte dotaz, který obsahuje všechny tabulky Přehledy aplikací. Následující dotazy používají názvy tabulek specifické pro prostředky založené na pracovních prostorech.

Denní objem dat podle typu pro všechny prostředky aplikace Přehledy v pracovním prostoru po dobu 7 dnů

union AppAvailabilityResults,
      AppBrowserTimings,
      AppDependencies,
      AppExceptions,
      AppEvents,
      AppMetrics,
      AppPageViews,
      AppPerformanceCounters,
      AppRequests,
      AppSystemEvents,
      AppTraces
| where TimeGenerated >= startofday(ago(7d)) and TimeGenerated < startofday(now())
| summarize sum(_BilledSize) by _ResourceId, bin(TimeGenerated, 1d)

Pokud se chcete podívat na trendy objemu dat pouze pro jeden prostředek Přehledy aplikace, přidejte do předchozího dotazu následující řádeksummarize:

| where _ResourceId contains "<myAppInsightsResourceName>"

Tip

U pracovních prostorů s velkými objemy dat může být potřeba dotazy, jako je předchozí, které dotazují velké objemy nezpracovaných dat, omezit na jeden den. Pokud chcete sledovat trendy v průběhu času, zvažte nastavení sestavy Power BI a použití přírůstkové aktualizace ke shromažďování objemů dat na prostředek jednou denně.

Principy uzlů odesílaných dat

Pokud nemáte nadměrná data z nějakého konkrétního zdroje, můžete mít nadměrný počet agentů, kteří odesílají data.

Počet uzlů agentů, které odesílají prezenční signál každý den v posledním měsíci

Heartbeat 
| where TimeGenerated > startofday(ago(31d))
| summarize nodes = dcount(Computer) by bin(TimeGenerated, 1d)    
| render timechart

Upozorňující

Používejte vyhledávací dotazy střídmě, protože kontroly napříč datovými typy jsou náročné na provádění prostředků. Pokud nepotřebujete výsledky pro každé předplatné, skupinu prostředků nebo název prostředku, použijte tabulku Využití jako v předchozích dotazech.

Počet uzlů odesílaných všechna data za posledních 24 hodin

find where TimeGenerated > ago(24h) project Computer
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| summarize nodes = dcount(computerName)

Objem dat odeslaný každým uzlem za posledních 24 hodin

find where TimeGenerated > ago(24h) project _BilledSize, Computer
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| summarize TotalVolumeBytes=sum(_BilledSize) by computerName

Uzly fakturované za starší cenovou úroveň pro jednotlivé uzly

Starší verze cenové úrovně pro jednotlivé uzly se účtuje za uzly s hodinovou členitostí. Také nepočítá uzly, které odesílají jenom sadu datových typů zabezpečení. Pokud chcete získat seznam počítačů, které se budou účtovat jako uzly, pokud je pracovní prostor ve starší cenové úrovni pro jednotlivé uzly, vyhledejte uzly, které odesílají fakturované datové typy, protože některé datové typy jsou bezplatné. V tomto případě použijte pole úplně vlevo plně kvalifikovaného názvu domény.

Následující dotazy vrátí počet počítačů s fakturovanými daty za hodinu. Počet jednotek na faktuře je v jednotkách měsíců uzlu, které jsou reprezentovány billableNodeMonthsPerDay v dotazu. Pokud má pracovní prostor nainstalované řešení Update Management, přidejte do seznamu v where klauzuli datové typy Update a UpdateSummary.

find where TimeGenerated >= startofday(ago(7d)) and TimeGenerated < startofday(now()) project Computer, _IsBillable, Type, TimeGenerated
| where Type !in ("SecurityAlert", "SecurityBaseline", "SecurityBaselineSummary", "SecurityDetection", "SecurityEvent", "WindowsFirewall", "MaliciousIPCommunication", "LinuxAuditLog", "SysmonEvent", "ProtectionStatus", "WindowsEvent")
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| where _IsBillable == true
| summarize billableNodesPerHour=dcount(computerName) by bin(TimeGenerated, 1h)
| summarize billableNodesPerDay = sum(billableNodesPerHour)/24., billableNodeMonthsPerDay = sum(billableNodesPerHour)/24./31.  by day=bin(TimeGenerated, 1d)
| sort by day asc

Poznámka:

Složitost skutečného fakturačního algoritmu při použití cílení řešení není v předchozím dotazu reprezentována.

Počty uzlů zabezpečení a automatizace

Počet jedinečných uzlů zabezpečení

union
(
    Heartbeat
    | where (Solutions has 'security' or Solutions has 'antimalware' or Solutions has 'securitycenter')
    | project Computer
),
(
    ProtectionStatus
    | where Computer !in (Heartbeat | project Computer)
    | project Computer
)
| distinct Computer
| project lowComputer = tolower(Computer)
| distinct lowComputer
| count

Počet jedinečných automatizačních uzlů

 ConfigurationData 
 | where (ConfigDataType == "WindowsServices" or ConfigDataType == "Software" or ConfigDataType =="Daemons") 
 | extend lowComputer = tolower(Computer) | summarize by lowComputer 
 | join (
     Heartbeat 
       | where SCAgentChannel == "Direct"
       | extend lowComputer = tolower(Computer) | summarize by lowComputer, ComputerEnvironment
 ) on lowComputer
 | summarize count() by ComputerEnvironment | sort by ComputerEnvironment asc

Pozdní příchod dat

Pokud zaznamenáte vysoké ingestování dat hlášené pomocí Usage záznamů, ale nevidíte stejné výsledky sečtení _BilledSize přímo u datového typu, je možné, že máte data s pozdním příchodem. K této situaci dochází, když se data ingestují pomocí starých časových razítek.

Agent může mít například problém s připojením a po opětovném připojení odesílat kumulovaná data. Nebo hostitel může mít nesprávný čas. V obou příkladech může dojít k zjevné nesrovnalosti mezi přijatými daty hlášenými datovým typem Využití a dotazem, který sečte _BilledSize nad nezpracovanými daty za konkrétní den určený funkcí TimeGenerated, časové razítko, kdy byla událost vygenerována.

Pokud chcete diagnostikovat problémy s pozdním příchodem dat, použijte sloupec _TimeReceived a sloupec TimeGenerated . Vlastnost _TimeReceived je čas přijetí záznamu bodem příjmu služby Azure Monitor v cloudu Azure.

Následující příklad je v reakci na velké objemy přijatých dat W3CIISLog 2. května 2021, aby bylo možné identifikovat časová razítka u těchto přijatých dat. Tento where TimeGenerated > datetime(1970-01-01) příkaz obsahuje informace o uživatelském rozhraní Log Analytics, aby se podíval na všechna data.

W3CIISLog
| where TimeGenerated > datetime(1970-01-01)
| where _TimeReceived >= datetime(2021-05-02) and _TimeReceived < datetime(2021-05-03) 
| where _IsBillable == true
| summarize BillableDataMB = sum(_BilledSize)/1.E6 by bin(TimeGenerated, 1d)
| sort by TimeGenerated asc 

Další kroky