Coletar logs de um arquivo de texto com o Agente do Azure Monitor

Os Logs de Texto Personalizados são uma das fontes de dados usadas em uma DCR (regra de coleta de dados). Os detalhes para a criação da DCR são fornecidos em Coleta de dados com o Agente do Azure Monitor. Este artigo fornece detalhes adicionais para o tipo de logs de texto.

Muitos aplicativos e serviços registrarão informações em arquivos de texto em vez de serviços de log padrão, como o Log de Eventos do Windows ou o Syslog. Esses dados podem ser coletados com Agente do Azure Monitor e armazenados em um workspace do Log Analytics com dados coletados de outras fontes.

Pré-requisitos

Operação básica

O diagrama a seguir mostra a operação básica de coleta de dados de log de um arquivo de texto.

  1. O agente observa os arquivos de log que correspondem a um padrão de nome especificado no disco local.
  2. Cada entrada no log é coletada e enviada para o Azure Monitor. O fluxo de entrada inclui toda a entrada de log em uma única coluna.
  3. Se a transformação padrão for usada, toda a entrada de log será enviada para uma única coluna na tabela de destino.
  4. Se uma transformação personalizada for usada, a entrada de log poderá ser analisada em várias colunas na tabela de destino.

Diagrama mostrando a coleção de um log de texto pelo agente do Azure Monitor, mostrando uma coleção simples e uma transformação para um arquivo delimitado por vírgula.

Requisitos de arquivo de texto e práticas recomendadas

O arquivo que o Agente do Azure Monitor está monitorando deve atender aos seguintes requisitos:

  • O arquivo deve ser armazenado na unidade local do computador com o Agente do Azure Monitor no diretório que está sendo monitorado.
  • Cada registro deve ser delineado com um fim de linha.
  • O arquivo deve usar a codificação ASCII ou UTF-8. Não há suporte para outros formatos, como UTF-16.
  • Novos registros devem ser acrescentados ao final do arquivo e não substituir registros antigos. A substituição causará perda de dados.

Siga as seguintes recomendações para garantir que você não tenha problemas de perda de dados ou desempenho:

  • Crie um novo arquivo de log todos os dias para que você possa limpar arquivos antigos facilmente.
  • Limpe continuamente os arquivos de log no diretório monitorado. O acompanhamento de vários arquivos de log pode aumentar o uso da CPU e da memória do agente. Aguarde pelo menos dois dias para dar tempo suficiente para que todos os logs sejam processados.
  • Não renomeie um arquivo que corresponda ao padrão de verificação de arquivo para outro nome que também corresponda ao padrão de verificação de arquivo. Isso fará com que dados duplicados sejam ingeridos.
  • Não renomeie nem copie arquivos de log grandes que correspondam ao padrão de verificação de arquivo para o diretório monitorado. Se for necessário, não exceda 50 MB por minuto.

Fluxo de entrada

Observação

O suporte a várias linhas que usa um carimbo de data/hora ISO 8601 para delimitar eventos está previsto para meados de outubro de 2024

O fluxo de entrada de dados inclui as colunas na tabela a seguir.

Coluna Type Descrição
TimeGenerated datetime A hora em que o registro foi gerado. Esse valor será preenchido automaticamente com o tempo em que o registro for adicionado ao workspace do Log Analytics. Você pode substituir esse valor usando uma transformação para definir TimeGenerated para outro valor.
RawData string A entrada de log inteira em uma única coluna. Você pode usar uma transformação se quiser dividir esses dados em várias colunas antes de enviar para a tabela.
FilePath string Se você adicionar essa coluna ao fluxo de entrada na DCR, ela será preenchida com o caminho para o arquivo de log. Esta coluna não é criada automaticamente e não pode ser adicionada usando o portal. Você deve modificar manualmente o DCR criado pelo portal ou criar o DCR usando outro método em que você pode definir explicitamente o fluxo de entrada.
Computer string Se você adicionar esta coluna ao fluxo de entrada no DCR, ela será preenchida com o nome do computador com o arquivo de log. Esta coluna não é criada automaticamente e não pode ser adicionada usando o portal. Você deve modificar manualmente o DCR criado pelo portal ou criar o DCR usando outro método em que você pode definir explicitamente o fluxo de entrada.

Tabela personalizada

Antes de coletar dados de log de um arquivo de texto, você deve criar uma tabela personalizada no workspace do Log Analytics para receber os dados. O esquema de tabela deve corresponder aos dados que você está coletando ou adicionar uma transformação para garantir que o esquema de saída corresponda à tabela.

Aviso

Você não deve usar uma tabela de log personalizada existente usada por agentes do MMA. Seus agentes de MMA não conseguirão gravar na tabela depois que o primeiro agente AMA gravar na tabela. Você deve criar uma nova tabela para o AMA usar para evitar a perda de dados do MMA.

Por exemplo, você pode usar o seguinte script do PowerShell para criar uma tabela personalizada com RawData, FilePath, e Computer. Você não precisaria de uma transformação para essa tabela porque o esquema corresponde ao esquema padrão do fluxo de entrada.

$tableParams = @'
{
    "properties": {
        "schema": {
               "name": "{TableName}_CL",
               "columns": [
                    {
                        "name": "TimeGenerated",
                        "type": "DateTime"
                    }, 
                    {
                        "name": "RawData",
                        "type": "String"
                    },
                    {
                        "name": "FilePath",
                        "type": "String"
                    },
                    {
                        "name": "Computer",
                        "type": "String"
                    }
              ]
        }
    }
}
'@

Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{WorkspaceName}/tables/{TableName}_CL?api-version=2021-12-01-preview" -Method PUT -payload $tableParams

Criar uma regra de coleta de dados para um arquivo de texto

Crie uma regra de coleta de dados, conforme descrito em Coletar dados com o Agente do Azure Monitor. Na etapa Coletar e entregar, selecione Logs de Texto Personalizados na lista suspensa tipo de fonte de dados.

Configuração Descrição
Padrão do arquivo Identifica o local e o nome dos arquivos de log no disco local. Use um caractere curinga para nomes de arquivo que variam, por exemplo, quando um novo arquivo é criada todos os dias com um novo nome. Você pode inserir vários padrões de arquivo separados por vírgulas.

Exemplos:
- C:\Logs\MyLog.txt
- C:\Logs\MyLog*.txt
- C:\App01\AppLog.txt, C:\App02\AppLog.txt
- /var/mylog.log
- /var/mylog*.log
Nome da tabela Nome da tabela de destino no workspace do Log Analytics.
Delimitador de registro Não usado atualmente, mas reservado para possível uso futuro, permitindo delimitadores diferentes do fim da linha (/r/n) com suporte no momento.
Transformação Transformação de tempo de ingestão filtrar registros ou formatar os dados de entrada para a tabela de destino. Use source para deixar os dados de entrada inalterados.

Arquivos de log delimitados

Muitos arquivos de log de texto têm entradas delimitadas por um caractere, como uma vírgula. Para analisar esses dados em colunas separadas, use uma transformação com a função de divisão.

Por exemplo, considere um arquivo de texto com os seguintes dados delimitados por vírgula. Esses campos podem ser descritos como: Time, Code, Severity, Module e Message.

2024-06-21 19:17:34,1423,Error,Sales,Unable to connect to pricing service.
2024-06-21 19:18:23,1420,Information,Sales,Pricing service connection established.
2024-06-21 21:45:13,2011,Warning,Procurement,Module failed and was restarted.
2024-06-21 23:53:31,4100,Information,Data,Nightly backup complete.

A transformação a seguir analisa os dados em colunas separadas. Como split retorna dados dinâmicos, você deve usar funções como tostring e toint para converter os dados no tipo escalar correto. Você também precisa fornecer um nome para cada entrada que corresponda ao nome da coluna na tabela de destino. Observe que este exemplo fornece um valor TimeGenerated. Se isso não tiver sido fornecido, o tempo de ingestão será usado.

source | project d = split(RawData,",") | project TimeGenerated=todatetime(d[0]), Code=toint(d[1]), Severity=tostring(d[2]), Module=tostring(d[3]), Message=tostring(d[4])

Captura de tela que mostra a configuração da coleção de arquivos delimitada por vírgulas.

Recuperar esses dados com uma consulta de log retornaria os seguintes resultados.

Captura de tela que mostra a consulta de log retornando resultados da coleção de arquivos delimitada por vírgulas.

Solução de problemas

Siga as etapas a seguir se você não estiver coletando dados do log de texto que está esperando.

  • Verifique se os dados estão sendo gravados no arquivo de log que está sendo coletado.
  • Verifique se o nome e o local do arquivo de log correspondem ao padrão de arquivo especificado.
  • Verifique se o esquema da tabela de destino corresponde ao fluxo de entrada ou se você tem uma transformação que converterá o fluxo de entrada no esquema correto.
  • Consulte Verificar operação para verificar se o agente está operacional e se os dados estão sendo recebidos.

Próximas etapas

Saiba mais sobre: