Korrelieren von Daten in Azure Data Explorer und Azure Resource Graph mit Daten in einem Log Analytics-Arbeitsbereich
Sie können Daten in Azure Data Explorer und Azure Resource Graph mit Daten in Ihrem Log Analytics-Arbeitsbereich und Application Insights-Ressourcen korrelieren, um Ihre Analyse in Azure Monitor-Protokollenzu verbessern. Microsoft Sentinel, das auch Daten in Log Analytics-Arbeitsbereichen speichert, unterstützt dienstübergreifende Abfragen für Azure Data Explorer, aber nicht für Azure Resource Graph. In diesem Artikel wird erläutert, wie Dienstübergreifende Abfragen von jedem Dienst ausgeführt werden, der Daten in einem Log Analytics-Arbeitsbereich speichert.
Sie können dienstübergreifende Abfragen ausführen, indem Sie alle Clienttools verwenden, die Abfragen mit der Kusto-Abfragesprache (KQL) unterstützen, einschließlich der Log Analytics-Webbenutzeroberfläche, Arbeitsmappen, PowerShell und der REST-API.
Erforderliche Berechtigungen
Zum Ausführen einer dienstübergreifenden Abfrage, die Daten in Azure Data Explorer oder Azure Resource Graph mit Daten in einem Log Analytics-Arbeitsbereich korreliert, benötigen Sie Folgendes:
Microsoft.OperationalInsights/workspaces/query/*/read
-Berechtigungen für die Log Analytics-Arbeitsbereiche, die Sie abfragen, wie sie z. B. von der integrierten Rolle „Log Analytics-Leser“ bereitgestellt werden.- Leseberechtigungen für die Ressourcen, die Sie in Azure Resource Graph abfragen.
- Viewerberechtigungen für die Tabellen, die Sie in Azure Data Explorer abfragen.
Überlegungen zur Implementierung
Allgemeine Überlegungen für dienstübergreifende Szenarien
Bei Datenbanknamen wird die Groß-/Kleinschreibung berücksichtigt.
Verwenden Sie nicht parametrisierte Funktionen und Funktionen, deren Definition keine anderen arbeitsbereichsübergreifenden oder dienstübergreifenden Ausdrücke umfasst, einschließlich
adx()
,arg()
,resource()
,workspace()
undapp()
.Dienstübergreifende Abfragen unterstützen nur den Datenabruf.
Dienstübergreifende Abfragen unterstützen nur „.show“-Befehle. Dadurch können clusterübergreifende Abfragen direkt auf eine tabellarische Azure Monitor-, Azure Data Explorer-oder Azure Resource Graph-Funktion verweisen. Die folgenden Befehle werden bei dienstübergreifenden Abfragen unterstützt:
.show functions
.show function {FunctionName}
.show database {DatabaseName} schema as json
mv-expand
unterstützt bis zu 2.000 Datensätze.Azure Monitor Logs unterstützt die
external_table()
Funktion nicht, mit der Sie externe Tabellen im Azure-Daten-Explorer abfragen können. Um eine externe Tabelle abzufragen, definieren Sieexternal_table(<external-table-name>)
sie als parameterlose Funktion im Azure Data Explorer. Anschließend können Sie die Funktion mithilfe des Ausdrucksadx("").<function-name>
aufrufen.Wenn Sie anstelle von „union“ den
join
-Operator nutzen, müssen Sie einenhint
verwenden, um die Daten in Azure Data Explorer oder Azure Resource Graph mit Daten im Log Analytics-Arbeitsbereich zu kombinieren. Verwenden SieHint.remote={direction of the Log Analytics workspace}
.Zum Beispiel:
AzureDiagnostics | join hint.remote=left adx("cluster=ClusterURI").AzureDiagnostics on (ColumnName)
Das Identifizieren der Zeitstempelspalte in einem Cluster wird nicht unterstützt. Die Abfrage-API von Log Analytics übergibt den Zeitfilter nicht.
Data Explorer-Cluster, die mit IP-Einschränkungen oder privaten Verbindungen (privaten Endpunkten) konfiguriert sind, unterstützen keine dienstübergreifenden Abfragen.
Überlegungen für dienstübergreifende Abfragen in Azure Resource Graph
- Beim Abfragen von Azure Resource Graph-Daten aus Azure Monitor:
- Mit dem
join
-Operator können Sie Daten aus einer Azure Resource Graph-Tabelle mit einer Tabelle in Ihrem Log Analytics-Arbeitsbereich kombinieren. - Die Abfrage gibt nur die ersten 1.000 Datensätze zurück.
- Azure Monitor gibt keine Azure Resource Graph-Abfragefehler zurück.
- Der Log Analytics-Abfrage-Editor kennzeichnet gültige Azure Resource Graph-Abfragen als Syntaxfehler.
- Folgende Operatoren werden nicht unterstützt:
smv-apply()
,rand()
,arg_max()
,arg_min()
,avg()
,avg_if()
,countif()
,sumif()
,percentile()
,percentiles()
,percentilew()
,percentilesw()
,stdev()
,stdevif()
,stdevp()
,variance()
,variancep()
,varianceif()
.
- Mit dem
- Microsoft Sentinel unterstützt keine dienstübergreifenden Abfragen für Azure Resource Graph.
Abfragen von Daten im Azure-Daten-Explorer mithilfe von adx()
Geben Sie den Bezeichner für einen Azure Data Explorer-Cluster in einer Abfrage innerhalb des adx
-Musters gefolgt vom Datenbanknamen und der Tabelle ein.
adx('https://help.kusto.windows.net/Samples').StormEvents
Kombinieren von Azure Data Explorer-Clustertabellen mit einem Log Analytics-Arbeitsbereich
Verwenden Sie den Befehl union
, um Clustertabellen mit einem Log Analytics-Arbeitsbereich zu kombinieren.
Beispiel:
union customEvents, adx('https://help.kusto.windows.net/Samples').StormEvents
| take 10
let CL1 = adx('https://help.kusto.windows.net/Samples').StormEvents;
union customEvents, CL1 | take 10
Tipp
Kurzform ist zulässig: ClusterName/InitialCatalog. Beispielsweise wird adx('help/Samples')
in adx('help.kusto.windows.net/Samples')
übersetzt.
Verknüpfen von Daten eines Azure Data Explorer-Clusters in einem Mandanten mit einer Azure Monitor-Ressource in einem anderen Mandanten
Mandantenübergreifende Abfragen zwischen den Diensten werden nicht unterstützt. Sie sind nur bei einem Mandanten angemeldet, um die Abfrage für beide Ressourcen auszuführen.
Wenn sich die Azure Data Explorer-Ressource im Mandanten A und der Log Analytics-Arbeitsbereich im Mandanten B befindet, sollten Sie eine der folgenden Methoden verwenden:
- Verwenden Sie Azure Data Explorer, um Rollen für Prinzipale in unterschiedlichen Mandanten hinzuzufügen. Fügen Sie Ihre Benutzer-ID in Mandant B als autorisierten Benutzer im Azure Data Explorer-Cluster hinzu. Vergewissern Sie sich, dass die TrustedExternalTenant-Eigenschaft im Azure Data Explorer-Cluster den Mandanten B enthält. Führen Sie die übergreifende Abfrage vollständig in Mandant B aus.
- Verwenden Sie Lighthouse, um die Azure Monitor-Ressource in Mandant A zu projizieren.
Herstellen einer Verbindung mit Azure Data Explorer-Clustern von unterschiedlichen Mandanten
Bei Kusto-Explorer werden Sie automatisch bei dem Mandanten angemeldet, zu dem das Benutzerkonto ursprünglich gehört. Für den Zugriff auf Ressourcen in anderen Mandanten mit demselben Benutzerkonto müssen Sie TenantId
explizit in der Verbindungszeichenfolge angeben:
Data Source=https://ade.applicationinsights.io/subscriptions/SubscriptionId/resourcegroups/ResourceGroupName;Initial Catalog=NetDefaultDB;AAD Federated Security=True;Authority ID=TenantId
Abfragen von Daten in Azure Resource Graph mithilfe von arg() (Vorschau)
Geben Sie das arg("")
-Muster gefolgt vom Azure Resource Graph-Tabellennamen ein.
Zum Beispiel:
arg("").<Azure-Resource-Graph-table-name>
Tipp
Der arg()
-Operator ist jetzt für die erweiterte Bedrohungssuche auf der einheitlichen Microsoft Defender-Plattform verfügbar. Mit diesem Feature können Sie nur Microsoft Sentinel-Daten abfragen. Weitere Informationen finden Sie unter Verwenden des arg()-Operators für Azure Resource Graph-Abfragen.
Hier sind einige Azure Log Analytics-Beispielabfragen, welche die neuen dienstübergreifenden Abfragefunktionen von Azure Resource Graph verwenden:
Filtern Sie eine Log Analytics-Abfrage basierend auf den Ergebnissen einer Azure Resource Graph-Abfrage:
arg("").Resources | where type == "microsoft.compute/virtualmachines" and properties.hardwareProfile.vmSize startswith "Standard_D" | join ( Heartbeat | where TimeGenerated > ago(1d) | distinct Computer ) on $left.name == $right.Computer
Erstellen Sie eine Warnungsregel, die nur für bestimmte Ressourcen gilt, die aus einer ARG-Abfrage stammen:
Schließen Sie Ressourcen basierend auf Tags aus – beispielsweise, um keine Warnungen für VMs mit einem „Test“-Tag auszulösen.
arg("").Resources | where tags.environment=~'Test' | project name
Rufen Sie Leistungsdaten im Zusammenhang mit der CPU-Auslastung ab, und filtern Sie nach Ressourcen mit dem Tag „prod“.
InsightsMetrics | where Name == "UtilizationPercentage" | lookup ( arg("").Resources | where type == 'microsoft.compute/virtualmachines' | project _ResourceId=tolower(id), tags ) on _ResourceId | where tostring(tags.Env) == "Prod"
Weitere Anwendungsfälle:
- Verwenden Sie ein Tag, um zu bestimmen, ob VMs 24x7 ausgeführt oder in der Nacht heruntergefahren werden sollen.
- Zeigen Sie Warnungen auf jedem Server an, der eine bestimmte Anzahl von Kernen enthält.
Erstellen einer Warnung basierend auf einer dienstübergreifenden Abfrage aus Ihrem Log Analytics-Arbeitsbereich
Um eine Warnungsregel basierend auf einer dienstübergreifenden Abfrage aus Ihrem Log Analytics-Arbeitsbereich zu erstellen, führen Sie die Schritte unter Erstellen oder Bearbeiten einer Regel für Protokollsuchwarnungen aus, indem Sie Ihren Log Analytics-Arbeitsbereich auf der Registerkarte Bereich auswählen.
Hinweis
Sie können auch dienstübergreifende Abfragen aus Azure Data Explorer und Azure Resource Graph in einem Log Analytics-Arbeitsbereich ausführen, indem Sie die relevante Ressource als Bereich Ihrer Warnung auswählen.
Kombinieren von Azure Resource Graph-Tabellen mit einem Log Analytics-Arbeitsbereich
Verwenden Sie den Befehl union
, um Clustertabellen mit einem Log Analytics-Arbeitsbereich zu kombinieren.
Beispiel:
union AzureActivity, arg("").Resources
| take 10
let CL1 = arg("").Resources ;
union AzureActivity, CL1 | take 10
Wenn Sie anstelle von „union“ den join
-Operator nutzen, müssen Sie einen hint
verwenden, um die Daten in Azure Resource Graph mit Daten im Log Analytics-Arbeitsbereich zu kombinieren. Verwenden Sie Hint.remote={Direction of the Log Analytics Workspace}
. Beispiel:
Perf | where ObjectName == "Memory" and (CounterName == "Available MBytes Memory")
| extend _ResourceId = replace_string(replace_string(replace_string(_ResourceId, 'microsoft.compute', 'Microsoft.Compute'), 'virtualmachines','virtualMachines'),"resourcegroups","resourceGroups")
| join hint.remote=left (arg("").Resources | where type =~ 'Microsoft.Compute/virtualMachines' | project _ResourceId=id, tags) on _ResourceId | project-away _ResourceId1 | where tostring(tags.env) == "prod"
Nächste Schritte
- Write queries (Schreiben von Abfragen)
- Ausführen ressourcenübergreifender Protokollabfragen in Azure Monitor