Compartilhar via


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

Logs JSON personalizados é uma das fontes de dados usadas em uma regra de coleta de dados (DCR). Os detalhes para a criação da DCR são fornecidos em Coleta de dados com o Agente do Azure Monitor. Este artigo fornece detalhes adicionais sobre o tipo de texto e logs JSON.

Muitos aplicativos e serviços registram informações em arquivos JSON em vez de serviços de registro em log padrão, como o log de eventos do Windows ou Syslog. Esses dados podem ser coletados com Agente do Azure Monitor e armazenados em um workspace 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 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 será 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 delimitada por vírgulas.

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 do computador com o Agente do Azure Monitor no diretório que está sendo monitorado.
  • Cada registro deve ser delineado com um fim de linha.
  • O arquivo deve usar a codificação ASCII ou UTF-8. Não há suporte para outros formatos, como UTF-16.
  • Novos registros devem ser acrescentados 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. Não há suporte para o formato de corpo JSON. Confira o exemplo abaixo.

Siga as seguintes recomendações para garantir que você não tenha problemas de perda de dados ou desempenho:

  • Crie um novo arquivo de log todos os dias para que você possa limpar arquivos antigos facilmente.
  • Limpe continuamente 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 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 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.

Tabela personalizada

Antes de coletar dados de log de um arquivo JSON, você deve criar uma tabela personalizada no workspace 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 por um agente do Log Analytics. Os agentes herdados não conseguirão gravar na tabela depois que o primeiro agente do Azure Monitor gravar nela. Crie uma tabela a ser usada pelo agente do Azure Monitor para evitar a perda de dados do agente do Log Analytics.

Por exemplo, você pode usar o script do PowerShell a seguir 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

Observação

A ingestão de arquivo personalizado JSON baseada em agente está atualmente em versão prévia e ainda não tem uma experiência de interface do usuário no portal. Embora você possa criar a DCR usando o portal, deve modificá-la para definir as colunas no fluxo de entrada. Esta seção inclui detalhes sobre como criar o DCR usando um modelo do ARM.

Esquema de fluxo de entrada

Observação

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

Os arquivos JSON incluem um nome de propriedade com cada valor e o fluxo de entrada na DCR precisa incluir uma coluna que corresponda ao nome de cada propriedade. Você precisa modificar a seção columns do modelo do ARM com as colunas do 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.

Coluna Type Descrição
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 workspace do Log Analytics se ele não estiver incluído no fluxo de entrada.
FilePath string Se você adicionar essa coluna ao fluxo de entrada na 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 em que você pode definir explicitamente o fluxo de entrada.
Computer string Se você adicionar esta 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 em que 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 de source. Caso contrário, modifique a seção transformKql do modelo do ARM com uma consulta KQL que retorna o esquema necessário.

Modelo de ARM

Use o modelo do ARM a seguir 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 ao implantar o modelo.

Configuração Descrição
Nome da regra de coleta de dados Nome exclusivo para o DCR.
ID do recurso do ponto de extremidade de coleta de dados ID do recurso do DCE (ponto de extremidade de coleta de dados).
Localidade Região para o DCR. Precisa ser o mesmo local que o workspace do Log Analytics.
Padrões de arquivo Identifica o local e o nome dos arquivos de log no disco local. Use um caractere curinga para nomes de arquivo que variam, por exemplo, quando um novo arquivo é criada 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 workspace do Log Analytics.
ID do recurso do espaço de trabalho ID do recurso do workspace do Log Analytics com a tabela de destino.

Importante

Quando você criar o DCR usando um modelo do ARM, ainda precisará 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')]"
                    }
                ]
            }
        }
    ]
}

Solução de problemas

Siga as etapas a seguir se você não estiver coletando dados do log JSON 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 do fluxo de entrada na 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 no esquema correto.
  • Consulte Verificar operação para verificar se o agente está operacional e se os dados estão sendo recebidos.

Próximas etapas

Saiba mais sobre: