Dela via


Samla in loggar från en JSON-fil med Azure Monitor Agent

Anpassade JSON-loggar är en av de datakällor som används i en datainsamlingsregel (DCR). Information om hur du skapar DCR finns i Samla in data med Azure Monitor Agent. Den här artikeln innehåller ytterligare information om typen av text- och JSON-loggar.

Många program och tjänster loggar information till en JSON-fil i stället för standardloggningstjänster som Windows-händelselogg eller Syslog. Dessa data kan samlas in med Azure Monitor Agent och lagras på en Log Analytics-arbetsyta med data som samlats in från andra källor.

Förutsättningar

Grundläggande åtgärd

Följande diagram visar den grundläggande åtgärden för att samla in loggdata från en json-fil.

  1. Agenten söker efter loggfiler som matchar ett angivet namnmönster på den lokala disken.
  2. Varje post i loggen samlas in och skickas till Azure Monitor. Den inkommande dataström som definieras av användaren används för att parsa loggdata i kolumner.
  3. En standardtransformering används om schemat för den inkommande strömmen matchar schemat för måltabellen.

Skärmbild som visar loggfrågan som returnerar resultat av kommaavgränsad filsamling.

JSON-filkrav och metodtips

Filen som Azure Monitor-agenten övervakar måste uppfylla följande krav:

  • Filen måste lagras på den lokala enheten på datorn med Azure Monitor-agenten i katalogen som övervakas.
  • Varje post måste vara avgränsad med en radslut.
  • Filen måste använda ASCII- eller UTF-8-kodning. Andra format som UTF-16 stöds inte.
  • Nya poster ska läggas till i slutet av filen och inte skriva över gamla poster. Om du skriver över orsakas dataförlust.
  • JSON-text måste finnas i en enda rad. JSON-brödtextformatet stöds inte. Se exemplet nedan.

Följ följande rekommendationer för att säkerställa att du inte får problem med dataförlust eller prestanda:

  • Skapa en ny loggfil varje dag så att du enkelt kan rensa gamla filer.
  • Rensa loggfiler kontinuerligt i den övervakade katalogen. Spårning av många loggfiler kan öka agentens cpu- och minnesanvändning. Vänta i minst 2 dagar för att ge gott om tid för att alla loggar ska bearbetas.
  • Byt inte namn på en fil som matchar filgenomsökningsmönstret till ett annat namn som också matchar filgenomsökningsmönstret. Detta gör att dubbletter av data matas in.
  • Byt inte namn på eller kopiera stora loggfiler som matchar filgenomsökningsmönstret till den övervakade katalogen. Om du måste ska du inte överskrida 50 MB per minut.

Anpassad tabell

Innan du kan samla in loggdata från en JSON-fil måste du skapa en anpassad tabell på Log Analytics-arbetsytan för att ta emot data. Tabellschemat måste matcha kolumnerna i den inkommande strömmen, eller så måste du lägga till en transformering för att säkerställa att utdataschemat matchar tabellen.

Varning

Du bör inte använda en befintlig anpassad tabell som används av Log Analytics-agenten. De äldre agenterna kan inte skriva till tabellen när den första Azure Monitor-agenten skriver till den. Skapa en ny tabell för Azure Monitor-agenten som ska användas för att förhindra dataförlust i Log Analytics-agenten.

Du kan till exempel använda följande PowerShell-skript för att skapa en anpassad tabell med flera kolumner.

$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

Skapa en datainsamlingsregel för en JSON-fil

Kommentar

Den agentbaserade anpassade JSON-filinmatningen är för närvarande i förhandsversion och har ännu ingen fullständig användargränssnittsupplevelse i portalen. Du kan skapa domänkontrollanten med hjälp av portalen, men du måste ändra den för att definiera kolumnerna i den inkommande strömmen. Det här avsnittet innehåller information om hur du skapar DCR med hjälp av en ARM-mall.

Schema för inkommande dataström

Kommentar

Stöd för flera rader som använder en ISO 8601-tidsstämpel för avgränsade händelser förväntas i mitten av oktober 2024

JSON-filer innehåller ett egenskapsnamn med varje värde, och den inkommande strömmen i DCR måste innehålla en kolumn som matchar namnet på varje egenskap. Du måste ändra avsnittet i columns ARM-mallen med kolumnerna från din logg.

I följande tabell beskrivs valfria kolumner som du kan inkludera utöver de kolumner som definierar data i loggfilen.

Column Type Beskrivning
TimeGenerated datetime Den tid då posten genererades. Det här värdet fylls i automatiskt med tiden då posten läggs till i Log Analytics-arbetsytan om den inte ingår i den inkommande strömmen.
FilePath sträng Om du lägger till den här kolumnen i den inkommande strömmen i DCR fylls den i med sökvägen till loggfilen. Den här kolumnen skapas inte automatiskt och kan inte läggas till med hjälp av portalen. Du måste ändra domänkontrollanten som skapats av portalen manuellt eller skapa DCR med en annan metod där du uttryckligen kan definiera den inkommande strömmen.
Computer sträng Om du lägger till den här kolumnen i den inkommande strömmen i DCR fylls den i med namnet på datorn med loggfilen. Den här kolumnen skapas inte automatiskt och kan inte läggas till med hjälp av portalen. Du måste ändra domänkontrollanten som skapats av portalen manuellt eller skapa DCR med en annan metod där du uttryckligen kan definiera den inkommande strömmen.

Transformering

Omvandlingen ändrar potentiellt den inkommande strömmen för att filtrera poster eller ändra schemat så att det matchar måltabellen. Om schemat för den inkommande strömmen är detsamma som måltabellen kan du använda standardtransformeringen av source. Annars ändrar du avsnittet i ARM-mallen transformKql med en KQL-fråga som returnerar det obligatoriska schemat.

ARM-mall

Använd följande ARM-mall för att skapa en DCR för att samla in textloggfiler, vilket gör ändringarna som beskrivs i föregående avsnitt. I följande tabell beskrivs de parametrar som kräver värden när du distribuerar mallen.

Inställning beskrivning
Namn på datainsamlingsregel Unikt namn för DCR.
Resurs-ID för datainsamlingsslutpunkt Resurs-ID för datainsamlingens slutpunkt (DCE).
Plats Region för DCR. Måste vara samma plats som Log Analytics-arbetsytan.
Filmönster Identifierar platsen och namnet på loggfilerna på den lokala disken. Använd ett jokertecken för filnamn som varierar, till exempel när en ny fil skapas varje dag med ett nytt namn. Du kan ange flera filmönster avgränsade med kommatecken (AMA version 1.26 eller senare krävs för flera filmönster i Linux).

Exempel:
- C:\Logs\MyLog.json
- C:\Logs\MyLog*.json
- C:\App01\AppLog.json, C:\App02\AppLog.json
- /var/mylog.json
- /var/mylog*.json
Tabellnamn Namn på måltabellen på Log Analytics-arbetsytan.
Resurs-ID för arbetsyta Resurs-ID för Log Analytics-arbetsytan med måltabellen.

Viktigt!

När du skapar DCR med hjälp av en ARM-mall måste du fortfarande associera DCR med de agenter som ska använda den. Du kan redigera domänkontrollanten i Azure Portal och välja agenterna enligt beskrivningen i Lägg till resurser

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

Felsökning

Gå igenom följande steg om du inte samlar in data från JSON-loggen som du förväntar dig.

  • Kontrollera att data skrivs till loggfilen som samlas in.
  • Kontrollera att loggfilens namn och plats matchar det filmönster som du har angett.
  • Kontrollera att schemat för den inkommande strömmen i DCR matchar schemat i loggfilen.
  • Kontrollera att schemat för måltabellen matchar den inkommande strömmen eller att du har en transformering som konverterar den inkommande strömmen till rätt schema.
  • Se Kontrollera åtgärden för att kontrollera om agenten är i drift och att data tas emot.

Nästa steg

Läs mer om: