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

Muitos aplicativos registram informações em arquivos de texto ou JSON em vez de serviços de log padrão, como log de eventos do Windows ou Syslog. Este artigo explica como coletar dados de log de arquivos de texto e JSON em máquinas monitoradas usando o Azure Monitor Agent criando uma regra de coleta de dados (DCR).

Nota

A ingestão de JSON está em visualização no momento.

Pré-requisitos

Para concluir este procedimento, você precisa:

  • Espaço de trabalho do Log Analytics onde você tem pelo menos direitos de colaborador.

  • Um ou dois pontos de extremidade de coleta de dados, dependendo se sua máquina virtual e o espaço de trabalho do Log Analytics estão na mesma região.

    Para obter mais informações, consulte Como configurar pontos de extremidade de coleta de dados com base em sua implantação.

  • Permissões para criar objetos de Regra de Coleta de Dados no espaço de trabalho.

  • O texto JSON deve estar contido em uma única linha para ingestão adequada. O formato de corpo JSON (arquivo) não é suportado.

  • Uma Máquina Virtual, um Conjunto de Dimensionamento de Máquina Virtual, um servidor habilitado para Arc no local ou um Agente de Monitoramento do Azure em um cliente local do Windows que grava logs em um arquivo de texto ou JSON.

    Requisitos de texto e arquivo JSON e práticas recomendadas:

    • Armazene arquivos na unidade local da máquina na qual o Azure Monitor Agent está sendo executado e no diretório que está sendo monitorado.
    • Delineie o fim de um registro com um fim de linha.
    • Use a codificação ASCII ou UTF-8. Outros formatos como UTF-16 não são suportados.
    • Crie um novo arquivo de log todos os dias para que você possa remover arquivos antigos facilmente.
    • Limpe todos 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 substitua um arquivo existente por novos registros. Você só deve acrescentar novos registros ao final do arquivo. A substituição causará perda de dados.
    • Não renomeie um arquivo para um novo nome e, em seguida, abra um novo arquivo com o mesmo nome. Isso pode causar perda de dados.
    • 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.
    • Não renomeie um arquivo que corresponda ao padrão de verificação de arquivo para um novo nome que também corresponda ao padrão de verificação de arquivo. Isso fará com que dados duplicados sejam ingeridos.

Criar uma tabela personalizada

A tabela criada no script tem duas colunas:

  • TimeGenerated (data-hora) [Obrigatório]
  • RawData (string) [Opcional se esquema de tabela fornecido]
  • 'FilePath' (string) [Opcional]
  • YourOptionalColumn (string) [Opcional]

O esquema de tabela padrão para dados de log coletados de arquivos de texto é 'TimeGenerated' e 'RawData'. Adicionar o 'FilePath' a qualquer equipe é opcional. Se você souber que seu esquema final ou sua fonte é um log JSON, poderá adicionar as colunas finais no script antes de criar a tabela. Você sempre pode adicionar colunas usando a interface do usuário da tabela do Log Analytics mais tarde.

Seus nomes de coluna e atributos JSON devem corresponder exatamente para analisar automaticamente na tabela. Tanto as colunas quanto os atributos JSON diferenciam maiúsculas de minúsculas. Por exemplo Rawdata , não coletará os dados do evento. Tem de ser RawData. A ingestão descartará atributos JSON que não têm uma coluna correspondente.

A maneira mais fácil de fazer a chamada REST é a partir de uma linha de comando (CLI) do Azure Cloud PowerShell. Para abrir o shell, vá para o portal do Azure, pressione o botão Cloud Shell e selecione PowerShell. Se esta for a primeira vez que você usa o Azure Cloud PowerShell, você precisará percorrer o assistente de configuração única.

Copie e cole esse script no PowerShell para criar a tabela em seu espaço de trabalho:

$tableParams = @'
{
    "properties": {
        "schema": {
               "name": "{TableName}_CL",
               "columns": [
        {
                                "name": "TimeGenerated",
                                "type": "DateTime"
                        }, 
                       {
                                "name": "RawData",
                                "type": "String"
                       },
                       {
                                "name": "FilePath",
                                "type": "String"
                       },
                      {
                                "name": `"YourOptionalColumn",
                                "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

Você deve receber uma resposta 200 e detalhes sobre a tabela que você acabou de criar.

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

A regra de recolha de dados define:

  • Quais arquivos de log de origem o Azure Monitor Agent verifica se há novos eventos.
  • Como o Azure Monitor transforma eventos durante a ingestão.
  • O espaço de trabalho e a tabela de destino do Log Analytics para a qual o Azure Monitor envia os dados.

Você pode definir uma regra de coleta de dados para enviar dados de várias máquinas para vários espaços de trabalho do Log Analytics, incluindo espaços de trabalho em uma região ou locatário diferente. Crie a regra de coleta de dados na mesma região do espaço de trabalho do Log Analytics.

Nota

Para enviar dados entre locatários, você deve primeiro habilitar o Azure Lighthouse.

Para analisar automaticamente seu arquivo de log JSON em uma tabela personalizada, siga as etapas de modelo do Gerenciador de Recursos. Os dados de texto podem ser transformados em colunas usando a transformação de tempo de ingestão.

Para criar a regra de coleta de dados no portal do Azure:

  1. No menu Monitor, selecione Regras de Coleta de Dados.

  2. Selecione Criar para criar uma nova regra de coleta de dados e associações.

    Captura de ecrã que mostra o botão Criar no ecrã Regras de Recolha de Dados.

  3. Insira um nome de Regra e especifique um ponto de extremidade de Assinatura, Grupo de Recursos, Região, Tipo de Plataforma e Ponto de extremidade de coleta de dados:

    • Região especifica onde o DCR será criado. As máquinas virtuais e suas associações podem estar em qualquer assinatura ou grupo de recursos no locatário.
    • Tipo de plataforma especifica o tipo de recursos aos quais essa regra pode se aplicar. A opção Personalizada permite os tipos Windows e Linux.
    • O Ponto de Extremidade de Coleta de Dados especifica o ponto de extremidade de coleta de dados para o qual o Agente do Monitor do Azure envia os dados coletados. Esse ponto de extremidade de coleta de dados deve estar na mesma região do espaço de trabalho do Log Analytics. Para obter mais informações, consulte Como configurar pontos de extremidade de coleta de dados com base em sua implantação.

    Captura de ecrã que mostra o separador Noções básicas do ecrã Regra de Recolha de Dados.

  4. Na guia Recursos:

    1. Selecione + Adicionar recursos e associe recursos à regra de coleta de dados. Os recursos podem ser máquinas virtuais, Conjuntos de Dimensionamento de Máquinas Virtuais e Azure Arc para servidores. O portal do Azure instala o Azure Monitor Agent em recursos que ainda não o têm instalado.

      Importante

      O portal permite a identidade gerenciada atribuída pelo sistema nos recursos de destino, juntamente com as identidades atribuídas pelo usuário existentes, se houver. Para aplicativos existentes, a menos que você especifique a identidade atribuída pelo usuário na solicitação, a máquina assume como padrão usar a identidade atribuída pelo sistema.

    2. Selecione Ativar pontos de extremidade de coleta de dados.

    3. Opcionalmente, você pode selecionar um ponto de extremidade de coleta de dados para cada uma das máquinas virtuais associadas à regra de coleta de dados. Na maioria das vezes você deve apenas usar os padrões.

      Esse ponto de extremidade de coleta de dados envia arquivos de configuração para a máquina virtual e deve estar na mesma região que a máquina virtual. Para obter mais informações, consulte Como configurar pontos de extremidade de coleta de dados com base em sua implantação.

    Captura de ecrã que mostra o separador Recursos do ecrã Regra de Recolha de Dados.

  5. Na guia Coletar e entregar, selecione Adicionar fonte de dados para adicionar uma fonte de dados e definir um destino.

  6. Na lista suspensa Tipo de fonte de dados, selecione Logs de texto personalizados ou Logs JSON.

  7. Especifique as seguintes informações:

    • Padrão de arquivo - Identifica onde os arquivos de log estão localizados no disco local. Você pode inserir vários padrões de arquivo separados por vírgulas (no Linux, a versão 1.26 ou superior do AMA é necessária para coletar de uma lista de padrões de arquivo separados por vírgula).

      Exemplos de entradas válidas:

      • 20220122-MyLog.txt
      • ProcessA_MyLog.txt
      • ErrorsOnly_MyLog.txt, WarningOnly_MyLog.txt

      Nota

      Vários arquivos de log do mesmo tipo geralmente existem no mesmo diretório. Por exemplo, uma máquina pode criar um novo arquivo todos os dias para evitar que o arquivo de log cresça demais. Para coletar dados de log nesse cenário, você pode usar um curinga de arquivo. Use o formato C:\directoryA\directoryB\*MyLog.txt para Windows e /var/*.log Linux. Não há suporte para curingas de diretório.

    • Nome da tabela - O nome da tabela de destino que você criou no espaço de trabalho do Log Analytics. Para obter mais informações, consulte Criar uma tabela personalizada.

    • Delimitador de registro - Será usado no futuro para permitir delimitadores diferentes do fim de linha atualmente suportado (/r/n).

    • Transformar - Adicione uma transformação em tempo de ingestão ou deixe como fonte se não precisar transformar os dados coletados.

  8. Na guia Destino, adicione um ou mais destinos para a fonte de dados. Você pode selecionar vários destinos do mesmo tipo ou de tipos diferentes. Por exemplo, você pode selecionar vários espaços de trabalho do Log Analytics, o que também é conhecido como multihoming.

    Captura de tela que mostra a guia de destino da tela Adicionar fonte de dados para uma regra de coleta de dados no portal do Azure.

  9. Selecione Rever + criar para rever os detalhes da regra de recolha de dados e da associação com o conjunto de máquinas virtuais.

  10. Selecione Criar para criar a regra de coleta de dados.

Nota

Pode levar até 10 minutos para que os dados sejam enviados para os destinos depois de criar a regra de coleta de dados.

Consultas de log de exemplo

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

  • Conte o número de eventos por código.

    MyApp_CL
    | summarize count() by code
    

Exemplo de regra de alerta

  • Crie uma regra de alerta em qualquer evento de erro.

    MyApp_CL
    | where status == "Error"
    | summarize AggregatedValue = count() by Computer, bin(TimeGenerated, 15m)
    

Resolver problemas

Use as etapas a seguir para solucionar problemas de coleta de logs de arquivos de texto e JSON.

Verifique se ingeriu dados na sua tabela personalizada

Comece verificando se algum registro foi ingerido em sua tabela de log personalizada executando a seguinte consulta no Log Analytics:

<YourCustomTable>_CL
| where TimeGenerated > ago(48h)
| order by TimeGenerated desc

Se os registros não forem retornados, verifique as outras seções para possíveis causas. Esta consulta procura entradas nos últimos dois dias, mas pode modificar para outro intervalo de tempo. Pode levar de 5 a 7 minutos para que novos dados apareçam na tabela. O Agente do Azure Monitor só coleta dados gravados no arquivo de texto ou JSON depois que você associa a regra de coleta de dados à máquina virtual.

Verifique se você criou uma tabela personalizada

Você deve criar uma tabela de log personalizada em seu espaço de trabalho do Log Analytics antes de enviar dados para ela.

Verifique se o agente está enviando pulsações com êxito

Verifique se o agente do Azure Monitor está se comunicando corretamente executando a seguinte consulta no Log Analytics para verificar se há registros na tabela Heartbeat.

Heartbeat
| where TimeGenerated > ago(24h)
| where Computer has "<computer name>"
| project TimeGenerated, Category, Version
| order by TimeGenerated desc

Verifique se você especificou o local de log correto na regra de coleta de dados

A regra de recolha de dados terá uma secção semelhante à seguinte. O filePatterns elemento especifica o caminho para o arquivo de log a ser coletado do computador do agente. Verifique o computador do agente para verificar se isso está correto.

"dataSources": [{
            "configuration": {
                "filePatterns": ["C:\\JavaLogs\\*.log"],
                "format": "text",
                "settings": {
                    "text": {
                        "recordStartTimestampFormat": "yyyy-MM-ddTHH:mm:ssK"
                    }
                }
            },
            "id": "myTabularLogDataSource",
            "kind": "logFile",
            "streams": [{
                    "stream": "Custom-TabularData-ABC"
                }
            ],
            "sendToChannels": ["gigl-dce-00000000000000000000000000000000"]
        }
    ]

Esse padrão de arquivo deve corresponder aos logs na máquina do agente.

Captura de tela de arquivos de log de texto na máquina do agente.

Usar a Solução de Problemas do Azure Monitor Agent

Use a Solução de Problemas do Azure Monitor Agent para procurar problemas comuns e compartilhar resultados com a Microsoft.

Verificar se os logs estão sendo preenchidos

O agente coletará apenas o novo conteúdo gravado no arquivo de log que está sendo coletado. Se você estiver experimentando os logs de coleta de um arquivo de texto ou JSON, poderá usar o script a seguir para gerar logs de exemplo.

# This script writes a new log entry at the specified interval indefinitely.
# Usage:
# .\GenerateCustomLogs.ps1 [interval to sleep]
#
# Press Ctrl+C to terminate script.
#
# Example:
# .\ GenerateCustomLogs.ps1 5

param (
    [Parameter(Mandatory=$true)][int]$sleepSeconds
)

$logFolder = "c:\\JavaLogs"
if (!(Test-Path -Path $logFolder))
{
    mkdir $logFolder
}

$logFileName = "TestLog-$(Get-Date -format yyyyMMddhhmm).log"
do
{
    $count++
    $randomContent = New-Guid
    $logRecord = "$(Get-Date -format s)Z Record number $count with random content $randomContent"
    $logRecord | Out-File "$logFolder\\$logFileName" -Encoding utf8 -Append
    Start-Sleep $sleepSeconds
}
while ($true)

Próximos passos

Saiba mais sobre: