Analizzare l'utilizzo in un'area di lavoro Log Analytics
I costi di Monitoraggio di Azure possono variare in modo significativo in base al volume di dati raccolti nell'area di lavoro Log Analytics. Questo volume è interessato dal set di soluzioni che usano l'area di lavoro e dalla quantità di dati raccolti da ogni soluzione. Questo articolo fornisce indicazioni sull'analisi dei dati raccolti per facilitare il controllo dei costi di inserimento dei dati. Consente di determinare la causa dell'utilizzo superiore al previsto. Consente anche di stimare i costi man mano che si monitorano più risorse e si configurano diverse funzionalità di Monitoraggio di Azure.
Suggerimento
Per le strategie per ridurre i costi di Monitoraggio di Azure, vedere Ottimizzazione dei costi e Monitoraggio di Azure.
Cause per un utilizzo superiore al previsto
Ogni area di lavoro Log Analytics viene addebitata come servizio separato e contribuisce alla fatturazione per la sottoscrizione di Azure. La quantità di inserimento dati può essere considerevole, a seconda di:
- Set di informazioni dettagliate e servizi abilitati e la relativa configurazione.
- Numero e tipo di risorse monitorate.
- Volume di dati raccolti da ogni risorsa monitorata.
Un aumento imprevisto di uno di questi fattori può comportare un aumento degli addebiti per la conservazione dei dati. Il resto di questo articolo fornisce metodi per rilevare tale situazione e quindi analizzare i dati raccolti per identificare e attenuare l'origine dell'aumento dell'utilizzo.
Inviare un avviso quando la raccolta dati è elevata
Per evitare fatture impreviste, si dovrebbe ricevere una notifica in modo proattivo ogni volta che si verifica un utilizzo eccessivo. La notifica consente di risolvere eventuali anomalie potenziali prima della fine del periodo di fatturazione.
L'esempio seguente è una regola di avviso di ricerca log che invia un avviso se il volume di dati fatturabile inserito nelle ultime 24 ore è maggiore di 50 GB. Modificare l'impostazione Logica di avviso per usare una soglia diversa in base all'utilizzo previsto nell'ambiente. È anche possibile aumentare la frequenza per controllare l'utilizzo più volte ogni giorno, ma questa opzione comporterà un addebito maggiore per la regola di avviso.
Impostazione | Valore |
---|---|
Scope | |
Ambito target | Selezionare l'area di lavoro Log Analytics. |
Condizione | |
Query | Usage | where IsBillable | summarize DataGB = sum(Quantity / 1000) |
Misura | Misura: DataGB Tipo di aggregazione: totale Granularità aggregazione: 1 giorno |
Logica avvisi | Operatore: Maggiore di Valore soglia: 50 Frequenza di valutazione: 1 giorno |
Azioni | Selezionare o aggiungere un gruppo di azioni per notificare quando viene superata la soglia. |
Dettagli | |
Gravità | Avviso |
Nome regola di avviso | Volume di dati fatturabile maggiore di 50 GB in 24 ore. |
Analisi dell'utilizzo in Monitoraggio di Azure
Avviare l'analisi con gli strumenti esistenti in Monitoraggio di Azure. Questi strumenti non richiedono alcuna configurazione e spesso forniscono le informazioni necessarie con un minimo sforzo. Se è necessaria un'analisi più approfondita dei dati raccolti rispetto alle funzionalità di Monitoraggio di Azure esistenti, usare una delle query di log seguenti in Log Analytics.
Log Analytics Workspace Insights
informazioni dettagliate sull'area di lavoro Log Analytics offre una rapida comprensione dei dati nell'area di lavoro. Ad esempio, è possibile determinare quanto riportato di seguito:
- Tabelle di dati che inseriscono la maggior parte del volume di dati nella tabella principale.
- Risorse principali che contribuiscono ai dati.
- Tendenza dell'inserimento dati.
Per una suddivisione dell'inserimento in base alla soluzione e alla tabella, vedere la scheda Utilizzo. Queste informazioni consentono di identificare rapidamente le tabelle che contribuiscono alla maggior parte del volume di dati. La scheda mostra anche la tendenza della raccolta dati nel tempo. È possibile determinare se la raccolta dati aumenta costantemente nel tempo o aumenta improvvisamente in risposta a una modifica della configurazione.
Selezionare Query aggiuntive per le query predefinite che consentono di comprendere ulteriormente i modelli di dati.
Uso e costi stimati
Il grafico Inserimento dati per soluzione nella pagina Utilizzo e costi stimati per ogni area di lavoro mostra il volume totale di dati inviati e la quantità di dati inviati da ogni soluzione nei 31 giorni precedenti. Queste informazioni consentono di determinare tendenze, ad esempio se un aumento è dovuto all'utilizzo complessivo dei dati o all'utilizzo di una determinata soluzione.
Esecuzione di query sui volumi di dati dalla tabella Utilizzo
Analizzare la quantità di dati fatturabili raccolti da un particolare servizio o soluzione. Queste query usano la tabella Utilizzo che raccoglie i dati di utilizzo per ogni tabella nell'area di lavoro.
Nota
La clausola con TimeGenerated
è solo per garantire che l'esperienza di query nel portale di Azure venga esaminata oltre le 24 ore predefinite. Quando si usa il tipo di dati Utilizzo, StartTime
e EndTime
rappresentano i bucket di tempo per i quali vengono presentati i risultati.
Volume di dati fatturabile per tipo nell'ultimo mese
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
Volume di dati fatturabile per soluzione e tipo nell'ultimo mese
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
Esecuzione diretta di query sul volume di dati dagli eventi
È possibile usare query di log in Log Analytics se è necessaria un'analisi più approfondita dei dati raccolti. Ogni tabella in un'area di lavoro Log Analytics include le colonne standard seguenti che consentono di analizzare i dati fatturabili:
- _IsBillable identifica i record per i quali è previsto un addebito per l'inserimento. Usare questa colonna per filtrare i dati non fatturabili.
- _BilledSize fornisce le dimensioni in byte del record.
Volume di dati fatturabile per eventi specifici
Se si ritiene che un tipo di dati specifico stia raccogliendo dati eccessivi, è possibile analizzare i dati in tale tabella per determinare record specifici che aumentano. Questo esempio filtra gli ID evento specifici nella tabella Event
e quindi fornisce un conteggio per ogni ID. È possibile modificare questa query usando le colonne di altre tabelle.
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)
Volume di dati per risorse di Azure, gruppo di risorse o sottoscrizione
È possibile analizzare la quantità di dati fatturabili raccolti da una determinata risorsa o un set di risorse. Queste query usano le colonne _ResourceId e _SubscriptionId per i dati delle risorse ospitate in Azure.
Avviso
Usare trova query con moderazione perché le analisi tra i tipi di dati sono risorse a elevato utilizzo da eseguire. Se non sono necessari risultati per sottoscrizione, gruppo di risorse o nome di risorsa, usare la tabella Utilizzo come nelle query precedenti.
Volume di dati fatturabile in base all'ID risorsa per l'ultimo giorno completo
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
Volume di dati fatturabile per gruppo di risorse per l'ultimo giorno completo
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
Potrebbe essere utile analizzare _ResourceId
:
| parse tolower(_ResourceId) with "/subscriptions/" subscriptionId "/resourcegroups/"
resourceGroup "/providers/" provider "/" resourceType "/" resourceName
Volume di dati fatturabile per sottoscrizione per l'ultimo giorno completo
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
Suggerimento
Per le aree di lavoro con volumi di dati di grandi dimensioni, l'esecuzione di query come quelle illustrate in questa sezione, che eseguono query su grandi volumi di dati non elaborati, potrebbe essere necessario limitare a un singolo giorno. Per tenere traccia delle tendenze nel tempo, è consigliabile configurare un report di Power BI e usare aggiornamento incrementale per raccogliere volumi di dati per risorsa una volta al giorno.
Volume dati per computer
È possibile analizzare la quantità di dati fatturabili raccolti da una macchina virtuale o da un set di macchine virtuali. Nella tabella Utilizzo non è disponibile la granularità per visualizzare i volumi di dati per macchine virtuali specifiche, pertanto queste query usano l'operatore trova per cercare tutte le tabelle che includono un nome computer. Il tipo Utilizzo viene omesso perché questa query è solo per l'analisi delle tendenze dei dati.
Avviso
Usare trova query con moderazione perché le analisi tra i tipi di dati sono risorse a elevato utilizzo da eseguire. Se non sono necessari risultati per sottoscrizione, gruppo di risorse o nome di risorsa, usare la tabella Utilizzo come nelle query precedenti.
Volume di dati fatturabile per computer per l'ultimo giorno completo
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
Conteggio degli eventi fatturabili per computer per l'ultimo giorno completo
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
Esecuzione di query per i tipi di dati comuni
Se si rileva un numero eccessivo di dati fatturabili per un determinato tipo di dati, potrebbe essere necessario eseguire una query per analizzare i dati in tale tabella. Le query seguenti forniscono esempi per alcuni tipi di dati comuni:
Soluzione Sicurezza
SecurityEvent
| summarize AggregatedValue = count() by EventID
| order by AggregatedValue desc nulls last
Soluzione Gestione log
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
Tipo di dati Perf
Perf
| summarize AggregatedValue = count() by CounterPath
Perf
| summarize AggregatedValue = count() by CounterName
Tipo di dati Event
Event
| summarize AggregatedValue = count() by EventID
Event
| summarize AggregatedValue = count() by EventLog, EventLevelName
Tipo di dati Syslog
Syslog
| summarize AggregatedValue = count() by Facility, SeverityLevel
Syslog
| summarize AggregatedValue = count() by ProcessName
Tipo di dati AzureDiagnostics
AzureDiagnostics
| summarize AggregatedValue = count() by ResourceProvider, ResourceId
Dati di Application Insights
Esistono due approcci per analizzare la quantità di dati raccolti per Application Insights, a seconda che si disponga di un'applicazione classica o basata sull'area di lavoro. Usare la proprietà _BilledSize
disponibile per ogni evento inserito sia per le risorse basate sull'area di lavoro che per le risorse classiche. È anche possibile usare informazioni aggregate nella tabella systemEvents per le risorse classiche.
Nota
Le query sulle tabelle di Application Insights, ad eccezione di SystemEvents
, funzioneranno sia per una risorsa basata sull'area di lavoro che per quella classica di Application Insights. La compatibilità con le versioni precedenti consente di continuare a usare nomi di tabella legacy. Per una risorsa basata sull'area di lavoro, aprire log nel menu Area di lavoro Log Analytics. Per una risorsa classica, aprire Log nel menu Application Insights.
Operazioni di dipendenza generano la maggior parte del volume di dati negli ultimi 30 giorni (basati sull'area di lavoro o classica)
dependencies
| where timestamp >= startofday(ago(30d))
| summarize sum(_BilledSize) by operation_Name
| render barchart
Volume di dati giornaliero per tipo per questa risorsa di Application Insights per gli ultimi 7 giorni (solo versione classica)
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)
Tendenze del volume di dati per le risorse basate sull'area di lavoro
Per esaminare le tendenze del volume di dati per risorse di Application Insights basate sull'area di lavoro, usare una query che include tutte le tabelle di Application Insights. Le query seguenti usano i nomi di tabella specifici per le risorse basate sull'area di lavoro.
Volume di dati giornaliero per tipo per tutte le risorse di Application Insights in un'area di lavoro per 7 giorni
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)
Per esaminare le tendenze del volume di dati solo per una singola risorsa di Application Insights, aggiungere la riga seguente prima di summarize
nella query precedente:
| where _ResourceId contains "<myAppInsightsResourceName>"
Suggerimento
Per le aree di lavoro con volumi di dati di grandi dimensioni, l'esecuzione di query come quella precedente, che esegue query su grandi volumi di dati non elaborati, potrebbe dover essere limitata a un singolo giorno. Per tenere traccia delle tendenze nel tempo, è consigliabile configurare un report di Power BI e usare aggiornamento incrementale per raccogliere volumi di dati per risorsa una volta al giorno.
Informazioni sui nodi che inviano dati
Se non si dispone di dati eccessivi da una determinata origine, potrebbe essere disponibile un numero eccessivo di agenti che inviano dati.
Numero di nodi agente che inviano un heartbeat ogni giorno nell'ultimo mese
Heartbeat
| where TimeGenerated > startofday(ago(31d))
| summarize nodes = dcount(Computer) by bin(TimeGenerated, 1d)
| render timechart
Avviso
Usare trova query con moderazione perché le analisi tra i tipi di dati sono risorse a elevato utilizzo da eseguire. Se non sono necessari risultati per sottoscrizione, gruppo di risorse o nome di risorsa, usare la tabella Utilizzo come nelle query precedenti.
Numero di nodi che inviano dati nelle ultime 24 ore
find where TimeGenerated > ago(24h) project Computer
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| summarize nodes = dcount(computerName)
Volume di dati inviato da ogni nodo nelle ultime 24 ore
find where TimeGenerated > ago(24h) project _BilledSize, Computer
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| summarize TotalVolumeBytes=sum(_BilledSize) by computerName
Nodi fatturati dal piano tariffario legacy per nodo
Il piano tariffario legacy per nodo fattura i nodi con granularità oraria. Non conta anche i nodi che inviano solo un set di tipi di dati di sicurezza. Per ottenere un elenco di computer che verranno fatturati come nodi se l'area di lavoro si trova nel piano tariffario legacy per nodo, cercare i nodi che inviano tipi di dati fatturati perché alcuni tipi di dati sono gratuiti. In questo caso, usare il campo più a sinistra del nome di dominio completo.
Le query seguenti restituiscono il numero di computer con dati fatturati all'ora. Il numero di unità nella fattura è espresso in unità di mesi di nodo, rappresentato da billableNodeMonthsPerDay
nella query. Se nell'area di lavoro è installata la soluzione Gestione aggiornamenti, aggiungere i tipi di dati Aggiorna e UpdateSummary all'elenco nella clausola where
.
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
Nota
Una certa complessità nell'algoritmo di fatturazione effettivo quando viene usata la destinazione della soluzione non è rappresentata nella query precedente.
Conteggi dei nodi di sicurezza e automazione
Conteggio dei nodi di sicurezza distinti
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
Numero di nodi di automazione distinti
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
Dati che arrivano in ritardo
Se si osserva un inserimento dati elevato segnalato usando i record Usage
, ma non si osservano gli stessi risultati sommando _BilledSize
direttamente sul tipo di dati, è possibile che i dati in arrivo siano in ritardo. Questa situazione si verifica quando i dati vengono inseriti con timestamp obsoleti.
Ad esempio, un agente potrebbe avere un problema di connettività e inviare dati accumulati quando si riconnette. Oppure un host potrebbe avere un tempo non corretto. Entrambi gli esempi possono causare una discrepanza apparente tra i dati inseriti segnalati dal tipo di dati Utilizzo e una query sommando _BilledSize sui dati non elaborati per un determinato giorno specificato da TimeGenerated, il timestamp quando l'evento è stato generato.
Per diagnosticare i problemi di dati in arrivo in ritardo, usare la colonna _TimeReceived e la colonna TimeGenerated. La proprietà _TimeReceived
è l'ora in cui il record è stato ricevuto dal punto di inserimento di Monitoraggio di Azure nel cloud di Azure.
L'esempio seguente è in risposta a volumi di dati inseriti elevati di dati W3CIISLog il 2 maggio 2021, per identificare i timestamp su questi dati inseriti. L'istruzione where TimeGenerated > datetime(1970-01-01)
è inclusa per fornire l'indicazione dell'interfaccia utente di Log Analytics per esaminare tutti i dati.
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
Passaggi successivi
- Per informazioni sul modo in cui vengono calcolati gli addebiti in un'area di lavoro Log Analytics e diverse opzioni di configurazione per ridurre gli addebiti, vedere Dettagli sui prezzi dei log di Monitoraggio di Azure.
- Per una descrizione dei diversi tipi di addebiti di Monitoraggio di Azure e come analizzarli nella fattura di Azure, vedere Costi e utilizzo di Monitoraggio di Azure.
- Vedere Procedure consigliate di Monitoraggio di Azure - Gestione costi per le procedure consigliate per la configurazione e la gestione di Monitoraggio di Azure per ridurre al minimo gli addebiti.
- Per informazioni sull'uso delle trasformazioni per ridurre la quantità di dati raccolti in un'area di lavoro Log Analytics filtrando record e colonne indesiderati, vedere Trasformazioni di raccolta dati in Monitoraggio di Azure (anteprima).