Monitorar máquinas virtuais com o Azure Monitor: coletar dados

Este artigo faz parte do guia Monitorar máquinas virtuais e suas cargas de trabalho no Azure Monitor. Ele descreve como configurar a coleta de dados depois de implantar o Azure Monitor Agent em suas máquinas virtuais do Azure e híbridas no Azure Monitor.

Este artigo fornece orientação sobre como coletar os tipos mais comuns de telemetria de máquinas virtuais. A configuração exata escolhida depende das cargas de trabalho executadas em suas máquinas. Incluídos em cada seção estão exemplos de alertas de pesquisa de log que você pode usar com esses dados.

Nota

Este cenário descreve como implementar o monitoramento completo do seu ambiente de máquina virtual híbrida e do Azure. Para começar a monitorar sua primeira máquina virtual do Azure, consulte Monitorar máquinas virtuais do Azure.

Regras da recolha de dados

A coleta de dados do Azure Monitor Agent é definida por uma ou mais regras de coleta de dados (DCRs) armazenadas em sua assinatura do Azure e associadas às suas máquinas virtuais.

Para máquinas virtuais, os DCRs definem dados como eventos e contadores de desempenho para coletar e especificar os espaços de trabalho do Log Analytics para onde os dados devem ser enviados. O DCR também pode usar transformações para filtrar dados indesejados e adicionar colunas calculadas. Uma única máquina pode ser associada a vários DCRs, e um único DCR pode ser associado a várias máquinas. Os DCRs são entregues a todas as máquinas às quais estão associados onde o Azure Monitor Agent os processa.

Ver regras de recolha de dados

Você pode exibir os DCRs em sua assinatura do Azure em Regras de Coleta de Dados no menu Monitor no portal do Azure. Os DCRs dão suporte a outros cenários de coleta de dados no Azure Monitor, portanto, todos os seus DCRs não são necessariamente para máquinas virtuais.

Screenshot that shows DCRs in the Azure portal.

Criar regras de coleta de dados

Há vários métodos para criar DCRs dependendo do cenário de coleta de dados. Em alguns casos, o portal do Azure orienta você pela configuração. Outros cenários exigem que você edite um DCR diretamente. Quando você configura insights de VM, ele cria um DCR pré-configurado para você automaticamente. As seções a seguir identificam dados comuns a serem coletados e como configurar a coleta de dados.

Em alguns casos, talvez seja necessário editar um DCR existente para adicionar funcionalidade. Por exemplo, você pode usar o portal do Azure para criar um DCR que coleta eventos do Windows ou Syslog. Em seguida, você deseja adicionar uma transformação a esse DCR para filtrar colunas nos eventos que não deseja coletar.

À medida que seu ambiente amadurece e cresce em complexidade, você deve implementar uma estratégia para organizar seus DCRs para ajudar no gerenciamento deles. Para obter orientação sobre diferentes estratégias, consulte Práticas recomendadas para criação e gerenciamento de regras de coleta de dados no Azure Monitor.

Controlar os custos

Como o custo do Azure Monitor depende da quantidade de dados coletados, certifique-se de que você não esteja coletando mais do que o necessário para atender aos requisitos de monitoramento. Sua configuração é um equilíbrio entre seu orçamento e a quantidade de informações que você deseja sobre a operação de suas máquinas virtuais.

Gorjeta

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

Uma máquina virtual típica gera entre 1 GB e 3 GB de dados por mês. Esse tamanho de dados depende da configuração da máquina, das cargas de trabalho em execução nela e da configuração de seus DCRs. Antes de configurar a coleta de dados em todo o ambiente de máquina virtual, comece a coleta em algumas máquinas representativas para prever melhor os custos esperados quando implantados em seu ambiente. Use as informações do espaço de trabalho do Log Analytics ou as consultas de log no volume de dados por computador para determinar a quantidade de dados faturáveis coletados para cada máquina e ajustar de acordo.

Avalie os dados coletados e filtre os que atendam aos seguintes critérios para reduzir seus custos. Cada fonte de dados coletada pode ter um método diferente para filtrar dados indesejados. Consulte as seções abaixo para obter detalhes sobre cada uma das fontes de dados comuns.

  • Não utilizado para alertas.
  • Nenhum valor forense ou diagnóstico conhecido.
  • Não exigido pelos reguladores.
  • Não é usado em nenhum painel ou pasta de trabalho.

Você também pode usar transformações para implementar filtragem mais granular e também para filtrar dados de colunas que fornecem pouco valor. Por exemplo, você pode ter um evento do Windows que é valioso para alertas, mas inclui colunas com dados redundantes ou excessivos. Você pode criar uma transformação que permita que o evento seja coletado, mas remove esses dados excessivos.

Filtre os dados o máximo possível antes de serem enviados para o Azure Monitor para evitar uma possível cobrança por filtrar muitos dados usando transformações. Use transformações para filtragem de registros usando lógica complexa e para filtrar colunas com dados que você não precisa.

Recolha de dados por defeito

O Azure Monitor executa automaticamente a seguinte recolha de dados sem exigir qualquer outra configuração.

Métricas de plataforma

As métricas de plataforma para máquinas virtuais do Azure incluem métricas de host importantes, como CPU, rede e utilização de disco. Podem ser:

Registo de atividades

O registo de atividades é recolhido automaticamente. Inclui a atividade recente da máquina, como quaisquer alterações de configuração e quando foi interrompida e iniciada. Você pode exibir as métricas da plataforma e o log de atividades coletados para cada host de máquina virtual no portal do Azure.

Você pode exibir o registro de atividades de uma máquina individual ou de todos os recursos em uma assinatura. Crie uma configuração de diagnóstico para enviar esses dados para o mesmo espaço de trabalho do Log Analytics usado pelo Azure Monitor Agent para analisá-los com os outros dados de monitoramento coletados para a máquina virtual. Não há custo para ingestão ou retenção de dados de registro de atividades.

Informações de disponibilidade da VM no Azure Resource Graph

Com o Azure Resource Graph, você pode usar a mesma Linguagem de Consulta Kusto usada em consultas de log para consultar seus recursos do Azure em escala com filtragem, agrupamento e classificação complexos por propriedades de recurso. Você pode usar anotações de integridade da VM no Gráfico de Recursos para atribuição detalhada de falhas e análise de tempo de inatividade.

Para obter informações sobre quais dados são coletados e como exibi-los, consulte Monitorar máquinas virtuais com o Azure Monitor: analisar dados de monitoramento.

Informações sobre VM

Quando você habilita insights de VM, ele cria um DCR com o prefixo MSVMI- que coleta as seguintes informações. Você pode usar esse mesmo DCR com outras máquinas em vez de criar uma nova para cada VM.

  • Contadores de desempenho comuns para o sistema operacional cliente são enviados para a tabela InsightsMetrics no espaço de trabalho Log Analytics. Os nomes dos contadores são normalizados para usar o mesmo nome comum, independentemente do tipo de sistema operacional. Para obter uma lista de contadores de desempenho coletados, consulte Como consultar logs de insights de VM.

  • Se você especificou processos e dependências a serem coletados, as tabelas a seguir serão preenchidas:

    • VMBoundPort: Tráfego para portas de servidor abertas na máquina
    • VMComputer: Dados de inventário para a máquina
    • VMConnection: Tráfego para conexões de entrada e saída de e para a máquina
    • VMProcess: Processos em execução na máquina

Por padrão, os insights de VM não permitirão a coleta de processos e dependências para economizar custos de ingestão de dados. Esses dados são necessários para o recurso Mapa e também implantam o agente de dependência na máquina. Habilite esta coleção se quiser usar esse recurso.

Coletar eventos do Windows e do Syslog

O sistema operacional e os aplicativos em máquinas virtuais geralmente gravam no log de eventos do Windows ou no Syslog. Você pode criar um alerta assim que um único evento for encontrado ou aguardar uma série de eventos correspondentes dentro de uma janela de tempo específica. Você também pode coletar eventos para análise posterior, como a identificação de tendências específicas ao longo do tempo ou para executar a solução de problemas após a ocorrência de um problema.

Para obter orientação sobre como criar um DCR para coletar eventos do Windows e do Syslog, consulte Coletar eventos e contadores de desempenho de máquinas virtuais com o Azure Monitor Agent. Você pode criar rapidamente um DCR usando os logs de eventos mais comuns do Windows e os recursos do Syslog filtrando por nível de evento.

Para uma filtragem mais granular por critérios como ID de evento, você pode criar um filtro personalizado usando consultas XPath. Você pode filtrar ainda mais os dados coletados editando o DCR para adicionar uma transformação.

Use as diretrizes a seguir como um ponto de partida recomendado para a coleta de eventos. Modifique as configurações de DCR para filtrar eventos desnecessários e adicionar outros eventos, dependendo de suas necessidades.

Source Estratégia
Eventos do Windows Colete pelo menos eventos Críticos, de Erro e de Aviso para os logs do Sistema e do Aplicativo para dar suporte ao alerta. Adicione eventos de informações para analisar tendências e dar suporte à solução de problemas. Eventos detalhados raramente são úteis e normalmente não devem ser coletados.
Eventos do Syslog Colete pelo menos LOG_WARNING eventos para cada instalação para dar suporte a alertas. Adicione eventos de informações para analisar tendências e dar suporte à solução de problemas. LOG_DEBUG eventos raramente são úteis e normalmente não devem ser coletados.

Consultas de log de exemplo: eventos do Windows

Query Description
Event Todos os eventos do Windows
Event | where EventLevelName == "Error" Todos os eventos do Windows com gravidade de erro
Event | summarize count() by Source Contagem de eventos do Windows por origem
Event | where EventLevelName == "Error" | summarize count() by Source Contagem de eventos de erro do Windows por origem

Consultas de log de exemplo: eventos Syslog

Query Description
Syslog Todos os Syslogs
Syslog | where SeverityLevel == "error" Todos os registos Syslog com gravidade de erro
Syslog | summarize AggregatedValue = count() by Computer Contagem de registros Syslog por computador
Syslog | summarize AggregatedValue = count() by Facility Contagem de registros Syslog por instalação

Recolher contadores de desempenho

Os dados de desempenho do cliente podem ser enviados para o Azure Monitor Metrics ou para o Azure Monitor Logs, e normalmente você os envia para ambos os destinos. Se você habilitou os insights de VM, um conjunto comum de contadores de desempenho será coletado em Logs para dar suporte a seus gráficos de desempenho. Não é possível modificar esse conjunto de contadores, mas é possível criar outros DCRs para coletar mais contadores e enviá-los para destinos diferentes.

Há várias razões pelas quais você gostaria de criar um DCR para coletar o desempenho dos convidados:

  • Você não está usando insights de VM, portanto, os dados de desempenho do cliente ainda não estão sendo coletados.
  • Colete outros contadores de desempenho que as informações da VM não estão coletando.
  • Colete contadores de desempenho de outras cargas de trabalho em execução no seu cliente.
  • Envie dados de desempenho para o Azure Monitor Metrics onde você pode usá-los com o explorador de métricas e alertas de métricas.

Para obter orientação sobre como criar um DCR para coletar contadores de desempenho, consulte Coletar eventos e contadores de desempenho de máquinas virtuais com o Azure Monitor Agent. Você pode criar rapidamente um DCR usando os contadores mais comuns. Para uma filtragem mais granular por critérios como ID de evento, você pode criar um filtro personalizado usando consultas XPath.

Nota

Você pode optar por combinar desempenho e coleta de eventos no mesmo DCR.

Destino Description
Métricas As métricas de host são enviadas automaticamente para o Azure Monitor Metrics. Você pode usar um DCR para coletar métricas do cliente para que elas possam ser analisadas junto com o explorador de métricas ou usadas com alertas de métricas. Estes dados são armazenados durante 93 dias.
Registos Os dados de desempenho armazenados nos Logs do Azure Monitor podem ser armazenados por períodos estendidos. Os dados podem ser analisados juntamente com os dados do seu evento usando consultas de log com o Log Analytics ou alertas de pesquisa de log. Você também pode correlacionar dados usando lógica complexa em várias máquinas, regiões e assinaturas.

Os dados de desempenho são enviados para as seguintes tabelas:
- Insights de VM: InsightsMetrics
- Outros dados de desempenho: Perf

Consultas de log de exemplo

Os exemplos a seguir usam a Perf tabela com dados de desempenho personalizados. Para obter informações sobre dados de desempenho coletados por insights de VM, consulte Como consultar logs de insights de VM.

Query Description
Perf Todos os dados de desempenho
Perf | where Computer == "MyComputer" Todos os dados de desempenho de um computador específico
Perf | where CounterName == "Current Disk Queue Length" Todos os dados de desempenho para um contador específico
Perf | where ObjectName == "Processor" and CounterName == "% Processor Time" and InstanceName == "_Total" | summarize AVGCPU = avg(CounterValue) by Computer Utilização média da CPU em todos os computadores
Perf | where CounterName == "% Processor Time" | summarize AggregatedValue = max(CounterValue) by Computer Utilização máxima da CPU em todos os computadores
Perf | where ObjectName == "LogicalDisk" and CounterName == "Current Disk Queue Length" and Computer == "MyComputerName" | summarize AggregatedValue = avg(CounterValue) by InstanceName Comprimento médio da fila de disco atual em todas as instâncias de um determinado computador
Perf | where CounterName == "Disk Transfers/sec" | summarize AggregatedValue = percentile(CounterValue, 95) by Computer Percentil 95 de transferências de disco/s em todos os computadores
Perf | where CounterName == "% Processor Time" and InstanceName == "_Total" | summarize AggregatedValue = avg(CounterValue) by bin(TimeGenerated, 1h), Computer Média horária de utilização da CPU em todos os computadores
Perf | where Computer == "MyComputer" and CounterName startswith_cs "%" and InstanceName == "_Total" | summarize AggregatedValue = percentile(CounterValue, 70) by bin(TimeGenerated, 1h), CounterName Percentil 70 por hora de cada contador % por cento para um determinado computador
Perf | where CounterName == "% Processor Time" and InstanceName == "_Total" and Computer == "MyComputer" | summarize ["min(CounterValue)"] = min(CounterValue), ["avg(CounterValue)"] = avg(CounterValue), ["percentile75(CounterValue)"] = percentile(CounterValue, 75), ["max(CounterValue)"] = max(CounterValue) by bin(TimeGenerated, 1h), Computer Utilização horária média, mínima, máxima e percentil 75 da CPU para um computador específico
Perf | where ObjectName == "MSSQL$INST2:Databases" and InstanceName == "master" Todos os dados de desempenho do objeto de desempenho Database para o banco de dados mestre da instância nomeada do SQL Server INST2.
Perf | where TimeGenerated >ago(5m) | where ObjectName == "Process" and InstanceName != "_Total" and InstanceName != "Idle" | where CounterName == "% Processor Time" | summarize cpuVal=avg(CounterValue) by Computer,InstanceName | join (Perf| where TimeGenerated >ago(5m)| where ObjectName == "Process" and CounterName == "ID Process" | summarize arg_max(TimeGenerated,*) by ProcID=CounterValue ) on Computer,InstanceName | sort by TimeGenerated desc | summarize AvgCPU = avg(cpuVal) by InstanceName,ProcID Média da CPU nos últimos 5 minutos para cada ID de processo.

Coletar logs de texto

Alguns aplicativos gravam eventos gravados em um log de texto armazenado na máquina virtual. Crie uma tabela personalizada e DCR para coletar esses dados. Você define o local do log de texto, sua configuração detalhada e o esquema da tabela personalizada. Há um custo para a ingestão e retenção desses dados no espaço de trabalho.

Consultas de log de exemplo

Os nomes das colunas usados aqui são apenas exemplos. Os nomes das colunas do seu log provavelmente serão diferentes.

Query Description
MyApp_CL | summarize count() by code Conte o número de eventos por código.
MyApp_CL | where status == "Error" | summarize AggregatedValue = count() by Computer, bin(TimeGenerated, 15m) Crie uma regra de alerta em qualquer evento de erro.

Coletar logs do IIS

O IIS em execução em máquinas Windows grava logs em um arquivo de texto. Configure a coleta de logs do IIS usando Coletar logs do IIS com o Azure Monitor Agent. Há um custo para a ingestão e retenção desses dados no espaço de trabalho.

Os registros do log do IIS são armazenados na tabela W3CIISLog no espaço de trabalho do Log Analytics. Há um custo para a ingestão e retenção desses dados no espaço de trabalho.

Consultas de log de exemplo

Query Description
W3CIISLog | where csHost=="www.contoso.com" | summarize count() by csUriStem Conte as entradas de log do IIS por URL para o host www.contoso.com.
W3CIISLog | summarize sum(csBytes) by Computer Analise o total de bytes recebidos por cada máquina IIS.

Monitorar um serviço ou daemon

Para monitorar o status de um serviço do Windows ou daemon do Linux, habilite a solução de Controle de Alterações e Inventário na Automação do Azure.

O Azure Monitor não tem capacidade por si só para monitorar o status de um serviço ou daemon. Existem alguns métodos possíveis a serem usados, como procurar eventos no log de eventos do Windows, mas esse método não é confiável. Você também pode procurar o processo associado ao serviço em execução na máquina na tabela VMProcess preenchida por insights de VM. Esta tabela só é atualizada a cada hora, o que normalmente não é suficiente se você quiser usar esses dados para alertas.

Nota

A solução de Controle e Análise de Alterações é diferente do recurso Análise de Alterações nos insights de VM. Esta funcionalidade está em pré-visualização pública e ainda não está incluída neste cenário.

Para obter diferentes opções para habilitar a solução de controle de alterações em suas máquinas virtuais, consulte Habilitar controle de alterações e inventário. Esta solução inclui métodos para configurar máquinas virtuais em escala. Tem de criar uma conta de Automação do Azure para suportar a solução.

Quando você habilita o Controle de Alterações e o Inventário, duas novas tabelas são criadas no espaço de trabalho do Log Analytics. Use essas tabelas para consultas de logs e regras de alerta de pesquisa de log.

Table Description
ConfiguraçãoAlterar Alterações nos dados de configuração no convidado
ConfigurationData Último estado relatado para dados de configuração no convidado

Consultas de log de exemplo

  • Liste todos os serviços e daemons iniciados recentemente.

    ConfigurationChange
    | where ConfigChangeType == "Daemons" or ConfigChangeType == "WindowsServices"
    | where SvcState == "Running"
    | sort by Computer, SvcName
    
  • Alertar quando um serviço específico parar. Use essa consulta em uma regra de alerta de pesquisa de log.

    ConfigurationData
    | where SvcName == "W3SVC" 
    | where SvcState == "Stopped"
    | where ConfigDataType == "WindowsServices"
    | where SvcStartupType == "Auto"
    | summarize AggregatedValue = count() by Computer, SvcName, SvcDisplayName, SvcState, bin(TimeGenerated, 15m)
    
  • Alertar quando um de um conjunto de serviços parar. Use essa consulta em uma regra de alerta de pesquisa de log.

    let services = dynamic(["omskd","cshost","schedule","wuauserv","heathservice","efs","wsusservice","SrmSvc","CertSvc","wmsvc","vpxd","winmgmt","netman","smsexec","w3svc","sms_site_vss_writer","ccmexe","spooler","eventsystem","netlogon","kdc","ntds","lsmserv","gpsvc","dns","dfsr","dfs","dhcp","DNSCache","dmserver","messenger","w32time","plugplay","rpcss","lanmanserver","lmhosts","eventlog","lanmanworkstation","wnirm","mpssvc","dhcpserver","VSS","ClusSvc","MSExchangeTransport","MSExchangeIS"]);
    ConfigurationData
    | where ConfigDataType == "WindowsServices"
    | where SvcStartupType == "Auto"
    | where SvcName in (services)
    | where SvcState == "Stopped"
    | project TimeGenerated, Computer, SvcName, SvcDisplayName, SvcState
    | summarize AggregatedValue = count() by Computer, SvcName, SvcDisplayName, SvcState, bin(TimeGenerated, 15m)
    

Monitorar uma porta

O monitoramento de portas verifica se uma máquina está escutando em uma porta específica. Descrevem-se aqui duas estratégias potenciais para a monitorização dos portos.

Tabelas do agente de dependência

Se você estiver usando insights de VM com a coleta de Processos e dependências habilitada, poderá usar o VMConnection e o VMBoundPort para analisar conexões e portas na máquina. A VMBoundPort tabela é atualizada a cada minuto com cada processo em execução no computador e a porta em que ele está escutando. Você pode criar um alerta de pesquisa de log semelhante ao alerta de pulsação ausente para localizar processos que pararam ou para alertar quando a máquina não está escutando em uma porta específica.

  • Analise a contagem de portas abertas em suas VMs para avaliar quais VMs têm vulnerabilidades de configuração e segurança.

    VMBoundPort
    | where Ip != "127.0.0.1"
    | summarize by Computer, Machine, Port, Protocol
    | summarize OpenPorts=count() by Computer, Machine
    | order by OpenPorts desc
    
  • Liste as portas acopladas em suas VMs para avaliar quais VMs têm vulnerabilidades de configuração e segurança.

    VMBoundPort
    | distinct Computer, Port, ProcessName
    
  • Analise a atividade da rede por porta para determinar como seu aplicativo ou serviço está configurado.

    VMBoundPort
    | where Ip != "127.0.0.1"
    | summarize BytesSent=sum(BytesSent), BytesReceived=sum(BytesReceived), LinksEstablished=sum(LinksEstablished), LinksTerminated=sum(LinksTerminated), arg_max(TimeGenerated, LinksLive) by Machine, Computer, ProcessName, Ip, Port, IsWildcardBind
    | project-away TimeGenerated
    | order by Machine, Computer, Port, Ip, ProcessName
    
  • Analise as tendências de bytes enviados e recebidos para suas VMs.

    VMConnection
    | summarize sum(BytesSent), sum(BytesReceived) by bin(TimeGenerated,1hr), Computer
    | order by Computer desc
    | render timechart
    
  • Use falhas de conexão ao longo do tempo para determinar se a taxa de falha está estável ou mudando.

    VMConnection
    | where Computer == <replace this with a computer name, e.g. 'acme-demo'>
    | extend bythehour = datetime_part("hour", TimeGenerated)
    | project bythehour, LinksFailed
    | summarize failCount = count() by bythehour
    | sort by bythehour asc
    | render timechart
    
  • Vincule tendências de status para analisar o comportamento e o status da conexão de uma máquina.

    VMConnection
    | where Computer == <replace this with a computer name, e.g. 'acme-demo'>
    | summarize  dcount(LinksEstablished), dcount(LinksLive), dcount(LinksFailed), dcount(LinksTerminated) by bin(TimeGenerated, 1h)
    | render timechart
    

Gestor de Ligações

O recurso Monitor de Conexão do Inspetor de Rede é usado para testar conexões com uma porta em uma máquina virtual. Um teste verifica se a máquina está escutando na porta e se está acessível na rede.

O Connection Manager requer a extensão Network Watcher na máquina cliente que inicia o teste. Ele não precisa ser instalado na máquina que está sendo testada. Para obter mais informações, consulte Tutorial: Monitorar a comunicação de rede usando o portal do Azure.

Há um custo extra para o Connection Manager. Para obter mais informações, consulte Preços do Inspetor de Rede.

Executar um processo em uma máquina local

O monitoramento de algumas cargas de trabalho requer um processo local. Um exemplo é um script do PowerShell que é executado na máquina local para se conectar a um aplicativo e coletar ou processar dados. Você pode usar o Hybrid Runbook Worker, que faz parte da Automação do Azure, para executar um script do PowerShell local. Não há cobrança direta para o Hybrid Runbook Worker, mas há um custo para cada runbook que ele usa.

O runbook pode acessar quaisquer recursos na máquina local para coletar os dados necessários. Ele não pode enviar dados diretamente para o Azure Monitor ou criar um alerta. Para criar um alerta, peça ao runbook que escreva uma entrada em um log personalizado. Em seguida, configure esse log para ser coletado pelo Azure Monitor. Crie uma regra de alerta de pesquisa de log que seja acionada nessa entrada de log.

Próximos passos