Transformaties van gegevensverzameling in Azure Monitor

Met transformaties in Azure Monitor kunt u binnenkomende gegevens filteren of wijzigen voordat deze naar een Log Analytics-werkruimte worden verzonden. Dit artikel bevat een eenvoudige beschrijving van transformaties en hoe ze worden geïmplementeerd. Het biedt koppelingen naar andere inhoud voor het maken van een transformatie.

Transformaties worden uitgevoerd in Azure Monitor in de pijplijn voor gegevensopname nadat de gegevensbron de gegevens levert en voordat deze naar het doel worden verzonden. De gegevensbron kan een eigen filter uitvoeren voordat gegevens worden verzonden, maar vervolgens afhankelijk zijn van de transformatie voor verdere manipulatie voordat deze naar de bestemming wordt verzonden.

Transformaties worden gedefinieerd in een DCR (Data Collection Rule) en gebruiken een Kusto-querytaal -instructie (KQL) die afzonderlijk wordt toegepast op elke vermelding in de binnenkomende gegevens. Het moet de indeling van de binnenkomende gegevens begrijpen en uitvoer maken in de structuur die door de bestemming wordt verwacht.

Het volgende diagram illustreert het transformatieproces voor binnenkomende gegevens en toont een voorbeeldquery die kan worden gebruikt. Zie Structuur van transformatie in Azure Monitor voor meer informatie over het bouwen van transformatiequery's.

Diagram met opnametijdtransformatie voor binnenkomende gegevens.

Redenen om transformaties te gebruiken

In de volgende tabel worden de verschillende doelen beschreven die u kunt bereiken met behulp van transformaties.

Categorie Details
Gevoelige gegevens verwijderen Mogelijk hebt u een gegevensbron die informatie verzendt die u niet wilt opslaan om privacy- of compliancyredenen.

Gevoelige informatie filteren. Volledige rijen of bepaalde kolommen filteren die gevoelige informatie bevatten.

Gevoelige informatie verdoezelen. Vervang informatie zoals cijfers in een IP-adres of telefoonnummer door een gemeenschappelijk teken.

Verzenden naar een alternatieve tabel. Gevoelige records verzenden naar een alternatieve tabel met een andere configuratie voor toegangsbeheer op basis van rollen.
Gegevens verrijken met meer of berekende informatie Gebruik een transformatie om informatie toe te voegen aan gegevens die zakelijke context bieden of het later uitvoeren van query's op de gegevens vereenvoudigt.

Voeg een kolom toe met meer informatie. U kunt bijvoorbeeld een kolom toevoegen die aangeeft of een IP-adres in een andere kolom intern of extern is.

Voeg bedrijfsspecifieke informatie toe. U kunt bijvoorbeeld een kolom toevoegen die een bedrijfsafdeling aangeeft op basis van locatiegegevens in andere kolommen.
Gegevenskosten verlagen Omdat er kosten voor opname in rekening worden gebracht voor gegevens die naar een Log Analytics-werkruimte worden verzonden, wilt u alle gegevens filteren die u niet nodig hebt om uw kosten te verlagen.

Volledige rijen verwijderen. U hebt bijvoorbeeld een diagnostische instelling voor het verzamelen van resourcelogboeken van een bepaalde resource, maar niet alle logboekvermeldingen die worden gegenereerd. Maak een transformatie waarmee records worden gefilterd die voldoen aan een bepaald criterium.

Verwijder een kolom uit elke rij. Uw gegevens kunnen bijvoorbeeld kolommen bevatten met gegevens die overbodig zijn of minimale waarde hebben. Maak een transformatie waarmee kolommen worden gefilterd die niet vereist zijn.

Belangrijke gegevens uit een kolom parseren. Mogelijk hebt u een tabel met waardevolle gegevens in een bepaalde kolom. Gebruik een transformatie om de waardevolle gegevens te parseren in een nieuwe kolom en het origineel te verwijderen.

Bepaalde rijen verzenden naar basislogboeken. Rijen in uw gegevens verzenden waarvoor basisquerymogelijkheden nodig zijn voor eenvoudige logboektabellen voor een lagere opnamekosten.
Gegevens opmaken voor bestemming Mogelijk hebt u een gegevensbron die gegevens verzendt in een indeling die niet overeenkomt met de structuur van de doeltabel. Gebruik een transformatie om de gegevens opnieuw op te maken in het vereiste schema.

Ondersteunde tabellen

Zie Tabellen die transformaties ondersteunen in Azure Monitor-logboeken voor een lijst met tabellen die kunnen worden gebruikt met transformaties. U kunt ook de Azure Monitor-gegevensreferentie gebruiken waarin de kenmerken voor elke tabel worden vermeld, inclusief of deze transformaties ondersteunt. Naast deze tabellen worden ook aangepaste tabellen (achtervoegsel van _CL) ondersteund.

Een transformatie maken

Er zijn meerdere methoden om transformaties te maken, afhankelijk van de methode voor gegevensverzameling. De volgende tabel bevat richtlijnen voor verschillende methoden voor het maken van transformaties.

Gegevens verzamelen Verwijzing
Logboekopname-API Gegevens verzenden naar Azure Monitor-logboeken met behulp van REST API (Azure Portal)
Gegevens verzenden naar Azure Monitor-logboeken met behulp van REST API (Azure Resource Manager-sjablonen)
Virtuele machine met Azure Monitor-agent Transformatie toevoegen aan Azure Monitor-logboek
Kubernetes-cluster met Container Insights Gegevenstransformaties in Container Insights
Azure Event Hubs Zelfstudie: Gebeurtenissen van Azure Event Hubs opnemen in Azure Monitor-logboeken (openbare preview)

Meerdere bestemmingen

Met transformaties kunt u gegevens verzenden naar meerdere bestemmingen in een Log Analytics-werkruimte met behulp van één DCR. U geeft een KQL-query op voor elke bestemming en de resultaten van elke query worden naar de bijbehorende locatie verzonden. U kunt verschillende gegevenssets naar verschillende tabellen verzenden of meerdere query's gebruiken om verschillende gegevenssets naar dezelfde tabel te verzenden.

U kunt bijvoorbeeld gebeurtenisgegevens naar Azure Monitor verzenden met behulp van de Logboekopname-API. De meeste gebeurtenissen moeten worden verzonden naar een analysetabel waar deze regelmatig kan worden opgevraagd, terwijl controlegebeurtenissen moeten worden verzonden naar een aangepaste tabel die is geconfigureerd voor basislogboeken om uw kosten te verlagen.

Als u meerdere bestemmingen wilt gebruiken, moet u momenteel handmatig een nieuwe DCR maken of een bestaande dcr bewerken. Zie de sectie Voorbeelden voor voorbeelden van DCR's die meerdere bestemmingen gebruiken.

Belangrijk

Momenteel moeten de tabellen in de DCR zich in dezelfde Log Analytics-werkruimte bevinden. Als u vanuit één gegevensbron naar meerdere werkruimten wilt verzenden, gebruikt u meerdere DCR's en configureert u uw toepassing om de gegevens naar elke werkruimte te verzenden.

Diagram met transformatie waarmee gegevens naar meerdere tabellen worden verzonden.

Transformaties bewaken

Zie DcR-gegevensverzameling bewaken en problemen oplossen in Azure Monitor voor meer informatie over logboeken en metrische gegevens die de status en prestaties van transformaties bewaken. Dit omvat het identificeren van eventuele fouten die optreden in de KQL en metrische gegevens om de duur van de uitvoering bij te houden.

Kosten voor transformaties

Hoewel voor transformaties zelf geen directe kosten in rekening worden gebracht, kunnen de volgende scenario's leiden tot extra kosten:

  • Als een transformatie de grootte van de binnenkomende gegevens verhoogt, bijvoorbeeld door een berekende kolom toe te voegen, wordt het standaardopnametarief voor de extra gegevens in rekening gebracht.
  • Als een transformatie de opgenomen gegevens met meer dan 50% vermindert, worden er kosten in rekening gebracht voor de hoeveelheid gefilterde gegevens boven 50%.

Gebruik de volgende formule om de kosten voor gegevensverwerking te berekenen die het gevolg zijn van transformaties:
[GB gefilterd op transformaties] - ([GB gegevens opgenomen per pijplijn] / 2). In de volgende tabel ziet u voorbeelden.

Gegevens die zijn opgenomen per pijplijn Gegevens verwijderd door transformatie Gegevens opgenomen door Log Analytics-werkruimte Kosten voor gegevensverwerking Opnamekosten
20 GB 12 GB 8 GB 2 GB 1 8 GB
20 GB 8 GB 12 GB 0 GB 12 GB

1 Deze kosten zijn exclusief de kosten voor gegevens die zijn opgenomen door de Log Analytics-werkruimte.

Om deze kosten te voorkomen, moet u opgenomen gegevens filteren met behulp van alternatieve methoden voordat u transformaties toepast. Hierdoor kunt u de hoeveelheid gegevens die worden verwerkt door transformaties verminderen en daarom eventuele extra kosten minimaliseren.

Zie de prijzen van Azure Monitor voor de huidige kosten voor opname en retentie van logboekgegevens in Azure Monitor.

Belangrijk

Als Azure Sentinel is ingeschakeld voor de Log Analytics-werkruimte, worden er geen filteropnamekosten in rekening gebracht, ongeacht hoeveel gegevens de transformatiefilters bevatten.

Voorbeelden

In de volgende Resource Manager-sjablonen ziet u voorbeeld-DCR's met verschillende patronen. U kunt deze sjablonen gebruiken als uitgangspunt voor het maken van DCR's met transformaties voor uw eigen scenario's.

Eén bestemming

Het volgende voorbeeld is een DCR voor Azure Monitor Agent waarmee gegevens naar de Syslog tabel worden verzonden. In dit voorbeeld worden met de transformatie de gegevens voor records in het bericht gefilterd error .

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

Meerdere Azure-tabellen

Het volgende voorbeeld is een DCR voor gegevens uit de Logboekopname-API die gegevens naar zowel de als de SyslogSecurityEvent tabellen verzendt. Deze DCR vereist een afzonderlijke dataFlow voor elk met een andere transformKql en OutputStream voor elk. In dit voorbeeld worden alle binnenkomende gegevens naar de Syslog tabel verzonden, terwijl er ook schadelijke gegevens naar de SecurityEvent tabel worden verzonden. Als u de schadelijke gegevens in beide tabellen niet wilt repliceren, kunt u een where instructie toevoegen aan de eerste query om deze records te verwijderen.

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

Combinatie van Azure- en aangepaste tabellen

Het volgende voorbeeld is een DCR voor gegevens uit de Logboekopname-API waarmee gegevens worden verzonden naar zowel de Syslog tabel als een aangepaste tabel met de gegevens in een andere indeling. Deze DCR vereist een afzonderlijke dataFlow voor elk met een andere transformKql en OutputStream voor elk. Wanneer u aangepaste tabellen gebruikt, is het belangrijk om ervoor te zorgen dat het schema van de bestemming (uw aangepaste tabel) de aangepaste kolommen bevat (instructies voor het toevoegen of verwijderen van aangepaste kolommen) die overeenkomen met het schema van de records die u verzendt. Als uw record bijvoorbeeld een veld heeft met de naam SyslogMessage, maar de aangepaste doeltabel alleen TimeGenerated en RawData heeft, ontvangt u een gebeurtenis in de aangepaste tabel waarin alleen het veld TimeGenerated is ingevuld en het veld RawData leeg is. Het veld SyslogMessage wordt verwijderd omdat het schema van de doeltabel geen tekenreeksveld bevat met de naam 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" 
                    } 
                ] 
            } 
        }
    ]
}

Volgende stappen