Coletar logs de um arquivo de texto com o Azure Monitor Agent

Logs de texto personalizados é uma das fontes de dados usadas em uma regra de coleta de dados (DCR). Os detalhes para a criação do DCR são fornecidos em Coletar dados com o Azure Monitor Agent. 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 log de eventos do Windows ou Syslog. Esses dados podem ser coletados com o Azure Monitor Agent e armazenados em um espaço de trabalho 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 todos 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 da máquina com o Agente do Azure Monitor no diretório que está sendo monitorado.
  • Cada registo deve ser delineado com um fim de linha.
  • O arquivo deve usar codificação ASCII ou UTF-8. Outros formatos como UTF-16 não são suportados.
  • Novos registros devem ser anexados 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 perda de dados ou problemas de desempenho:

  • Crie um novo arquivo de log todos os dias para que você possa limpar facilmente os arquivos antigos.
  • Limpe continuamente os arquivos de log no diretório monitorado. O rastreamento de muitos arquivos de log pode aumentar o uso da CPU e da memória do agente. Aguarde pelo menos 2 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 ou copie arquivos de log grandes que correspondam ao padrão de verificação de arquivos para o diretório monitorado. Se precisar, não exceda 50MB por minuto.

Fluxo de entrada

Nota

O suporte a várias linhas que usa um carimbo de data/hora para delimitar eventos já está disponível. Você deve usar uma implantação de modelo de gerenciamento de recursos até que o suporte seja adicionado na interface do usuário do Portal.

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

Column Tipo Description
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 espaço de trabalho do Log Analytics. Você pode substituir esse valor usando uma transformação para definir TimeGenerated como 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 no 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 onde você pode definir explicitamente o fluxo de entrada.
Computer string Se você adicionar essa 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 onde 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 espaço de trabalho do Log Analytics para receber os dados. O esquema de tabela deve corresponder aos dados que você está coletando ou você deve adicionar uma transformação para garantir que o esquema de saída corresponda à tabela.

Aviso

Para evitar a perda de dados, é importante que você não use uma tabela de log personalizada existente que os agentes do MMA estão usando no momento. Depois que qualquer agente AMA gravar em uma tabela de log personalizada existente, os agentes MMA não poderão mais gravar nessa tabela. Em vez disso, você deve criar uma nova tabela especificamente para agentes AMA para garantir uma transição suave de um agente para o próximo.

Por exemplo, você pode usar o seguinte script do PowerShell para criar uma tabela personalizada com RawData, FilePathe Computer. Você não precisaria de uma transformação para esta 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 Azure Monitor Agent. Na etapa Coletar e entregar, selecione Logs de texto personalizados na lista suspensa Tipo de fonte de dados.

Definição Descrição
Padrão de arquivo Identifica o local e o nome dos arquivos de log no disco local. Use um curinga para nomes de arquivos que variam, por exemplo, quando um novo arquivo é criado 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 espaço de trabalho do Log Analytics.
Delimitador de registros Não usado atualmente, mas reservado para uso potencial futuro, permitindo delimitadores diferentes do fim de linha atualmente suportado (/r/n).
Transformação Transformação em tempo de ingestão para 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. Estes 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 para o 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 TimeGenerated valor. Se isso não fosse fornecido, o tempo de ingestão seria 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 delimitados por vírgula.

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 delimitados por vírgula.

Resolução de Problemas

Siga as etapas a seguir se você não estiver coletando dados do log de texto esperado.

  • 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 para o esquema correto.
  • Consulte Verificar operação para verificar se o agente está operacional e se os dados estão sendo recebidos.

Próximos passos

Saiba mais sobre: