Dela via


Samla in JSON-fil från en virtuell dator med Azure Monitor

Många program och tjänster loggar information till textfiler i stället för standardloggningstjänster som Windows-händelselogg eller Syslog. Om dessa data lagras i JSON-format kan de samlas in av Azure Monitor i en datainsamlingsregel (DCR) med en anpassad JSON-loggdatakälla .

Information om hur du skapar DCR finns i Samla in data med Azure Monitor Agent. Den här artikeln innehåller ytterligare information om JSON-loggtypen.

Anmärkning

Information om hur du arbetar med DCR-definitionen direkt eller för att distribuera med andra metoder, till exempel ARM-mallar, finns i Exempel på datainsamlingsregel (DCR) i Azure Monitor.

Förutsättningar

Förutom de krav som anges i Samla in data från en virtuell datorklient med Azure Monitor behöver du en anpassad tabell på en Log Analytics-arbetsyta för att ta emot data. Mer information om kraven i den här tabellen finns i Log Analytics-arbetsytetabellen .

Konfigurera anpassad JSON-fildatakälla

Skapa DCR med hjälp av processen i Samla in data från en virtuell datorklient med Azure Monitor. På fliken Samla in och leverera i DCR väljer du Anpassade JSON-loggar i listrutan Datakällatyp .

Skärmbild som visar konfigurationen av JSON-filsamlingen.

Alternativen som är tillgängliga i konfigurationen för anpassade JSON-loggar beskrivs i följande tabell.

Inställning Beskrivning
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. Du kan använda jokertecken (*) i filnamnet och i mappnamnet på nivån direkt ovanför filnamnet endast.

Exempel:
- C:\Logs\MyLog.txt
- C:\Logs\MyLog*.txt
-C:\Logs\IIS*\*.logs
- C:\App01\AppLog.txt, C:\App02\AppLog.txt
- /var/mylog.log
- /var/mylog*.log
Tabellnamn Namn på måltabellen i Log Analytics-arbetsytan.
Omvandla Inmatningstidstransformering för att filtrera poster eller formatera inkommande data för måltabellen. Använd source för att lämna inkommande data oförändrade. Se Transformering för ett exempel.
JSON-schema Egenskaper som ska samlas in från JSON-loggfilen och skickas till måltabellen. Den enda obligatoriska egenskapen är TimeGenerated. Om det här värdet inte tillhandahålls av JSON-filen används inmatningstiden. De andra kolumnerna som beskrivs i Log Analytics-arbetsytetabellen som inte krävs kan också inkluderas och fylls i automatiskt. Alla andra egenskaper fyller kolumner i tabellen med samma namn. Se till att egenskaper som matchar tabellkolumner använder samma datatyp som motsvarande kolumn.

Bilden ovan visar ett JSON-schema för JSON-exempelfilen som visas i JSON-filkrav och metodtips

Lägga till mål

Anpassade JSON-loggar kan bara skickas till en Log Analytics-arbetsyta där den lagras i den anpassade tabellen som du skapar. Lägg till ett mål av typen Azure Monitor-loggar och välj en Log Analytics-arbetsyta. Du kan bara lägga till en enskild arbetsyta i en DCR för en anpassad JSON-loggdatakälla. Om du behöver flera destinationer, skapa flera DCRs. Tänk dock på att detta kommer att skicka dubbletter av data till var och en vilket resulterar i ytterligare kostnader.

Skärmbild som visar konfigurationen av ett Azure Monitor-loggmål i en datainsamlingsregel.

JSON-filkrav och metodtips

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

  • Filen måste lagras på den lokala enheten på agentdatorn i katalogen som övervakas.
  • Varje post måste vara en JSON Line (även kallad JSONL eller NDJSON), vilket är en enda rad med JSON och avgränsas med ett slut på raden. JSON-brödtextformatet stöds inte. Se exemplet nedan.
  • 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.

Följande är ett exempel på en typisk JSON-loggfil som kan samlas in av Azure Monitor. Detta inkluderar fälten: Time, Code, Severity,Moduleoch 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."}

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

  • Rikta inte in dig på fler än 10 kataloger med loggfiler. Att avsöka för många kataloger leder till dåliga prestanda.
  • 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.

Log Analytics-arbetsytetabell

Agenten söker efter json-filer på den lokala disk som matchar det angivna namnmönstret. Varje post samlas in när den skrivs till loggen och parsas innan den skickas till den angivna tabellen på en Log Analytics-arbetsyta. Den anpassade tabellen på Log Analytics-arbetsytan som ska ta emot data måste finnas innan du skapar DCR.

Alla kolumner i tabellen som matchar namnet på ett fält i parsade Json-data fylls i med värdet från loggposten. I följande tabell beskrivs de obligatoriska och valfria kolumnerna i arbetsytetabellen utöver de kolumner som identifieras i dina JSON-data.

Kolumn Typ Krävs? Beskrivning
TimeGenerated tidpunkt Ja Den här kolumnen innehåller den tid då posten genererades och krävs i alla tabeller. Det här värdet fylls i automatiskt när posten läggs till i Log Analytics-arbetsytan. Du kan åsidosätta det här värdet med hjälp av en transformering för att ange TimeGenerated ett värde från loggposten.
Computer snöre Nej Om tabellen innehåller den här kolumnen fylls den i med namnet på den dator som loggposten samlades in från.
FilePath snöre Nej Om tabellen innehåller den här kolumnen fylls den i med sökvägen till loggfilen som loggposten samlades in från.

I följande exempel visas en fråga som returnerar data från en tabell som skapats för JSON-exempelfilen som visas ovan. Den samlades in med hjälp av en DCR med JSON-exempelschemat som visas ovan. Eftersom JSON-data inte innehåller en egenskap för TimeGeneratedanvänds inmatningstiden. Kolumnerna Computer och FilePath fylls också i automatiskt.

Skärmbild som visar loggfrågan som returnerar resultat från den insamlade JSON-loggen.

Skapa anpassad tabell

Om måltabellen inte redan finns måste du skapa den innan du skapar DCR. Se Skapa en anpassad tabell för olika metoder för att skapa en tabell. Du kan till exempel använda följande PowerShell-skript för att skapa en anpassad tabell för att ta emot data från JSON-exempelfilen ovan. Det här exemplet lägger också till valfria kolumner.

$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

Omvandling

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 transformKql i ARM-mallen med en KQL-fråga som returnerar det obligatoriska schemat.

I exemplet ovan har loggposten till exempel ett Time fält som innehåller den tid då loggposten skapades. I stället för att lagra detta som en separat kolumn i måltabellen kan du använda följande transformering för att mappa värdet för Time egenskapen till TimeGenerated.

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

Skärmbild som visar JSON-datakällans konfiguration med transformering.

Detta skulle resultera i följande loggfråga. Observera att Time kolumnen är tom och att värdet för egenskapen används för TimeGenerated.

Skärmbild som visar loggfrågan som returnerar resultatet av den insamlade JSON-loggen med transformering.

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