Condividi tramite


Raccogliere il file JSON dalla macchina virtuale con Monitoraggio di Azure

Molte applicazioni e servizi registreranno le informazioni in file di testo invece di servizi di registrazione standard, ad esempio registro eventi di Windows o Syslog. Se questi dati vengono archiviati in formato JSON, possono essere raccolti da Monitoraggio di Azure in una regola di raccolta dati con un'origine dati log JSON personalizzata.

Ulteriori dettagli sulla creazione di DCR sono disponibili in Raccogliere dati con l'agente di Monitoraggio di Azure. Questo articolo fornisce dettagli aggiuntivi per il tipo di log JSON.

Annotazioni

Per usare direttamente la definizione DCR o distribuire con altri metodi, ad esempio i modelli ARM, consulta gli esempi di regole di raccolta dati in Monitoraggio di Azure.

Prerequisiti

Oltre ai prerequisiti elencati in Raccogliere dati dal client di macchine virtuali con Monitoraggio di Azure, è necessaria una tabella personalizzata in un'area di lavoro Log Analytics per ricevere i dati. Per informazioni dettagliate sui requisiti di questa tabella, vedere la tabella dell'area di lavoro Log Analytics .

Configurare un'origine dati file JSON personalizzata

Creare la DCR usando il processo in Raccogliere dati dal client di macchina virtuale con Monitoraggio di Azure. Nella scheda Collect and deliver (Raccogli e recapita ) del DCR selezionare Custom JSON Logs (Log JSON personalizzati ) nell'elenco a discesa Tipo di origine dati .

Screenshot che mostra la configurazione della raccolta di file JSON.

Le opzioni disponibili nella configurazione dei log JSON personalizzati sono descritte nella tabella seguente.

Impostazione Descrizione
Criterio di 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ù pattern di file separati da virgole.

Esempi:
- C:\Logs\MyLog.txt
- C:\Logs\MyLog*.txt
- C:\App01\AppLog.txt, C:\App02\AppLog.txt
- /var/mylog.log
- /var/mylog*.log
Nome della tabella Nome della tabella di destinazione nell'area di lavoro Log Analytics.
Trasformare Trasformazione in fase di inserimento per filtrare i record o per formattare i dati in ingresso per la tabella di destinazione. Usare source per lasciare invariati i dati in ingresso. Per un esempio, vedere Trasformazione .
Schema JSON Proprietà da raccogliere dal file di log JSON e inviate alla tabella di destinazione. L'unica proprietà obbligatoria è TimeGenerated. Se questo valore non viene fornito dal file JSON, verrà usato il tempo di inserimento. Le altre colonne descritte nella tabella dell'area di lavoro Log Analytics non necessarie possono essere incluse e verranno popolate automaticamente. Tutte le altre proprietà popolano le colonne nella tabella con lo stesso nome. Verificare che le proprietà che corrispondono alle colonne della tabella usino lo stesso tipo di dati della colonna corrispondente.

L'immagine precedente mostra uno schema JSON per il file JSON di esempio illustrato nei requisiti e nelle procedure consigliate per i file JSON

Aggiungere destinazioni

I log JSON personalizzati possono essere inviati solo a un'area di lavoro Log Analytics in cui è archiviata nella tabella personalizzata creata. Aggiungere una destinazione di tipo Log di Monitoraggio di Azure e selezionare un'area di lavoro Log Analytics. È possibile aggiungere una singola area di lavoro a un record di dominio per un'origine dati di log JSON personalizzata. Se sono necessarie più destinazioni, creare più controller di dominio. Tenere presente, tuttavia, che invierà dati duplicati a ognuno di essi, con un costo aggiuntivo.

Screenshot che mostra la configurazione di una destinazione dei log di Azure Monitor in una regola di raccolta dati.

Requisiti e procedure consigliate per file JSON

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

  • Il file deve essere archiviato nell'unità locale della macchina dell'agente nella directory monitorata.
  • Ogni voce deve essere JSON Line (nota anche come JSONL o NDJSON) che è una singola riga di JSON e delimitata con una fine di riga. Il formato del corpo JSON non è supportato. Vedere l'esempio di seguito.
  • 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.

Di seguito è riportato un esempio di un tipico file di log JSON che può essere raccolto da Monitoraggio di Azure. Sono inclusi i campi , TimeCode, Severity,Module e Message.

{"Time":"2025-03-07 13:17:34","Code":1423,"Severity":"Error","Module":"Sales","Message":"Unable to connect to pricing service."}
{"Time":"2025-03-07 13:18:23","Code":1420,"Severity":"Information","Module":"Sales","Message":"Pricing service connection established."}
{"Time":"2025-03-07 15:45:13","Code":2011,"Severity":"Warning","Module":"Procurement","Message":"Module failed and was restarted."}
{"Time":"2025-03-07 15:53:31","Code":4100,"Severity":"Information","Module":"Data","Message":"Daily backup complete."}

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

  • Non usare più di 10 directory con i file di log. Il polling di troppe directory comporta prestazioni scarse.
  • 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 dell'area di lavoro Log Analytics

L'agente controlla tutti i file JSON nel disco locale che corrispondono al modello di nome specificato. Ogni voce viene raccolta mentre viene scritta nel log e quindi analizzata prima di essere inviata alla tabella specificata in un'area di lavoro Log Analytics. La tabella personalizzata nell'area di lavoro Log Analytics che riceverà i dati deve esistere prima di creare il Registro Azure Container.

Tutte le colonne della tabella che corrispondono al nome di un campo nei dati JSON analizzati verranno popolate con il valore della voce di log. La tabella seguente descrive le colonne obbligatorie e facoltative nella tabella dell'area di lavoro oltre alle colonne identificate nei dati JSON.

colonna TIPO Obbligatorio? Descrizione
TimeGenerated data e ora Questa colonna contiene l'ora in cui il record è stato generato ed è necessario in tutte le tabelle. Questo valore verrà popolato automaticamente con l'ora in cui il record viene aggiunto all'area di lavoro Log Analytics. È possibile eseguire l'override di questo valore usando una trasformazione per impostare TimeGenerated su un valore dell'entrata del log.
Computer corda NO Se la tabella include questa colonna, verrà popolata con il nome del computer da cui è stata raccolta la voce di log.
FilePath corda NO Se la tabella include questa colonna, verrà popolata con il percorso del file di log da cui è stata raccolta la voce di log.

L'esempio seguente mostra una query che restituisce i dati di una tabella creata per il file JSON di esempio illustrato in precedenza. È stato raccolto usando un DCR con lo schema JSON di esempio illustrato in precedenza. Poiché i dati JSON non includono una proprietà per TimeGenerated, viene usato il tempo di inserimento. Anche le Computer colonne e FilePath vengono popolate automaticamente.

Screenshot che mostra la query di log che restituisce i risultati del log JSON raccolto.

Creare una tabella personalizzata

Se la tabella di destinazione non esiste già, è necessario crearla prima di creare il DCR. Vedere Creare una tabella personalizzata per metodi diversi per creare una tabella. Ad esempio, è possibile usare lo script di PowerShell seguente per creare una tabella personalizzata per ricevere i dati dal file JSON di esempio precedente. In questo esempio vengono aggiunte anche le colonne facoltative.

$tableParams = @'
{
    "properties": {
        "schema": {
               "name": "{TableName}_CL",
               "columns": [
                    {
                        "name": "TimeGenerated",
                        "type": "dateTime"
                    }, 
                    {
                        "name": "Computer",
                        "type": "string"
                    },
                    {
                        "name": "FilePath",
                        "type": "string"
                    },
                    {
                        "name": "Time",
                        "type": "dateTime"
                    },
                    {
                        "name": "Code",
                        "type": "int"
                    },
                    {
                        "name": "Severity",
                        "type": "string"
                    },
                    {
                        "name": "Module",
                        "type": "string"
                    },
                    {
                        "name": "Message",
                        "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

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.

Nell'esempio precedente, ad esempio, la voce di log include un Time campo che contiene l'ora di creazione della voce di log. Anziché archiviare questa proprietà come colonna separata nella tabella di destinazione, è possibile usare la trasformazione seguente per eseguire il mapping del valore della Time proprietà a TimeGenerated.

source | extend TimeGenerated = todatetime(Time) | project-away Time

Screenshot che mostra la configurazione della sorgente dati JSON con trasformazione.

Ciò comporta la query di log seguente. Si noti che la Time colonna è vuota e il valore di tale proprietà viene usato per TimeGenerated.

Screenshot che mostra una query di log che restituisce i risultati di un log JSON raccolto e trasformato.

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 pattern 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