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

Muitos aplicativos registram informações em arquivos JSON ou de texto em vez de serviços de registro padrão, como o log de eventos do Windows ou Syslog. Este artigo explica como coletar dados de log de arquivos JSON e de texto de computadores monitorados usando o Agente do Azure Monitor ao criar uma DCR (regra de coleta de dados).

Observação

A ingestão JSON está em versão prévia no momento.

Pré-requisitos

Para concluir este procedimento, você precisa de:

  • Workspace do Log Analytics em que você tem pelo menos direitos de colaborador.

  • Um ou dois pontos de extremidade de coleta de dados, dependendo se a máquina virtual e o workspace 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 na sua implantação.

  • Permissões para criar objetos de Regra de Coleta de Dados no workspace.

  • O texto JSON deve estar contido em uma única linha para ingestão adequada. Não há suporte para o formato de corpo JSON (arquivo).

  • Uma máquina virtual, conjunto de dimensionamento de máquinas virtuais, servidor habilitado para Arc local ou agente de monitoramento do Azure em um cliente local do Windows que grava logs em um arquivo JSON ou texto.

    Requisitos do arquivo JSON e de texto e melhores práticas:

    • Armazene arquivos na unidade local do computador no qual o Agente do Azure Monitor está em execução 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. Não há suporte para outros formatos, como UTF-16.
    • 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 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 substitua um arquivo existente com novos registros. Você só deve anexar novos registros ao final do arquivo. A substituição causará perda de dados.
    • Não renomeie um arquivo para um novo nome e depois abra um novo arquivo com o mesmo nome. Isso pode causar perda de dados.
    • 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.
    • 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 (datetime) [Obrigatório]
  • RawData (cadeia de caracteres) [Opcional se o esquema de tabela for fornecido]
  • 'FilePath' (cadeia de caracteres) [Opcional]
  • YourOptionalColumn (cadeia de caracteres) [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 origem é um log JSON, poderá adicionar as colunas finais no script antes de criar a tabela. Você sempre poderá adicionar colunas usando a interface do usuário da tabela do Log Analytics posteriormente.

Os nomes das colunas e os atributos JSON devem corresponder exatamente para serem analisados automaticamente na tabela. As colunas e os atributos JSON diferenciam maiúsculas de minúsculas. Por exemplo, Rawdata não coletará os dados do evento. Deve ser RawData. A ingestão removerá os atributos JSON que não têm uma coluna correspondente.

A maneira mais fácil de fazer a chamada REST é de uma CLI (linha de comando) do Azure Cloud PowerShell. Para abrir o shell, acesse o portal do Azure, pressione o botão Cloud Shell e selecione PowerShell. Se essa for sua primeira vez usando o Azure Cloud PowerShell, você precisará seguir o assistente de configuração única.

Copie e cole esse script no PowerShell para criar a tabela em seu workspace:

$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 os detalhes sobre a tabela que você acabou de criar.

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

A regra de coleta de dados define:

  • Em quais arquivos de log de origem o Agente do Azure Monitor verificará se há novos eventos.
  • Como o Azure Monitor transforma eventos durante a ingestão.
  • O workspace do Log Analytics de destino e a tabela para a qual o Azure Monitor envia os dados.

Você pode definir uma regra de coleta de dados para enviar dados de vários computadores para vários workspaces do Log Analytics, incluindo workspaces em uma região ou locatário diferente. Criar a regra de coleta de dados na mesma região do workspace do Log Analytics.

Observação

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

Para analisar automaticamente seu arquivo de registro JSON em uma tabela personalizada, siga as etapas do modelo do Resource Manager. Os dados de texto podem ser transformados em colunas usando a transformação no momento da ingestão.

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

  1. No menu Monitor no portal do Azure, selecione Regras de Coleta de Dados.

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

    Captura de tela que mostra o botão Criar na tela Regras de Coleta de Dados.

  3. Insira um Nome de regra e especifique Assinatura, Grupo de recursos, Região, Tipo de plataforma e Ponto de extremidade de coleta de dados:

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

    Captura de tela que mostra a guia Noções Básicas da tela Regras de Coleta 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 Agente do Azure Monitor em recursos que ainda não o instalaram.

      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 os aplicativos existentes, a menos que você especifique a identidade atribuída pelo usuário na solicitação, o computador assumirá como padrão o uso da identidade atribuída pelo sistema.

    2. Selecione Habilitar 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 usar apenas 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 na sua implantação.

    Captura de tela que mostra a guia Recursos da tela Regras de Coleta 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 Personalizado 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 separada por vírgulas de padrões de arquivo).

      Exemplos de entradas válidas:

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

      Observação

      Vários arquivos de log do mesmo tipo geralmente existem no mesmo diretório. Por exemplo, um computador pode criar um novo arquivo todos os dias para impedir que o arquivo de log fique muito grande. 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 para Linux. Não há suporte para curingas de diretório.

    • Nome da tabela – o nome da tabela de destino que você criou no workspace do Log Analytics. Para obter mais informações, confira Criar uma tabela personalizada.

    • Delimitador de registro – será usado no futuro para permitir delimitadores diferentes do fim da linha com suporte atualmente (/r/n).

    • Transformar – adicione uma transformação de tempo de ingestão ou deixe como fonte se você 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 workspaces do Log Analytics, que também são conhecidos como multihoming.

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

  9. Selecione Examinar + criar para examinar os detalhes da regra de coleta de dados e a associação com o conjunto de máquinas virtuais.

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

Observação

Pode levar até 10 minutos para que os dados sejam enviados aos destinos depois que você cria a regra de coleta de dados.

Consultas de log de amostra

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

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

    MyApp_CL
    | summarize count() by code
    

Regra de alerta de amostra

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

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

Solucionar problemas

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

Verificar se você ingeriu dados em sua tabela personalizada

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

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

Se nenhum registro for retornado, verifique as outras seções quanto a possíveis causas. Essa consulta procura por entradas nos últimos dois dias, mas é possível modificar para outro intervalo de tempo. Pode levar de 5 a 7 minutos para que os novos dados apareçam em sua tabela. O Agente do Azure Monitor coleta apenas dados gravados no arquivo JSON ou de texto 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 workspace do Log Analytics antes de poder enviar dados para ela.

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

Verifique se o agente do Azure Monitor está se comunicando corretamente executando a consulta a seguir no Log Analytics a fim de verificar se há registros na tabela Pulsação.

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

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

A regra de coleta de dados terá uma seção semelhante à seguinte. O elemento filePatterns especifica o caminho para o arquivo de log a ser coletado do computador do agente. Verifique se o computador do agente 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 no computador do agente.

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

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

Use a Solução de problemas do Agente do Azure Monitor para procurar problemas comuns e compartilhar os 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 coleção de um arquivo JSON ou de texto, 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óximas etapas

Saiba mais sobre: