Condividi tramite


Raccogliere i log da un file JSON con l'agente di Monitoraggio di Azure

I log JSON personalizzati sono una delle origini dati usate in una regola di raccolta dati (DCR). Altri dettagli sulla creazione di regole di raccolta dati sono disponibili in Raccogliere dati con l'agente di Monitoraggio di Azure. Questo articolo fornisce dettagli aggiuntivi per il tipo di log di testo e JSON.

Molte applicazioni e servizi registreranno le informazioni in file JSON invece di servizi di registrazione standard, ad esempio registro eventi di Windows o Syslog. Questi dati possono essere raccolti con l'agente di Monitoraggio di Azure e archiviati in un'area di lavoro Log Analytics con i dati raccolti da altre origini.

Prerequisiti

Operazione di base

Il diagramma seguente illustra l'operazione basilare di raccolta dei dati di log da un file JSON.

  1. L'agente controlla tutti i file di log che corrispondono a un criterio di nomi specificato nel disco locale.
  2. Ogni voce nel log viene raccolta e inviata a Monitoraggio di Azure. Il flusso in ingresso definito dall'utente viene usato per analizzare i dati di log in colonne.
  3. Se lo schema del flusso in ingresso corrisponde allo schema della tabella di destinazione, viene usata una trasformazione predefinita.

Screenshot che mostra la query di log che restituisce i risultati della raccolta di file delimitata da virgole.

Requisiti e procedure consigliate per file JSON

Il file monitorato dall'agente di Monitoraggio di Azure deve soddisfare i requisiti seguenti:

  • Il file deve essere archiviato nell'unità locale del computer con l'agente di Monitoraggio di Azure nella directory monitorata.
  • Ogni record deve essere delineato con una fine riga.
  • Il file deve usare la codifica ASCII o UTF-8. Non sono supportati altri formati, ad esempio UTF-16.
  • I nuovi record devono essere aggiunti alla fine del file e non sovrascrivere i record precedenti. La sovrascrittura causerà la perdita di dati.
  • Il testo JSON deve essere contenuto in una singola riga. Il formato del corpo JSON non è supportato. Vedere l'esempio di seguito.

Attenersi alle raccomandazioni seguenti per assicurarsi che non si verifichino perdite di dati o problemi di prestazioni:

  • Creare un nuovo file di log ogni giorno in modo da poter pulire facilmente i file obsoleti.
  • Pulire continuamente i file di log nella directory monitorata. Il rilevamento di molti file di log può aumentare l'utilizzo della CPU e della memoria dell'agente. Attendere almeno 2 giorni per consentire l'elaborazione di tutti i log.
  • Non rinominare un file che corrisponde al modello di analisi dei file con un altro nome che corrisponde anche al modello di analisi dei file. Ciò potrebbe causare l’inserimento di dati duplicati.
  • Non rinominare o copiare file di log di grandi dimensioni che corrispondono al modello di analisi dei file nella directory monitorata. Se necessario, non superare i 50 MB al minuto.

Tabella personalizzata

Prima di poter raccogliere dati di log da un file JSON, è necessario creare una tabella personalizzata nell'area di lavoro Log Analytics per ricevere i dati. Lo schema della tabella deve corrispondere alle colonne nel flusso in ingresso, oppure è necessario aggiungere una trasformazione per assicurarsi che lo schema di output corrisponda alla tabella.

Avviso

Non è consigliabile usare una tabella personalizzata esistente usata dall'agente di Log Analytics. Gli agenti legacy non saranno in grado di scrivere nella tabella dopo che il primo agente di Monitoraggio di Azure lo scrive. Creare una nuova tabella per l'agente di Monitoraggio di Azure da usare per evitare la perdita di dati dell'agente di Log Analytics.

Ad esempio, è possibile usare lo script di PowerShell seguente per creare una tabella personalizzata con più colonne.

$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

Creare una regola di raccolta dati per un file JSON

Nota

L'inserimento basato su agente di file personalizzati JSON è attualmente in anteprima e non ha ancora un'esperienza completa dell'interfaccia utente nel portale. Anche se è possibile creare la regola di raccolta dati usando il portale, è necessario modificarla per definire le colonne nel flusso in ingresso. Questa sezione include informazioni dettagliate sulla creazione di DCR usando un modello di ARM.

Schema del flusso in ingresso

Nota

Il supporto multilinea che usa un indicatore orario ISO 8601 per gli eventi delimitati è previsto a metà ottobre 2024

I file JSON includono un nome di proprietà con ogni valore e il flusso in ingresso nella regola di raccolta dati deve includere una colonna corrispondente al nome di ogni proprietà. È necessario modificare la sezione columns del modello ARM con le colonne del log.

Nella tabella seguente vengono descritte le colonne facoltative che è possibile includere oltre alle colonne che definiscono i dati nel file di log.

Column Type Descrizione
TimeGenerated datetime Ora in cui è stato generato il record. Questo valore verrà popolato automaticamente con l'ora in cui il record viene aggiunto all'area di lavoro Log Analytics se non è inclusa nel flusso in ingresso.
FilePath string Se si aggiunge questa colonna al flusso in ingresso nella regola di raccolta dati, verrà popolata con il percorso del file di log. Questa colonna non viene creata automaticamente e non può essere aggiunta tramite il portale. È necessario modificare manualmente la regola di raccolta dati creata dal portale o creare la regola di raccolta dati usando un altro metodo in cui è possibile definire in modo esplicito il flusso in ingresso.
Computer string Se si aggiunge questa colonna al flusso in ingresso nella DCR, verrà popolata con il nome del computer con il file di log. Questa colonna non viene creata automaticamente e non può essere aggiunta tramite il portale. È necessario modificare manualmente la regola di raccolta dati creata dal portale o creare la regola di raccolta dati usando un altro metodo in cui è possibile definire in modo esplicito il flusso in ingresso.

Trasformazione

La trasformazione modifica potenzialmente il flusso in ingresso per filtrare i record o per modificare lo schema in modo che corrisponda alla tabella di destinazione. Se lo schema del flusso in ingresso è uguale alla tabella di destinazione, è possibile usare la trasformazione predefinita di source. In caso contrario, modificare la sezione transformKql del modello ARM con una query KQL che restituisce lo schema richiesto.

Modello ARM

Usare il modello ARM seguente per creare un DCR per la raccolta di file di log di testo, apportando le modifiche descritte nelle sezioni precedenti. Nella tabella seguente vengono descritti i parametri che richiedono valori quando si distribuisce il modello.

Impostazione Descrizione
Nome della regola di raccolta dati Nome univoco per il DCR.
ID risorsa endpoint raccolta dati ID risorsa dell'endpoint di raccolta dati (DCE).
Ufficio Area per il DCR. Deve essere la stessa posizione dell'area di lavoro Log Analytics.
Criteri dei file Identifica il percorso e il nome di file di log nel disco locale. Usare un carattere jolly per nomi di file che variano, ad esempio quando viene creato un nuovo file ogni giorno con un nuovo nome. È possibile immettere più modelli di file separati da virgole (AMA versione 1.26 o successiva necessaria per più modelli di file in Linux).

Esempi:
- C:\Logs\MyLog.json
- C:\Logs\MyLog*.json
- C:\App01\AppLog.json, C:\App02\AppLog.json
- /var/mylog.json
- /var/mylog*.json
Nome tabella Nome della tabella di destinazione nell'area di lavoro Log Analytics.
ID risorsa dell'area di lavoro ID risorsa dell'area di lavoro Log Analytics con la tabella di destinazione.

Importante

Quando si crea il DCR usando un modello ARM, è comunque necessario associare il DCR agli agenti che la useranno. È possibile modificare il registro di dominio nel portale di Azure e selezionare gli agenti come descritto in Aggiungere risorse

{
    "$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')]"
                    }
                ]
            }
        }
    ]
}

Risoluzione dei problemi

Seguire questa procedura se non si stanno raccogliendo dati dal log JSON previsto.

  • Verificare che i dati vengano scritti nel file di log da raccogliere.
  • Verificare che il nome e il percorso del file di log corrispondano al criterio di file specificato.
  • Verificare che lo schema del flusso in ingresso nella regola di raccolta dati corrisponda allo schema nel file di log.
  • Verificare che lo schema della tabella di destinazione corrisponda al flusso in ingresso o che sia presente una trasformazione che converta il flusso in ingresso nello schema corretto.
  • Vedere Verificare l'operazione per verificare se l'agente sia operativo e i dati vengano ricevuti.

Passaggi successivi

Altre informazioni su: