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 Agente do Azure Monitor em suas máquinas virtuais híbridas e do Azure no Azure Monitor.

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

Observação

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

Regras de coleta de dados

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

Para máquinas virtuais, as DCRs definem dados como eventos e contadores de desempenho para coletar e especificar os workspaces do Log Analytics para onde os dados devem ser enviados. A DCR também pode usar transformações para filtrar dados indesejados e adicionar colunas calculadas. Um único computador pode ser associado a várias DCRs e uma única DCR pode ser associada a vários computadores. As DCRs são entregues a todas os computadores associados a elas, onde o Agente do Azure Monitor as processa.

Exibir regras de coleta de dados

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

Captura de tela que mostra DCRs no portal do Azure.

Criar regras de coleta de dados

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

Em alguns casos, pode ser necessário editar uma DCR existente para adicionar funcionalidade. Por exemplo, você pode usar o portal do Azure para criar uma DCR que coleta eventos do Windows ou Syslog. Em seguida, você desejará adicionar uma transformação a essa 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 suas DCRs para ajudar no gerenciamento. Para obter orientação sobre diferentes estratégias, confira As melhores práticas 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 que você coleta, verifique se você não está coletando mais do que o necessário para atender aos seus requisitos de monitoramento. Sua configuração é um equilíbrio entre seu orçamento e a quantidade de insights que você deseja ter sobre a operação de suas máquinas virtuais.

Dica

Para ver estratégias que reduzem os custos do Azure Monitor, confira Otimização de custos e o 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 do computador, das cargas de trabalho em execução nele e da configuração de suas DCRs. Antes de configurar a coleta de dados em todo o seu ambiente de máquina virtual, comece a coleta em alguns computadores representativos para prever melhor seus custos esperados quando implantado em seu ambiente. Use os insights do workspace do Log Analytics ou as consultas de log no Volume de dados por computador para determinar a quantidade de dados cobráveis coletados para cada máquina e fazer os ajustes necessários.

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

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

Também é possível usar as transformações para implementar uma filtragem mais granular e para filtrar dados de colunas que fornecem pouco valor. Por exemplo, é possível ter um evento do Windows valioso para alertas, mas que inclui colunas com dados redundantes ou excessivos. É possível criar uma transformação que permite que o evento seja coletado, mas sem esses dados excessivos.

Filtre os dados o máximo possível antes de serem enviados para o Azure Monitor para evitar uma cobrança potencial por filtrar muitos dados usando transformações. Use transformações para filtragem de registros usando lógicas complexas e para filtrar colunas com dados desnecessários.

Coleta de dados padrão

O Azure Monitor executa automaticamente a seguinte coleta de dados sem exigir nenhuma 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 a utilização de CPU, rede e disco. Eles podem ser:

Log de atividades

O log de atividades é coletado automaticamente. Inclui a atividade recente do computador, como quaisquer alterações de configuração e quando ela 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 log de atividades de um computador individual ou de todos os recursos em uma assinatura. Crie uma configuração de diagnóstico para enviar esses dados para o mesmo workspace do Log Analytics usado pelo Agente do Azure Monitor para analisá-lo 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 log de atividades.

Informações de disponibilidade de 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 recursos. Você pode usar anotações de integridade da VM no Resource Graph 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, confira Monitorar máquinas virtuais com o Azure Monitor: analisar dados de monitoramento.

Insights de VM

Quando você habilita os insights de VM, ele cria uma DCR com o prefixo MSVMI- que coleta as seguintes informações. Você pode usar essa mesma DCR com outros computadores em vez de criar outra para cada VM.

  • Contadores de desempenho comuns para o sistema operacional cliente são enviados para a tabela InsightsMetrics no workspace do Log Analytics. Os nomes dos contadores são normalizados para usar o mesmo nome comum, independentemente do tipo de sistema operacional.

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

    • VMBoundPort: tráfego para portas de servidor abertas no computador
    • VMComputer: dados de inventário do computador
    • VMConnection: tráfego para conexões de entrada e saída do computador
    • VMProcess: processos em execução no computador

Por padrão, os insights de VM não permitem 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 no computador. Habilite esta coleção se você 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 em uma janela de tempo específica. Você também pode coletar eventos para análise posterior, como identificar tendências específicas ao longo do tempo ou para solucionar problemas após a ocorrência de um problema.

Para obter diretrizes sobre como criar um DCR para coletar eventos do Windows e do Syslog, consulte Coletar dados com o Agente do Azure Monitor. Você pode criar rapidamente uma DCR usando os logs de eventos mais comuns do Windows e os recursos de Syslog filtrando por nível de evento.

Para uma filtragem mais granular por critérios como ID do evento, crie um filtro personalizado usando consultas XPath. Você pode filtrar ainda mais os dados coletados editando a 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 seus requisitos.

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

Exemplos de consultas de log: eventos do Windows

Consulta Descrição
Event Todos os eventos do Windows
Event | where EventLevelName == "Error" Todos os eventos do Windows com severidade de erro
Event | summarize count() by Source Contagem de eventos do Windows por fonte
Event | where EventLevelName == "Error" | summarize count() by Source Contagem de eventos de erro do Windows por fonte

Consultas de log de amostra: eventos do Syslog

Consulta Descrição
Syslog Todos os Syslogs
Syslog | where SeverityLevel == "error" Todos os registros do Syslog com a severidade de erro
Syslog | summarize AggregatedValue = count() by Computer Contagem de registros do Syslog por computador
Syslog | summarize AggregatedValue = count() by Facility Contagem de registros do Syslog por recurso

Coletar contadores de desempenho

Os dados de desempenho do cliente podem ser enviados para as Métricas do Azure Monitor ou para os Logs do Azure Monitor e você normalmente 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. Você não pode modificar esse conjunto de contadores, mas pode criar outras DCRs para coletar mais contadores e enviá-los para destinos diferentes.

Há vários motivos pelos quais você deve querer criar uma DCR para coletar o desempenho do convidado:

  • Você não está usando insights de VM, ou seja, os dados de desempenho do cliente ainda não estão sendo coletados.
  • Colete outros contadores de desempenho que os insights de VM não estão coletando.
  • Coleta de contadores de desempenho de outras cargas de trabalho em execução no cliente.
  • Envie dados de desempenho para as Métricas do Azure Monitor, nas quais você pode usá-los com alertas de métricas e gerenciador de métricas.

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

Observação

Você pode optar por combinar desempenho e coleta de eventos na mesma DCR.

Destino Descrição
Métricas As métricas do host são enviadas automaticamente para as métricas do Azure Monitor. Você pode usar uma DCR para coletar métricas do cliente para que possam ser analisadas junto com o explorador de métricas ou usadas com alertas de métricas. Esses dados são armazenados por 93 dias.
Logs Os dados de desempenho armazenados nos Logs do Azure Monitor podem ser armazenados por períodos prolongados. Os dados podem ser analisados juntamente com seus dados de evento usando consultas de log com Log Analytics ou alertas de pesquisa de log. Você também pode correlacionar dados usando lógica complexa em vários computadores, 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 amostra

Os exemplos a seguir usam a tabela Perf com dados de desempenho personalizados.

Consulta Descrição
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 de 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 95º percentil 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 Por hora média 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 de 70 por hora de cada contador de porcentagem % para um computador específico
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 Por hora média, mínima, máximo e percentil de 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 de Banco de Dados 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 de CPU nos últimos 5 minutos para cada ID do processo.

Coletar logs de texto

Alguns aplicativos gravam eventos que foram gravados em um log de texto armazenado na máquina virtual. Crie uma tabela personalizada e uma 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 workspace.

Consultas de log de amostra

Os nomes das colunas usados aqui são apenas exemplos. É provável que os nomes de coluna para seu o log sejam diferentes.

Consulta Descrição
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 no Windows gravam logs em um arquivo de texto. Configure a coleta de logs do IIS usando Coletar logs do IIS com o Agente do Azure Monitor. Há um custo para a ingestão e retenção desses dados no workspace.

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

Consultas de log de amostra

Consulta Descrição
W3CIISLog | where csHost=="www.contoso.com" | summarize count() by csUriStem Conte as entradas de log dos IIS por URL para o host www.contoso.com.
W3CIISLog | summarize sum(csBytes) by Computer Revise o total de bytes recebidos por cada computador dos IIS.

Monitorar um serviço ou daemon

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

O Azure Monitor não tem capacidade autônoma de monitorar o status de um serviço ou daemon. Há alguns métodos possíveis de 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 no computador na tabela VMProcess preenchida por insights da VM. Essa tabela só é atualizada a cada hora, o que normalmente não é suficiente se você quiser usar esses dados em alertas.

Observação

A solução de Análise e Controle de Alterações são diferentes do recurso de Análise de Alterações nos insights da VM. Esse recurso está em versão prévia pública e ainda não está incluído nesse cenário.

Para opções diferentes para habilitar a solução de Controle de Alterações em suas máquinas virtuais, consulte Habilitar o Controle de Alterações e Inventário. Essa solução inclui métodos para configurar máquinas virtuais em escala. Você precisa criar uma conta de Automação do Azure para dar suporte à solução.

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

Tabela Descrição
ConfigurationChange Alterações nos dados de configuração no convidado
ConfigurationData Último estado relatado para dados de configuração no convidado

Consultas de log de amostra

  • Lista 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 for interrompido. 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 serviço em um conjunto for interrompido. 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 porta verifica se um computador está escutando em uma porta específica. Aqui estão descritas duas estratégias potenciais para o monitoramento de porta.

Tabelas do Dependency Agent

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

  • Revise a contagem de portas abertas em suas VMs para avaliar quais VMs têm configuração e vulnerabilidades de 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 vinculadas em suas VMs para avaliar quais VMs têm configuração e vulnerabilidades de segurança.

    VMBoundPort
    | distinct Computer, Port, ProcessName
    
  • Analise a atividade de 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
    
  • Revise os bytes enviados e as tendências recebidas para suas VMs.

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

    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 as tendências de status para analisar o comportamento e o status da conexão de um computador.

    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
    

Gerenciador de Conexões

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

O Gerenciador de Conexões requer a extensão do Observador de Rede no computador cliente que inicia o teste. Ele não precisa ser instalado no computador que está sendo testado. Para obter mais informações, confira o Tutorial: monitorar a comunicação de rede usando o portal do Azure.

Há um custo adicional para o Gerenciador de Conexões. Para saber mais, confira Preço do Observador de Rede.

Executar um processo em um computador local

O monitoramento de algumas cargas de trabalho demanda um processo local. Um exemplo é um script do PowerShell que é executado no computador 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 pelo Hybrid Runbook Worker, mas há um custo para cada runbook usado.

O runbook pode acessar qualquer recurso no computador 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, faça com que o runbook grave 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 é acionada nessa entrada de log.

Próximas etapas