Partilhar via


Analisar o uso em um espaço de trabalho do Log Analytics

Os custos do Azure Monitor podem variar significativamente com base no volume de dados que está sendo coletado em seu espaço de trabalho do Log Analytics. Esse volume é afetado pelo conjunto de soluções que usam o espaço de trabalho e pela quantidade de dados que cada solução coleta.

Este artigo fornece orientação sobre como analisar os dados coletados para ajudar a controlar os custos de ingestão de dados. Ajuda-te a:

  • Determine a causa do uso maior do que o esperado.
  • Preveja seus custos à medida que monitora mais recursos e configura diferentes recursos do Azure Monitor.

Captura de tela que mostra a saída de uma consulta de exemplo no Log Analytics.

Gorjeta

Para obter estratégias para reduzir os custos do Azure Monitor, consulte Otimização de custos e Azure Monitor.

Causas para uso acima do esperado

Cada espaço de trabalho do Log Analytics é cobrado como um serviço separado e contribui para a fatura da sua subscrição do Azure. A quantidade de ingestão de dados pode ser considerável, dependendo de:

Um aumento inesperado em qualquer um desses fatores pode resultar em maiores encargos pela retenção de dados. O restante deste artigo fornece métodos para detetar tal situação e, em seguida, analisar os dados coletados para identificar e mitigar a fonte do aumento do uso.

Enviar alerta quando a coleta de dados for alta

Para evitar contas inesperadas, deverá ser avisado de forma proativa sempre que tiver uma utilização excessiva. A notificação permite-lhe resolver quaisquer anomalias potenciais antes do final do seu período de faturação.

O exemplo a seguir é uma regra de alerta de pesquisa de logs que envia um alerta se o volume de dados faturáveis ingerido nas últimas 24 horas for superior a 50 GB. Modifique a definição de Alert Logic para usar um limite diferente com base no uso esperado no ambiente. Você também pode aumentar a frequência para verificar o uso várias vezes todos os dias, mas essa opção resultará em uma cobrança mais alta para a regra de alerta.

Configuração Valor
Âmbito de aplicação
Âmbito de aplicação Selecione a sua área de trabalho do Log Analytics.
Condição
Pergunta Usage \| where IsBillable \| summarize DataGB = sum(Quantity / 1000)
Medida Medida: DataGB
Tipo de agregação: Total
Granularidade de agregação: 1 dia
Lógica de alerta Operador: Maior que
Valor limite: 50
Frequência da avaliação: 1 dia
Ações Selecione ou adicione um grupo de ações para notificá-lo quando o limite for excedido.
Detalhes
Gravidade Aviso
Nome da regra de alerta Volume de dados faturável superior a 50 GB em 24 horas.

Análise de uso no Azure Monitor

Inicie sua análise com as ferramentas existentes no Azure Monitor. Essas ferramentas não exigem configuração e, muitas vezes, podem fornecer as informações de que você precisa com o mínimo de esforço. Se você precisar de uma análise mais profunda dos dados coletados do que os recursos existentes do Azure Monitor, use qualquer uma das seguintes consultas de log no Log Analytics.

Informações da Área de Trabalho do Log Analytics

O Log Analytics Workspace Insights fornece uma compreensão rápida dos dados em seu espaço de trabalho. Por exemplo, você pode determinar:

  • Tabelas de dados que estão ingestindo o maior volume de dados da tabela principal.
  • Principais recursos que contribuem com dados.
  • Tendência de ingestão de dados.

Consulte a guia Uso para obter um detalhamento da ingestão por solução e tabela. Essas informações podem ajudá-lo a identificar rapidamente as tabelas que contribuem para a maior parte do volume de dados. A guia também mostra a tendência da coleta de dados ao longo do tempo. Você pode determinar se a coleta de dados aumentou constantemente ao longo do tempo ou aumentou repentinamente em resposta a uma alteração de configuração.

Selecione Consultas adicionais para consultas pré-criadas que ajudam a entender melhor seus padrões de dados.

Utilização e custos estimados

O gráfico Ingestão de dados por solução na página Uso e custos estimados para cada espaço de trabalho mostra o volume total de dados enviados e quanto está sendo enviado por cada solução nos 31 dias anteriores. Essas informações ajudam a determinar tendências, como se algum aumento é decorrente do uso geral de dados ou do uso por uma solução específica.

Consultando volumes de dados da tabela de Utilização

Analise a quantidade de dados faturáveis coletados por um determinado serviço ou solução. Essas consultas usam a tabela Uso que coleta dados de uso para cada tabela no espaço de trabalho.

Nota

A cláusula com TimeGenerated é apenas para garantir que a experiência de consulta no portal do Azure olhe para trás além das 24 horas padrão. Quando utiliza o tipo de dados Uso, StartTime e EndTime representam os intervalos de tempo para os quais os resultados são apresentados.

Volume de dados faturáveis por tipo no último mês

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 de dados faturáveis por solução e tipo no último mês

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

Consulte Consultas para a tabela de Uso para mais exemplos de consultas.

Consultando o volume de dados dos eventos diretamente

Você pode usar consultas de log no Log Analytics se precisar de uma análise mais profunda dos dados coletados. Cada tabela em um espaço de trabalho do Log Analytics tem as seguintes colunas padrão que podem ajudá-lo a analisar dados faturáveis:

  • _IsBillable identifica registos para os quais existe uma taxa de ingestão. Use esta coluna para filtrar dados não faturáveis.
  • _BilledSize fornece o tamanho em bytes do registro.

Volume de dados faturável para eventos específicos

Se você achar que um determinado tipo de dados está coletando dados excessivos, convém analisar os dados nessa tabela para determinar registros específicos que estão aumentando. Este exemplo filtra IDs de evento específicas na Event tabela e, em seguida, fornece uma contagem para cada ID. Você pode modificar essa consulta usando as colunas de outras tabelas.

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)

Consulte Consultas para a tabela Evento para obter mais exemplos de consultas.

Volume de dados por recurso do Azure, grupo de recursos ou assinatura

Você pode analisar a quantidade de dados faturáveis coletados de um determinado recurso ou conjunto de recursos. Essas consultas usam as colunas _ResourceId e _SubscriptionId para dados de recursos hospedados no Azure.

Aviso

Use consultas de localização com moderação porque as verificações entre tipos de dados consomem muitos recursos para serem executadas. Se você não precisar de resultados por assinatura, grupo de recursos ou nome de recurso, use a tabela Uso como nas consultas anteriores.

Volume de dados faturáveis por ID de recurso para o último dia 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 de dados faturáveis por grupo de recursos para o último dia 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

Pode ser útil analisar _ResourceId:

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

Volume de dados faturáveis por assinatura para o último dia 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

Gorjeta

Para espaços de trabalho com grandes volumes de dados, fazer consultas como as mostradas nesta seção, que consultam grandes volumes de dados brutos, pode precisar ser restrito a um único dia. Para acompanhar as tendências ao longo do tempo, considere configurar um relatório do Power BI e usar a atualização incremental para coletar volumes de dados por recurso uma vez por dia.

Volume de dados por computador

Você pode analisar a quantidade de dados faturáveis coletados de uma máquina virtual ou de um conjunto de máquinas virtuais. A tabela Uso não tem a granularidade necessária para mostrar volumes de dados para máquinas virtuais específicas, portanto, essas consultas usam o operador find para pesquisar todas as tabelas que incluem um nome de computador. O tipo Uso é omitido porque essa consulta é apenas para análise de tendências de dados.

Aviso

Use consultas de localização com moderação porque as verificações entre tipos de dados consomem muitos recursos para serem executadas. Se você não precisar de resultados por assinatura, grupo de recursos ou nome de recurso, use a tabela Uso como nas consultas anteriores.

Volume de dados facturável de cada computador do último dia 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

Contagem de eventos faturáveis por computador para o último dia 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

Consultando tipos de dados comuns

Se você achar que tem dados faturáveis excessivos para um tipo de dados específico, talvez seja necessário executar uma consulta para analisar os dados nessa tabela. As consultas a seguir fornecem exemplos para alguns tipos de dados comuns:

Solução de Segurança

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

Consulte Consultas para a tabela SecurityEvent para obter mais exemplos de consultas.

Solução de Gestão de Registos

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

Consulte Consultas para a tabela de Uso para mais exemplos de consultas.

Tipo de dados de Desempenho

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

Consulte Consultas para a tabela Perf para obter mais exemplos de consultas.

Tipo de dados de Evento

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

Consulte Consultas para a tabela Evento para obter mais exemplos de consultas.

Tipo de dados de Syslog

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

Consulte Consultas para a tabela Syslog para obter mais exemplos de consultas.

Tipo de dados de AzureDiagnostics

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

Consulte Consultas para a tabela AzureDiagnostics para obter mais consultas de exemplo.

Dados do Application Insights

Há duas abordagens para investigar a quantidade de dados coletados para o Application Insights, dependendo se você tem um aplicativo clássico ou baseado em espaço de trabalho. Use a propriedade _BilledSize que está disponível em cada evento ingerido para recursos baseados em espaço de trabalho e clássicos. Você também pode usar informações agregadas na tabela systemEvents para recursos clássicos.

Nota

As consultas em tabelas do Application Insights, exceto SystemEvents, funcionam tanto para recursos baseados em área de trabalho como para os clássicos do Application Insights. A compatibilidade com versões anteriores permite que você continue a usar nomes de tabelas herdadas. Para um recurso baseado em espaço de trabalho, abra Logs no menu do espaço de trabalho do Log Analytics. Para obter um recurso clássico, abra Logs no menu Application Insights .

As operações de dependência geram o maior volume de dados nos últimos 30 dias (baseado em espaço de trabalho ou clássico)

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

Volume de dados diário por tipo para este recurso do Application Insights nos últimos 7 dias (somente clássico)

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)  

Para examinar as tendências de volume de dados para recursos do Application Insights baseados em espaço de trabalho, use uma consulta que inclua todas as tabelas do Application Insights. As consultas a seguir usam os nomes de tabelas específicos para recursos baseados em espaço de trabalho.

Volume de dados diário por tipo para todos os recursos do Application Insights em um espaço de trabalho por 7 dias

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)

Para examinar as tendências de volume de dados para apenas um único recurso do Application Insights, adicione a seguinte linha antes summarize na consulta anterior:

| where _ResourceId contains "<myAppInsightsResourceName>"

Gorjeta

Para espaços de trabalho com grandes volumes de dados, fazer consultas como a anterior, que consulta grandes volumes de dados brutos, pode precisar ser restrito a um único dia. Para acompanhar as tendências ao longo do tempo, considere configurar um relatório do Power BI e usar a atualização incremental para coletar volumes de dados por recurso uma vez por dia.

Compreender os nós que enviam dados

Se você não tiver dados excessivos de nenhuma fonte específica, poderá ter um número excessivo de agentes que estão enviando dados.

Contagem de nós de agente que estão enviando uma pulsação a cada dia no último mês

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

Consulte Consultas para a tabela Heartbeat para obter mais exemplos de consultas.

Aviso

Use consultas de localização com moderação porque as verificações entre tipos de dados consomem muitos recursos para serem executadas. Se você não precisar de resultados por assinatura, grupo de recursos ou nome de recurso, use a tabela Uso como nas consultas anteriores.

Contagem de nós que enviam quaisquer dados nas últimas 24 horas

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

Volume de dados enviados por cada nó nas últimas 24 horas

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

Nodos faturados pelo plano de preços herdado por unidade

O antiga camada de preços por nó fatura por nó com granularidade horária. Ela também não conta os nós que estão apenas enviando um conjunto de tipos de dados de segurança. Para conseguir uma lista de computadores que serão cobrados como nós, caso o espaço de trabalho esteja na camada de preços herdada Por Nó, procure nós que estão a enviar tipos de dados faturados, uma vez que alguns tipos de dados são gratuitos. Nesse caso, use o campo mais à esquerda do nome de domínio totalmente qualificado.

As consultas seguintes retornam a contagem de computadores cuja utilização de dados é faturada por hora. O número de unidades na sua fatura está em unidades de meses de nó, que é representado por billableNodeMonthsPerDay na consulta. Se o espaço de trabalho tiver a solução Update Management instalada, adicione os tipos de dados Update e UpdateSummary à lista na where cláusula.

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

Alguma complexidade no algoritmo de faturamento real quando a segmentação de solução é usada não é representada na consulta anterior.

Dados que chegam atrasados

Se você observar alta ingestão de dados relatada usando Usage registros, mas não observar os mesmos resultados somando _BilledSize diretamente no tipo de dados, é possível que você tenha dados que chegam tarde. Esta situação ocorre quando dados são ingeridos com timestamps antigos.

Por exemplo, um agente pode ter um problema de conectividade e enviar dados acumulados quando se reconecta. Ou um anfitrião pode ter uma hora incorreta. Qualquer dos exemplos pode resultar numa discrepância aparente entre os dados ingeridos relatados pelo tipo de dados Usage e uma consulta que soma _BilledSize sobre os dados brutos para um dia específico determinado por TimeGenerated, o carimbo de data/hora em que o evento foi gerado.

Para diagnosticar problemas de dados que chegam tardiamente, use a coluna _TimeReceived e a coluna TimeGerated . A _TimeReceived propriedade é a hora em que o registro foi recebido pelo ponto de ingestão do Azure Monitor na nuvem do Azure.

O exemplo a seguir é em resposta a altos volumes de dados ingeridos do W3CIISLog em 2 de maio de 2021, para identificar os carimbos de data/hora nesses dados ingeridos. A instrução where TimeGenerated > datetime(1970-01-01) é incluída para fornecer a indicação para a interface do Log Analytics examinar todos os dados.

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 

Próximos passos