Omvandlingar av datainsamling i Azure Monitor

Med transformeringar i Azure Monitor kan du filtrera eller ändra inkommande data innan de skickas till en Log Analytics-arbetsyta. Den här artikeln innehåller en grundläggande beskrivning av transformeringar och hur de implementeras. Den innehåller länkar till annat innehåll för att skapa en transformering.

Transformeringar utförs i Azure Monitor i datainmatningspipelinen när datakällan levererar data och innan de skickas till målet. Datakällan kan utföra sin egen filtrering innan data skickas, men förlitar sig sedan på omvandlingen för ytterligare manipulering innan den skickas till målet.

Transformeringar definieras i en datainsamlingsregel (DCR) och använder en KQL-instruktion (Kusto-frågespråk) som tillämpas individuellt på varje post i inkommande data. Den måste förstå formatet på inkommande data och skapa utdata i den struktur som förväntas av målet.

Följande diagram illustrerar omvandlingsprocessen för inkommande data och visar en exempelfråga som kan användas. Mer information om hur du skapar transformeringsfrågor finns i Struktur för omvandling i Azure Monitor .

Diagram som visar inmatningstidstransformering för inkommande data.

Varför du ska använda transformeringar

I följande tabell beskrivs de olika mål som du kan uppnå med hjälp av transformeringar.

Kategori Information
Ta bort känsliga data Du kanske har en datakälla som skickar information som du inte vill lagra av sekretess- eller tillförlitlighetsskäl.

Filtrera känslig information. Filtrera bort hela rader eller vissa kolumner som innehåller känslig information.

Fördunkla känslig information. Ersätt information som siffror i en IP-adress eller ett telefonnummer med ett gemensamt tecken.

Skicka till en alternativ tabell. Skicka känsliga poster till en alternativ tabell med olika rollbaserad konfiguration av åtkomstkontroll.
Utöka data med mer eller beräknad information Använd en transformering för att lägga till information till data som tillhandahåller affärskontext eller förenklar frågor mot data senare.

Lägg till en kolumn med mer information. Du kan till exempel lägga till en kolumn som identifierar om en IP-adress i en annan kolumn är intern eller extern.

Lägg till affärsspecifik information. Du kan till exempel lägga till en kolumn som anger en företagsdivision baserat på platsinformation i andra kolumner.
Minska datakostnader Eftersom du debiteras inmatningskostnad för data som skickas till en Log Analytics-arbetsyta vill du filtrera bort alla data som du inte behöver för att minska kostnaderna.

Ta bort hela rader. Du kan till exempel ha en diagnostikinställning för att samla in resursloggar från en viss resurs men inte kräva alla loggposter som genereras. Skapa en transformering som filtrerar bort poster som matchar ett visst villkor.

Ta bort en kolumn från varje rad. Dina data kan till exempel innehålla kolumner med data som är redundanta eller har minimalt värde. Skapa en transformering som filtrerar bort kolumner som inte krävs.

Parsa viktiga data från en kolumn. Du kan ha en tabell med värdefulla data begravda i en viss kolumn. Använd en transformering för att parsa värdefulla data till en ny kolumn och ta bort originalet.

Skicka vissa rader till grundläggande loggar. Skicka rader i dina data som kräver grundläggande frågefunktioner till grundläggande loggtabeller för en lägre inmatningskostnad.
Formatera data för målet Du kan ha en datakälla som skickar data i ett format som inte matchar måltabellens struktur. Använd en transformering för att formatera om data till det obligatoriska schemat.

Tabeller som stöds

Se Tabeller som stöder transformeringar i Azure Monitor-loggar för en lista över de tabeller som kan användas med transformeringar. Du kan också använda Azure Monitor-datareferensen som visar attributen för varje tabell, inklusive om den stöder transformeringar. Förutom dessa tabeller stöds även anpassade tabeller (suffix för _CL).

  • Alla Azure-tabeller som anges i Tabeller som stöder transformeringar i Azure Monitor-loggar. Du kan också använda Azure Monitor-datareferensen som visar attributen för varje tabell, inklusive om den stöder transformeringar.
  • Alla anpassade tabeller som skapats för Azure Monitor-agenten. (Anpassad MMA-tabell kan inte använda transformeringar)

Skapa en transformering

Det finns flera metoder för att skapa transformeringar beroende på datainsamlingsmetoden. I följande tabell visas vägledning för olika metoder för att skapa transformeringar.

Datainsamling Referens
Loggar inmatnings-API Skicka data till Azure Monitor-loggar med hjälp av REST API (Azure-portalen)
Skicka data till Azure Monitor-loggar med hjälp av REST API (Azure Resource Manager-mallar)
Virtuell dator med Azure Monitor-agent Lägga till transformering i Azure Monitor-loggen
Kubernetes-kluster med containerinsikter Datatransformeringar i Container Insights
Azure Event Hubs Självstudie: Mata in händelser från Azure Event Hubs i Azure Monitor-loggar (offentlig förhandsversion)

Flera mål

Med transformeringar kan du skicka data till flera mål på en Log Analytics-arbetsyta med hjälp av en enda DCR. Du anger en KQL-fråga för varje mål och resultatet av varje fråga skickas till motsvarande plats. Du kan skicka olika datauppsättningar till olika tabeller eller använda flera frågor för att skicka olika datauppsättningar till samma tabell.

Du kan till exempel skicka händelsedata till Azure Monitor med hjälp av API:et för logginmatning. De flesta händelser bör skickas till en analystabell där de kan frågas regelbundet, medan granskningshändelser ska skickas till en anpassad tabell som konfigurerats för grundläggande loggar för att minska kostnaden.

Om du vill använda flera mål måste du för närvarande antingen skapa en ny domänkontrollant manuellt eller redigera en befintlig. Se avsnittet Exempel för exempel på DCR:er som använder flera mål.

Viktigt!

För närvarande måste tabellerna i DCR finnas på samma Log Analytics-arbetsyta. Om du vill skicka till flera arbetsytor från en enda datakälla använder du flera domänkontrollanter och konfigurerar ditt program för att skicka data till var och en.

Diagram som visar transformering som skickar data till flera tabeller.

Övervaka transformeringar

Mer information om loggar och mått som övervakar hälsotillstånd och prestanda för transformeringar finns i Övervaka och felsöka DCR-datainsamling i Azure Monitor . Detta inkluderar att identifiera eventuella fel som inträffar i KQL och mått för att spåra deras körningstid.

Kostnad för transformeringar

Även om själva omvandlingarna inte medför direkta kostnader kan följande scenarier resultera i ytterligare avgifter:

  • Om en transformering ökar storleken på inkommande data, till exempel genom att lägga till en beräknad kolumn, debiteras du standardinmatningshastigheten för extra data.
  • Om en transformering minskar inmatade data med mer än 50 % debiteras du för mängden filtrerade data över 50 %.

Använd följande formel för att beräkna databearbetningsavgiften till följd av transformeringar:
[GB filtreras bort av transformeringar] – ([GB-data som matas in av pipeline] / 2). Följande tabell visar exempel.

Data som matas in av pipeline Data som släppts av transformering Data som matas in av Log Analytics-arbetsytan Avgift för databearbetning Inmatningsavgift
20 GB 12 GB 8 GB 2 GB 1 8 GB
20 GB 8 GB 12 GB 0 GB 12 GB

1 Den här avgiften exkluderar avgiften för data som matas in av Log Analytics-arbetsytan.

För att undvika den här avgiften bör du filtrera inmatade data med hjälp av alternativa metoder innan du tillämpar transformeringar. På så sätt kan du minska mängden data som bearbetas av transformeringar och därmed minimera eventuella ytterligare kostnader.

Se Priser för Azure Monitor för aktuella avgifter för inmatning och kvarhållning av loggdata i Azure Monitor.

Viktigt!

Om Azure Sentinel är aktiverat för Log Analytics-arbetsytan finns det ingen avgift för filtreringsinmatning oavsett hur mycket data transformeringsfiltren filtrerar.

Exempel

Följande Resource Manager-mallar visar exempel-DCR:er med olika mönster. Du kan använda dessa mallar som utgångspunkt för att skapa domänkontrollanter med transformeringar för dina egna scenarier.

Enskilt mål

Följande exempel är en DCR för Azure Monitor Agent som skickar data till Syslog tabellen. I det här exemplet filtrerar omvandlingen data för poster med error i meddelandet.

{ 
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources" : [
        {
            "type": "Microsoft.Insights/dataCollectionRules", 
            "name": "singleDestinationDCR", 
            "apiVersion": "2021-09-01-preview", 
            "location": "eastus", 
            "properties": { 
              "dataSources": { 
                "syslog": [ 
                  { 
                    "name": "sysLogsDataSource", 
                    "streams": [ 
                      "Microsoft-Syslog" 
                    ], 
                    "facilityNames": [ 
                      "auth",
                      "authpriv",
                      "cron",
                      "daemon",
                      "mark",
                      "kern",
                      "mail",
                      "news",
                      "syslog",
                      "user",
                      "uucp"
                    ], 
                    "logLevels": [ 
                      "Debug", 
                      "Critical", 
                      "Emergency" 
                    ] 
                  } 
                ] 
              }, 
              "destinations": { 
                "logAnalytics": [ 
                  { 
                    "workspaceResourceId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace", 
                    "name": "centralWorkspace" 
                  } 
                ] 
              }, 
              "dataFlows": [ 
                { 
                  "streams": [ 
                    "Microsoft-Syslog" 
                  ], 
                  "transformKql": "source | where message has 'error'", 
                  "destinations": [ 
                    "centralWorkspace" 
                  ] 
                } 
              ] 
            }
        }
    ]
} 

Flera Azure-tabeller

Följande exempel är en DCR för data från LOGS Ingestion API som skickar data till både tabellerna Syslog och SecurityEvent . Den här domänkontrollanten kräver en separat dataFlow för var och en med olika transformKql och OutputStream för varje. I det här exemplet skickas alla inkommande data till Syslog tabellen medan skadliga data också skickas till tabellen SecurityEvent . Om du inte vill replikera skadliga data i båda tabellerna kan du lägga till en where instruktion i den första frågan för att ta bort dessa poster.

{ 
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources" : [
        { 
            "type": "Microsoft.Insights/dataCollectionRules", 
            "name": "multiDestinationDCR", 
            "location": "eastus", 
            "apiVersion": "2021-09-01-preview", 
            "properties": { 
                "dataCollectionEndpointId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-resource-group/providers//Microsoft.Insights/dataCollectionEndpoints/my-dce",
                "streamDeclarations": { 
                    "Custom-MyTableRawData": { 
                        "columns": [ 
                            { 
                                "name": "Time", 
                                "type": "datetime" 
                            }, 
                            { 
                                "name": "Computer", 
                                "type": "string" 
                            }, 
                            { 
                                "name": "AdditionalContext", 
                                "type": "string" 
                            } 
                        ] 
                    } 
                }, 
                "destinations": { 
                    "logAnalytics": [ 
                        { 
                            "workspaceResourceId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace", 
                            "name": "clv2ws1" 
                        }, 
                    ] 
                }, 
                "dataFlows": [ 
                    { 
                        "streams": [ 
                            "Custom-MyTableRawData" 
                        ], 
                        "destinations": [ 
                            "clv2ws1" 
                        ], 
                        "transformKql": "source | project TimeGenerated = Time, Computer, Message = AdditionalContext", 
                        "outputStream": "Microsoft-Syslog" 
                    }, 
                    { 
                        "streams": [ 
                            "Custom-MyTableRawData" 
                        ], 
                        "destinations": [ 
                            "clv2ws1" 
                        ], 
                        "transformKql": "source | where (AdditionalContext has 'malicious traffic!' | project TimeGenerated = Time, Computer, Subject = AdditionalContext", 
                        "outputStream": "Microsoft-SecurityEvent" 
                    } 
                ] 
            } 
        }
    ]
}

Kombination av Azure och anpassade tabeller

Följande exempel är en DCR för data från LOGS Ingestion API som skickar data till både Syslog tabellen och en anpassad tabell med data i ett annat format. Den här domänkontrollanten kräver en separat dataFlow för var och en med olika transformKql och OutputStream för varje. När du använder anpassade tabeller är det viktigt att se till att schemat för målet (din anpassade tabell) innehåller de anpassade kolumner (instruktioner för att lägga till eller ta bort anpassade kolumner) som matchar schemat för de poster som du skickar. Om posten till exempel har ett fält med namnet SyslogMessage, men den anpassade måltabellen bara har TimeGenerated och RawData, får du en händelse i den anpassade tabellen med endast fältet TimeGenerated ifyllt och fältet RawData är tomt. Fältet SyslogMessage tas bort eftersom schemat för måltabellen inte innehåller ett strängfält med namnet SyslogMessage.

{ 
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources" : [
        { 
            "type": "Microsoft.Insights/dataCollectionRules", 
            "name": "multiDestinationDCR", 
            "location": "eastus", 
            "apiVersion": "2021-09-01-preview", 
            "properties": { 
                "dataCollectionEndpointId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-resource-group/providers//Microsoft.Insights/dataCollectionEndpoints/my-dce",
                "streamDeclarations": { 
                    "Custom-MyTableRawData": { 
                        "columns": [ 
                            { 
                                "name": "Time", 
                                "type": "datetime" 
                            }, 
                            { 
                                "name": "Computer", 
                                "type": "string" 
                            }, 
                            { 
                                "name": "AdditionalContext", 
                                "type": "string" 
                            } 
                        ] 
                    } 
                }, 
                "destinations": { 
                    "logAnalytics": [ 
                        { 
                            "workspaceResourceId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace", 
                            "name": "clv2ws1" 
                        }, 
                    ] 
                }, 
                "dataFlows": [ 
                    { 
                        "streams": [ 
                            "Custom-MyTableRawData" 
                        ], 
                        "destinations": [ 
                            "clv2ws1" 
                        ], 
                        "transformKql": "source | project TimeGenerated = Time, Computer, SyslogMessage = AdditionalContext", 
                        "outputStream": "Microsoft-Syslog" 
                    }, 
                    { 
                        "streams": [ 
                            "Custom-MyTableRawData" 
                        ], 
                        "destinations": [ 
                            "clv2ws1" 
                        ], 
                        "transformKql": "source | extend jsonContext = parse_json(AdditionalContext) | project TimeGenerated = Time, Computer, AdditionalContext = jsonContext, ExtendedColumn=tostring(jsonContext.CounterName)", 
                        "outputStream": "Custom-MyTable_CL" 
                    } 
                ] 
            } 
        }
    ]
}

Nästa steg