Partilhar via


Coletar logs de um arquivo JSON com o Azure Monitor Agent

Logs JSON 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 texto e o tipo de logs JSON.

Muitos aplicativos e serviços registrarão informações em arquivos JSON 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 json.

  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 definido pelo usuário é usado para analisar os dados de log em colunas.
  3. Uma transformação padrão é usada se o esquema do fluxo de entrada corresponder ao esquema da tabela de destino.

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

Requisitos de arquivo JSON 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.
  • O texto JSON deve estar contido em uma única linha. O formato de corpo JSON não é suportado. Veja o exemplo abaixo.

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.

Tabela personalizada

Antes de coletar dados de log de um arquivo JSON, você deve criar uma tabela personalizada no espaço de trabalho do Log Analytics para receber os dados. O esquema de tabela deve corresponder às colunas no fluxo de entrada ou você deve adicionar uma transformação para garantir que o esquema de saída corresponda à tabela.

Aviso

Você não deve usar uma tabela personalizada existente usada pelo agente do Log Analytics. Os agentes herdados não poderão gravar na tabela quando o primeiro agente do Azure Monitor gravar nela. Crie uma nova tabela para o agente do Azure Monitor usar para evitar a perda de dados do agente do Log Analytics.

Por exemplo, você pode usar o seguinte script do PowerShell para criar uma tabela personalizada com várias colunas.

$tableParams = @'
{
    "properties": {
        "schema": {
               "name": "{TableName}_CL",
               "columns": [
                    {
                        "name": "TimeGenerated",
                        "type": "DateTime"
                    }, 
                    {
                        "name": "MyStringColumn",
                        "type": "string"
                    },
                    {
                        "name": "MyIntegerColumn",
                        "type": "int"
                    },
                    {
                        "name": "MyRealColumn",
                        "type": "real"
                    },
                    {
                        "name": "MyBooleanColumn",
                        "type": "bool"
                    },
                    {
                        "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 JSON

Nota

O agente baseado na ingestão de arquivos personalizados JSON está atualmente em visualização e ainda não tem uma experiência completa de interface do usuário no portal. Embora você possa criar o DCR usando o portal, você deve modificá-lo para definir as colunas no fluxo de entrada. Esta seção inclui detalhes sobre como criar o DCR usando um modelo ARM.

Esquema de fluxo de entrada

Nota

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

Os arquivos JSON incluem um nome de propriedade com cada valor, e o fluxo de entrada no DCR precisa incluir uma coluna correspondente ao nome de cada propriedade. Você precisa modificar a columns seção do modelo ARM com as colunas do seu log.

A tabela a seguir descreve colunas opcionais que você pode incluir, além das colunas que definem os dados em seu arquivo de log.

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 se não estiver incluído no fluxo de entrada.
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.

Transformação

A transformação potencialmente modifica o fluxo de entrada para filtrar registros ou modificar o esquema para corresponder à tabela de destino. Se o esquema do fluxo de entrada for o mesmo que a tabela de destino, você poderá usar a transformação padrão do source. Caso contrário, modifique a transformKql seção do modelo tee ARM com uma consulta KQL que retorna o esquema necessário.

Modelo ARM

Use o seguinte modelo ARM para criar um DCR para coletar arquivos de log de texto, fazendo as alterações descritas nas seções anteriores. A tabela a seguir descreve os parâmetros que exigem valores quando você implanta o modelo.

Definição Descrição
Nome da regra de recolha de dados Nome exclusivo para o DCR.
ID do recurso do ponto de extremidade de coleta de dados ID do recurso do ponto de extremidade de coleta de dados (DCE).
Location Região para o DCR. Deve ser o mesmo local que o espaço de trabalho do Log Analytics.
Padrões 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 (AMA versão 1.26 ou superior necessária para vários padrões de arquivo no Linux).

Exemplos:
- C:\Logs\MyLog.json
- C:\Logs\MyLog*.json
- C:\App01\AppLog.json, C:\App02\AppLog.json
- /var/mylog.json
- /var/mylog*.json
Nome da tabela Nome da tabela de destino no espaço de trabalho do Log Analytics.
ID do recurso do espaço de trabalho ID do recurso do espaço de trabalho do Log Analytics com a tabela de destino.

Importante

Ao criar o DCR usando um modelo ARM, você ainda deve associar o DCR aos agentes que o usarão. Você pode editar o DCR no portal do Azure e selecionar os agentes conforme descrito em Adicionar recursos

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "dataCollectionRuleName": {
            "type": "string",
            "metadata": {
                "description": "Unique name for the DCR. "
            }
        },
        "dataCollectionEndpointResourceId": {
            "type": "string",
            "metadata": {
              "description": "Resource ID of the data collection endpoint (DCE)."
            }
        },
        "location": {
            "type": "string",
            "metadata": {
                "description": "Region for the DCR. Must be the same location as the Log Analytics workspace. "
            }
        },
        "filePatterns": {
            "type": "string",
            "metadata": {
                "description": "Path on the local disk for the log file to collect. May include wildcards.Enter multiple file patterns separated by commas (AMA version 1.26 or higher required for multiple file patterns on Linux)."
            }
        },
        "tableName": {
            "type": "string",
            "metadata": {
                "description": "Name of destination table in your Log Analytics workspace. "
            }
        },
        "workspaceResourceId": {
            "type": "string",
            "metadata": {
                "description": "Resource ID of the Log Analytics workspace with the target table."
            }
        }
    },
    "variables": {
        "tableOutputStream": "[concat('Custom-', parameters('tableName'))]"
    },
    "resources": [
        {
            "type": "Microsoft.Insights/dataCollectionRules",
            "apiVersion": "2022-06-01",
            "name": "[parameters('dataCollectionRuleName')]",
            "location": "[parameters('location')]",
            "properties": {
                "dataCollectionEndpointId": "[parameters('dataCollectionEndpointResourceId')]",
                "streamDeclarations": {
                    "Custom-Json-stream": {
                        "columns": [
                            {
                                "name": "TimeGenerated",
                                "type": "datetime"
                            },
                            {
                                "name": "FilePath",
                                "type": "string"
                            },
                            {
                                "name": "MyStringColumn",
                                "type": "string"
                            },
                            {
                                "name": "MyIntegerColumn",
                                "type": "int"
                            },
                            {
                                "name": "MyRealColumn",
                                "type": "real"
                            },
                            {
                                "name": "MyBooleanColumn",
                                "type": "boolean"
                            }
                        ]
                    }
                },
                "dataSources": {
                    "logFiles": [
                        {
                            "streams": [
                                "Custom-Json-stream"
                            ],
                            "filePatterns": [
                                "[parameters('filePatterns')]"
                            ],
                            "format": "json",
                            "name": "Custom-Json-stream"
                        }
                    ]
                },
                "destinations": {
                    "logAnalytics": [
                        {
                            "workspaceResourceId": "[parameters('workspaceResourceId')]",
                            "name": "workspace"
                        }
                    ]
                },
                "dataFlows": [
                    {
                        "streams": [
                            "Custom-Json-stream"
                        ],
                        "destinations": [
                            "workspace"
                        ],
                        "transformKql": "source",
                        "outputStream": "[variables('tableOutputStream')]"
                    }
                ]
            }
        }
    ]
}

Resolução de Problemas

Siga as etapas a seguir se você não estiver coletando dados do log JSON esperados.

  • 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 do fluxo de entrada no DCR corresponde ao esquema no arquivo de log.
  • 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: