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
- Espaço de trabalho do Log Analytics onde você tem pelo menos direitos de colaborador.
- Um ponto de extremidade de coleta de dados (DCE) na mesma região que o espaço de trabalho do Log Analytics. Consulte Como configurar pontos de extremidade de coleta de dados com base em sua implantação para obter detalhes.
- Um DCR novo ou existente descrito em Coletar dados com o Azure Monitor Agent.
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.
- O agente observa todos os arquivos de log que correspondem a um padrão de nome especificado no disco local.
- 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.
- Se a transformação padrão for usada, toda a entrada de log será enviada para uma única coluna na tabela de destino.
- Se uma transformação personalizada for usada, a entrada de log poderá ser analisada em várias colunas na tabela de destino.
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
, FilePath
e 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])
Recuperar esses dados com uma consulta de log retornaria os seguintes resultados.
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: