Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Transformationen in Azure Monitor ermöglichen es Ihnen, eingehende Daten zu filtern oder zu ändern, bevor sie an einen Log Analytics-Arbeitsbereich gesendet werden. Dieser Artikel enthält Beispielabfragen für häufige Anwendungsfälle, die Sie nutzen können, um mit der Erstellung Ihrer eigenen Transformation loszulegen. Weitere Informationen zum Testen dieser Transformationen und dem Hinzufügen zu einer Datensammlungsregel (DCR) finden Sie unter Erstellen einer Transformation in Azure Monitor.
Reduzieren der Datenkosten
Da Ihnen für alle Daten, die an einen Log Analytics-Arbeitsbereich gesendet werden, Erfassungskosten in Rechnung gestellt werden, möchten Sie alle Daten herausfiltern, die Sie nicht benötigen, um Ihre Kosten zu senken.
Filtern von Datenzeilen
Verwenden Sie eine where-Anweisung, um eingehende Daten zu filtern, die bestimmten Anforderungen entsprechen. Wenn der eingehende Datensatz die Anweisung nicht erfüllt, wird der Datensatz nicht an das Ziel gesendet. Im folgenden Beispiel werden nur Datensätze mit einem Schweregrad von Critical erfasst.
source | where severity == "Critical"
Filtern von Datenspalten
Entfernen Sie Spalten aus der Datenquelle, die nicht erforderlich sind, um Kosten bei der Datenerfassung einzusparen. Verwenden Sie eine project-Anweisung, um die Spalten in der Ausgabe anzugeben, oder verwenden Sie project-away, um nur zu entfernende Spalten anzugeben. Im folgenden Beispiel wird die Spalte RawData aus der Ausgabe entfernt.
source | project-away RawData
Wichtige Daten aus einer Spalte analysieren
Möglicherweise haben Sie eine Spalte mit wichtigen Daten, die in übermäßigem Text begraben sind. Behalten Sie nur die wertvollen Daten, und entfernen Sie den nicht benötigten Text. Verwenden Sie Zeichenfolgenfunktionen wie substring und extract, um die gewünschten Daten zu parsen. Sie können die Daten auch mit parse oder split parsen, um eine einzelne Spalte in mehrere Werte aufzuteilen und den gewünschten Wert auszuwählen. Verwenden Sie dann extend, um eine neue Spalte mit den analysierten Daten zu erstellen und project-away, um die ursprüngliche Spalte zu entfernen.
Warnung
Tipps zur Verwendung komplexer Parse-Befehle finden Sie unter Aufteilen großer Parse-Befehle.
Im folgenden Beispiel enthält die Spalte RequestContext JSON mit dem Arbeitsbereich ResourceId. Die Funktionen parse_json und split werden verwendet, um den einfachen Namen des Arbeitsbereichs zu extrahieren. Für diesen Wert wird eine neue Spalte erstellt, und die anderen Spalten werden entfernt.
source
| extend Context = parse_json(RequestContext)
| extend Workspace_CF = tostring(Context['workspaces'][0])
| extend WorkspaceName_CF = split(Workspace_CF,"/")[8]
| project-away RequestContext, Context, Workspace_CF
Senden von Zeilen an Basisprotokolle
Senden Sie Zeilen in Ihren Daten, die grundlegende Abfragefunktionen erfordern, an Basisprotokolltabellen, um die Erfassungskosten zu senken. Details zum Senden von Daten an mehrere Tabellen finden Sie unter Senden von Daten an mehrere Tabellen.
Entfernen vertraulicher Daten
Möglicherweise verfügen Sie über eine Datenquelle, die Informationen sendet, die aus Datenschutz- oder Compliancegründen nicht gespeichert werden sollen.
Filtern vertraulicher Informationen
Verwenden Sie die unter Reduzieren von Datenkosten beschriebenen Strategien, um ganze Zeilen oder bestimmte Spalten, die vertrauliche Informationen enthalten, herauszufiltern. Im folgenden Beispiel wird die Spalte ClientIP aus der Ausgabe entfernt.
source | project-away ClientIP
Verschleiern sensibler Informationen
Verwenden Sie Zeichenfolgenfunktionen, um Informationen wie Ziffern in einer IP-Adresse oder Telefonnummern durch ein allgemeines Zeichen zu ersetzen. Im folgenden Beispiel wird der Benutzername in einer E-Mail-Adresse durch "*****" ersetzt.
source | extend Email = replace_string(Email,substring(Email,0,indexof(Email,"@")),"*****")
Senden an alternative Tabelle
Senden Sie vertrauliche Datensätze an eine alternative Tabelle mit einer anderen rollenbasierten Zugriffssteuerungskonfiguration (RBAC). Details zum Senden von Daten an mehrere Tabellen finden Sie unter Senden von Daten an mehrere Tabellen.
Daten anreichern
Verwenden Sie eine Umwandlung, um Informationen zu Daten hinzuzufügen, die den Geschäftskontext bereitstellen oder die spätere Abfrage der Daten vereinfachen. Verwenden Sie Zeichenfolgenfunktionen, um wichtige Informationen aus einer Spalte zu extrahieren. Verwenden Sie dann die extend-Anweisung, um der Datenquelle eine neue Spalte hinzuzufügen. Im folgenden Beispiel wird eine Spalte hinzugefügt, die angibt, ob eine IP-Adresse in einer anderen Spalte intern oder extern ist.
source | extend IpLocation = iff(split(ClientIp,".")[0] in ("10","192"), "Internal", "External")
Normalisieren von Daten
Normalisieren Sie Daten auf ein allgemeines Schema, um Abfragen und Berichte zu vereinfachen, z. B. das von Microsoft Sentinel verwendete Advanced Security Information Model (ASIM ). Verwenden Sie eine Transformation, um Daten zur Erfassungszeit zu normalisieren, wie in Normalisierung der Erfassungszeit beschrieben.
Im folgenden Beispiel werden die eingehenden Daten in das normalisierte Schema der Tabelle ASimAuditEventLogs transformiert.
source
| project TimeGenerated = timestamp, EventOwner=owner, EventMessage=message, EventResult=result, EventSeverity=severity
Daten für das Ziel formatieren
Sie haben möglicherweise eine Datenquelle, die Daten in einem Format sendet, das nicht mit der Struktur der Zieltabelle übereinstimmt. Verwenden Sie eine Transformation, um die Daten in das gewünschte Schema umzuformatieren.
Ändern des Schemas
Verwenden Sie Befehle wie extend und project, um das Schema der eingehenden Daten so zu ändern, dass sie der Zieltabelle entsprechen. Im folgenden Beispiel wird eine neue Spalte namens TimeGenerated den ausgehenden Daten mithilfe einer KQL-Funktion hinzugefügt, um die aktuelle Zeit zurückzugeben.
source | extend TimeGenerated = now()
Parsen von Daten
Verwenden Sie den Operator split oder parse, um Daten in mehrere Spalten in der Zieltabelle zu parsen. Im folgenden Beispiel weisen die eingehenden Daten eine durch Trennzeichen getrennte Spalte mit dem Namen RawData auf, die in einzelne Spalten für die Zieltabelle aufgeteilt ist.
Teilen Sie große Parse-Befehle auf, um die Verarbeitungszeit zu reduzieren.
source
| project d = split(RawData,",")
| project TimeGenerated=todatetime(d[0]), Code=toint(d[1]), Severity=tostring(d[2]), Module=tostring(d[3]), Message=tostring(d[4])
Mehrstufige Transformationsbeispiele (Vorschau)
Von Bedeutung
Mehrstufige Transformationen befinden sich derzeit in der öffentlichen Vorschau. Die zusätzlichen Nutzungsbestimmungen für Microsoft Azure-Vorschauen enthalten rechtliche Bedingungen. Sie gelten für diejenigen Azure-Features, die sich in der Beta- oder Vorschauversion befinden oder aber anderweitig noch nicht zur allgemeinen Verfügbarkeit freigegeben sind.
Die folgenden Beispiele veranschaulichen prozessorbasierte mehrstufige Transformationen. Jedes Beispiel zeigt den transformations Abschnitt einer DCR-Definition. Die vollständige DCR-Struktur und das Verweisen auf diese Transformationen aus Datenquellen und Datenflüssen finden Sie unter Erstellen einer mehrstufigen Transformation.
Filtern Sie Syslog auf dem Client nach Facility.
Filtern Sie Syslog-Datensätze auf clientseitiger Seite, um nur auth und authpriv Ereignisse beizubehalten, bevor Sie sie über das Netzwerk senden.
{
"name": "client_filter_auth",
"headerProcessor": {
"processor": "header.Syslog",
"configuration": {}
},
"processors": [
{
"processor": "filter.Basic",
"configuration": {
"any": [
{
"all": [
{
"columnName": "Facility",
"operator": "==",
"value": "auth"
}
]
},
{
"all": [
{
"columnName": "Facility",
"operator": "==",
"value": "authpriv"
}
]
}
]
}
}
]
}
Analysieren von JSON-Feldern aus Windows Ereignissen
Extrahieren Sie strukturierte Felder aus der JSON-Payload in der Spalte EventData in Windows-Ereignissen.
{
"name": "client_parse_windows_events",
"headerProcessor": {
"processor": "header.WindowsEvents",
"configuration": {}
},
"processors": [
{
"processor": "parse.XmlPath",
"configuration": {
"columnName": "RawXml",
"all": [
{
"path": "/Event/System/EventID",
"nameAs": "EventID",
"typeAs": "int"
},
{
"path": "/Event/EventData/Data[@Name='SubjectUserName']",
"nameAs": "SubjectUserName",
"typeAs": "string"
}
]
}
},
{
"processor": "map.Drop",
"configuration": {
"columnNames": ["RawXml", "RenderingInfo"]
}
}
]
}
Aggregierte Leistungsindikatoren
Aggregieren Sie Leistungsindikatordaten auf der Clientseite, um das Datenvolumen zu reduzieren, indem Sie Werte über ein 5-Minütiges Fenster zusammenfassen.
{
"name": "client_aggregate_perf",
"headerProcessor": {
"processor": "header.WindowsPerformanceCounters",
"configuration": {}
},
"processors": [
{
"processor": "aggregate.Basic",
"configuration": {
"batchingSettings": {
"timeWindow": "5m",
"maxBatchRows": 1000
},
"aggregates": [
{
"columnName": "CounterValue",
"operator": "avg",
"nameAs": "AvgValue"
},
{
"columnName": "CounterValue",
"operator": "max",
"nameAs": "MaxValue"
},
{
"operator": "count",
"nameAs": "SampleCount"
}
],
"dimensionColumns": ["CounterName", "Instance"]
}
}
]
}
Von Bedeutung
Aggregation ändert das Ausgabeschema vollständig. Leiten Sie aggregierte Daten an eine separate benutzerdefinierte Tabelle weiter.
Extrahieren von CEF-Attributen aus Syslog
Extrahieren Sie CEF-Attribute (Common Event Format) aus Syslog-Nachrichten, die häufig für Sicherheitsgerätedaten verwendet werden.
{
"name": "client_parse_cef",
"headerProcessor": {
"processor": "header.Syslog",
"configuration": {}
},
"processors": [
{
"processor": "parse.CEFAttribute",
"configuration": {
"columnName": "Message",
"all": [
{
"path": "deviceAction",
"nameAs": "DeviceAction",
"typeAs": "string"
},
{
"path": "sourceAddress",
"nameAs": "SourceIP",
"typeAs": "string"
},
{
"path": "destinationAddress",
"nameAs": "DestinationIP",
"typeAs": "string"
}
]
}
},
{
"processor": "enrich.DNSLookup",
"configuration": {
"columnName": "SourceIP",
"nameAs": "SourceDNSName"
}
}
]
}
KQL-Transformation zur Erfassungszeit
Wenden Sie bei der Erfassung einen KQL-Ausdruck auf einen Standardstream an. Dies ermöglicht einen Migrationspfad von der alten Eigenschaft transformKql.
{
"name": "ingestion_kql_syslog",
"headerProcessor": {
"processor": "header.StandardStream",
"configuration": {
"streamId": "Microsoft-Syslog"
}
},
"processors": [
{
"processor": "transform.KQL",
"configuration": {
"expression": "source | where SeverityLevel != 'info' | extend EnrichedMsg = strcat(HostName, ': ', SyslogMessage)"
}
}
]
}
Zweistufiger Ansatz von Syslog zu CommonSecurityLog
Transformieren Sie Syslog-Daten und nehmen Sie sie mit einem zweistufigen Ansatz als CommonSecurityLog ein. Die clientseitige Transformation analysiert CEF-Attribute, und die aufnahmeseitige Transformation ordnet die Daten dem CommonSecurityLog-Tabellenschema zu.
Clientseitige Transformation:
{
"name": "client_cef_extract",
"headerProcessor": {
"processor": "header.Syslog",
"configuration": {}
},
"processors": [
{
"processor": "parse.CEFAttribute",
"configuration": {
"columnName": "Message",
"all": [
{
"path": "deviceAction",
"nameAs": "DeviceAction",
"typeAs": "string"
}
]
}
}
]
}
Transformation zur Erfassungszeit:
{
"name": "ingestion_map_to_csl",
"headerProcessor": {
"processor": "header.StandardStream",
"configuration": {
"streamId": "Microsoft-CommonSecurityLog"
}
},
"processors": [
{
"processor": "transform.KQL",
"configuration": {
"expression": "source | extend DeviceAction = DeviceAction"
}
}
]
}