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

Molte applicazioni registrano informazioni su file di testo o JSON anziché servizi di registrazione standard, ad esempio registro eventi di Windows o Syslog. Questo articolo illustra come raccogliere i dati di log dai file di testo e JSON nei computer monitorati usando l'agente di Monitoraggio di Azure creando una regola di raccolta dati.This article explain how to collect log data data files from text and JSON files on monitored machines using Azure Monitor Agent by creating a data collection rule (DCR).

Nota

L'inserimento JSON è attualmente disponibile in anteprima.

Prerequisiti

Per completare questa procedura, è necessario:

  • Area di lavoro Log Analytics in cui si hanno almeno i diritti di collaboratore.

  • Uno o due endpoint di raccolta dati, a seconda che la macchina virtuale e l'area di lavoro Log Analytics si trovino nella stessa area.

    Per altre informazioni, vedere Come configurare gli endpoint di raccolta dati in base alla distribuzione.

  • Autorizzazioni per creare oggetti Regola raccolta dati nell'area di lavoro.

  • Il testo JSON deve essere contenuto in una singola riga per l'inserimento corretto. Il formato del corpo JSON (file) non è supportato.

  • Una macchina virtuale, un set di scalabilità di macchine virtuali, un server abilitato per Arc locale o un agente di monitoraggio di Azure in un client locale Windows che scrive i log in un file di testo o JSON.

    Requisiti e procedure consigliate per i file di testo e JSON:

    • Archiviare i file nell'unità locale del computer in cui è in esecuzione l'agente di Monitoraggio di Azure e nella directory monitorata.
    • Delineare la fine di un record con una fine di riga.
    • Usare la codifica ASCII o UTF-8. Altri formati, ad esempio UTF-16, non sono supportati.
    • Creare un nuovo file di log ogni giorno in modo da poter rimuovere facilmente i vecchi file.
    • Eseguire la pulizia di tutti 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 sovrascrivere un file esistente con nuovi record. È consigliabile aggiungere nuovi record solo alla fine del file. La sovrascrittura causerà la perdita di dati.
    • Non rinominare un file con un nuovo nome e quindi aprire un nuovo file con lo stesso nome. Ciò potrebbe causare la perdita di dati.
    • 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.
    • Non rinominare un file che corrisponda al modello di analisi dei file con un nuovo nome che corrisponda anche al modello di analisi file. In questo modo i dati duplicati verranno inseriti.

Creazione di una tabella personalizzata

La tabella creata nello script ha due colonne:

  • TimeGenerated (datetime) [Obbligatorio]
  • RawData (string) [Facoltativo se lo schema di tabella specificato]
  • 'FilePath' (string) [Facoltativo]
  • YourOptionalColumn (string) [Facoltativo]

Lo schema di tabella predefinito per i dati di log raccolti dai file di testo è 'TimeGenerated' e 'RawData'. L'aggiunta di "FilePath" a uno dei due team è facoltativa. Se si conosce lo schema finale o l'origine è un log JSON, è possibile aggiungere le colonne finali nello script prima di creare la tabella. È sempre possibile aggiungere colonne usando l'interfaccia utente della tabella di Log Analytics in un secondo momento.

I nomi delle colonne e gli attributi JSON devono corrispondere esattamente per analizzare automaticamente la tabella. Sia le colonne che gli attributi JSON fanno distinzione tra maiuscole e minuscole. Ad esempio Rawdata , non raccoglierà i dati dell'evento. che deve essere RawData. L'inserimento rilascia gli attributi JSON che non hanno una colonna corrispondente.

Il modo più semplice per effettuare la chiamata REST è da una riga di comando di Azure Cloud PowerShell (CLI). Per aprire la shell, passare al portale di Azure, premere il pulsante Cloud Shell e selezionare PowerShell. Se questa è la prima volta che si usa Azure Cloud PowerShell, è necessario eseguire la procedura guidata di configurazione monouso.

Copiare e incollare questo script in PowerShell per creare la tabella nell'area di lavoro:

$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

Si dovrebbe ricevere una risposta 200 e i dettagli sulla tabella appena creata.

Creare una regola di raccolta dati per un file di testo o JSON

La regola di raccolta dati definisce:

  • Quali file di log di origine l'agente di Monitoraggio di Azure analizza i nuovi eventi.
  • Come Monitoraggio di Azure trasforma gli eventi durante l'inserimento.
  • Area di lavoro Log Analytics di destinazione e tabella a cui Monitoraggio di Azure invia i dati.

È possibile, ad esempio, definire una regola di raccolta dati per inviare dati da più computer a più aree di lavoro Log Analytics, incluse aree di lavoro in un'area o un tenant diverso. Creare la regola di raccolta dati nella stessa area dell'area di lavoro Log Analytics.

Nota

Per inviare dati tra tenant, è prima necessario abilitare Azure Lighthouse.

Per analizzare automaticamente il file di log JSON in una tabella personalizzata, seguire la procedura del modello di Resource Manager. I dati di testo possono essere trasformati in colonne usando la trasformazione in fase di inserimento.

Per creare la regola di raccolta dati nel portale di Azure:

  1. Nel menu Monitoraggio selezionare Regole di raccolta dati.

  2. Selezionare Crea per creare una nuova regola di raccolta dati e le relative associazioni.

    Screenshot che mostra il pulsante Crea nella schermata Regole di raccolta dati.

  3. Immettere un nome regola e specificare un endpoint sottoscrizione, gruppo di risorse, area, tipo di piattaforma e raccolta dati:

    • In Area viene specificata la regione in cui verrà creata la regola di raccolta dati. Le macchine virtuali e le relative associazioni possono trovarsi in qualsiasi sottoscrizione o gruppo di risorse presente nel tenant.
    • In Tipo di piattaforma viene specificato il tipo di risorse a cui può essere applicata questa regola. L'opzione Custom consente sia i tipi Windows che Linux.
    • Endpoint raccolta dati specifica l'endpoint di raccolta dati a cui l'agente di Monitoraggio di Azure invia i dati raccolti. Questo endpoint di raccolta dati deve trovarsi nella stessa area dell'area di lavoro Log Analytics. Per altre informazioni, vedere Come configurare gli endpoint di raccolta dati in base alla distribuzione.

    Screenshot che mostra la scheda Informazioni di base della schermata Regola raccolta dati.

  4. Nella scheda Risorse :

    1. Selezionare + Aggiungi risorse e associare le risorse alla regola di raccolta dati. Le risorse possono essere macchine virtuali, set di scalabilità di macchine virtuali e Azure Arc per server. Il portale di Azure installa l'agente di Monitoraggio di Azure nelle risorse che non sono già installate.

      Importante

      Il portale abilita l'identità gestita assegnata dal sistema nelle risorse di destinazione, insieme alle identità assegnate dall'utente esistenti, se presenti. Per le applicazioni esistenti, a meno che non si specifichi l'identità assegnata dall'utente nella richiesta, per impostazione predefinita il computer usa l'identità assegnata dal sistema.

    2. Selezionare Abilitare gli endpoint di raccolta dei dati.

    3. Facoltativamente, è possibile selezionare un endpoint di raccolta dati per ognuna delle macchine virtuali associate alla regola di raccolta dati. Nella maggior parte dei casi è consigliabile usare solo le impostazioni predefinite.

      Questo endpoint di raccolta dati invia i file di configurazione alla macchina virtuale e deve trovarsi nella stessa area della macchina virtuale. Per altre informazioni, vedere Come configurare gli endpoint di raccolta dati in base alla distribuzione.

    Screenshot che mostra la scheda Risorse della schermata Regola raccolta dati.

  5. Nella scheda Raccogli e recapita selezionare Aggiungi origine dati per aggiungere un'origine dati e impostare una destinazione.

  6. Nell'elenco a discesa Tipo di origine dati selezionare Log di testo personalizzati o Log JSON.

  7. Specifica le e seguenti informazioni:

    • Modello di file: identifica dove si trovano i file di log nel disco locale. È possibile immettere più modelli di file separati da virgole (in Linux, AMA versione 1.26 o successiva è necessario raccogliere da un elenco delimitato da virgole di modelli di file).

      Esempi di input validi:

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

      Nota

      Nella stessa directory esistono comunemente più file di log dello stesso tipo. Ad esempio, un computer potrebbe creare un nuovo file ogni giorno per impedire che il file di log aumenti troppo grande. Per raccogliere i dati di log in questo scenario, è possibile usare un carattere jolly di file. Usare il formato C:\directoryA\directoryB\*MyLog.txt per Windows e /var/*.log per Linux. Non è disponibile alcun supporto per i caratteri jolly della directory.

    • Nome tabella: nome della tabella di destinazione creata nell'area di lavoro Log Analytics. Per altre informazioni, vedere Creare una tabella personalizzata.

    • Delimitatore di record: verrà usato in futuro per consentire delimitatori diversi dalla fine della riga attualmente supportata (/r/n).

    • Trasformazione : aggiungere una trasformazione in fase di inserimento o lasciare come origine se non è necessario trasformare i dati raccolti.

  8. Nella scheda Destinazione aggiungere una o più destinazioni per l'origine dati. È possibile selezionare più destinazioni di uno stesso tipo o di tipi diversi. Ad esempio, è possibile selezionare più aree di lavoro Log Analytics (operazione nota anche come multihoming).

    Screenshot che mostra la scheda di destinazione della schermata Aggiungi origine dati per una regola di raccolta dati in portale di Azure.

  9. Selezionare Rivedi e crea per esaminare i dettagli della regola di raccolta dati e l'associazione con il set di macchine virtuali.

  10. Selezionare Crea per creare la regola di raccolta dati.

Nota

Possono essere necessari fino a 10 minuti prima che i dati vengano inviati alle destinazioni dopo aver creato la regola di raccolta dati.

Query di log di esempio

I nomi di colonna usati qui sono solo per esempio. I nomi delle colonne per il log saranno probabilmente diversi.

  • Contare il numero di eventi in base al codice.

    MyApp_CL
    | summarize count() by code
    

Regola di avviso di esempio

  • Creare una regola di avviso per qualsiasi evento di errore.

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

Risoluzione dei problemi

Usare la procedura seguente per risolvere i problemi relativi alla raccolta di log dai file di testo e JSON.

Controllare se sono stati inseriti dati nella tabella personalizzata

Per iniziare, verificare se sono stati inseriti record nella tabella di log personalizzata eseguendo la query seguente in Log Analytics:

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

Se i record non vengono restituiti, controllare le altre sezioni per individuare le possibili cause. Questa query cerca le voci negli ultimi due giorni, ma è possibile modificare per un altro intervallo di tempo. La visualizzazione dei nuovi dati nella tabella può richiedere da 5 a 7 minuti. L'agente di Monitoraggio di Azure raccoglie solo i dati scritti nel file di testo o JSON dopo aver associato la regola di raccolta dati alla macchina virtuale.

Verificare di aver creato una tabella personalizzata

È necessario creare una tabella di log personalizzata nell'area di lavoro Log Analytics prima di poter inviare dati.

Verificare che l'agente invii heartbeat correttamente

Verificare che l'agente di Monitoraggio di Azure comunichi correttamente eseguendo la query seguente in Log Analytics per verificare se sono presenti record nella tabella Heartbeat.

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

Verificare di aver specificato il percorso del log corretto nella regola di raccolta dati

La regola di raccolta dati avrà una sezione simile alla seguente. L'elemento filePatterns specifica il percorso del file di log da raccogliere dal computer agente. Controllare il computer agente per verificare che sia corretto.

"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"]
        }
    ]

Questo modello di file deve corrispondere ai log nel computer agente.

Screenshot dei file di log di testo nel computer agente.

Usare lo strumento di risoluzione dei problemi dell'agente di Monitoraggio di Azure

Usare lo strumento di risoluzione dei problemi dell'agente di Monitoraggio di Azure per cercare i problemi comuni e condividere i risultati con Microsoft.

Verificare che i log vengano popolati

L'agente raccoglierà solo nuovi contenuti scritti nel file di log da raccogliere. Se si sperimentano i log di raccolta da un file di testo o JSON, è possibile usare lo script seguente per generare log di esempio.

# 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)

Passaggi successivi

Altre informazioni su: