Freigeben über


Korrelieren von Daten in Azure Data Explorer und Azure Resource Graph mit Daten in einem Log Analytics-Arbeitsbereich

Verbessern Sie Ihre Analyse in Azure Monitor-Protokollen, indem Sie Daten im Azure-Daten-Explorer und Azure Resource Graph mit Daten in Ihrem Log Analytics-Arbeitsbereich und den Application Insights-Ressourcen korrelieren. In diesem Artikel wird erläutert, wie Dienstübergreifende Abfragen von jedem Dienst ausgeführt werden, der Daten in einem Log Analytics-Arbeitsbereich speichert. Obwohl Microsoft Sentinel Daten in Log Analytics-Arbeitsbereichen speichert und dienstübergreifende Abfragen für Azure Data Explorer unterstützt, unterstützt nicht jedes Feature von Microsoft Sentinel Abfragen für Azure Resource Graph.

Führen Sie dienstübergreifende Abfragen mithilfe von Clienttools aus, die Kusto Query Language (KQL)-Abfragen unterstützen, einschließlich Log Analytics im Azure-Portal, Arbeitsmappen, PowerShell und der REST-API.

Voraussetzungen

Ressource Erforderliche Berechtigung
Log Analytics-Arbeitsbereich Microsoft.OperationalInsights/workspaces/query/*/read für Log Analytics-Arbeitsbereiche, die Sie abfragen
, wie z. B. von der integrierten Rolle „Log Analytics-Leser“ bereitgestellt.
Azure Resource Graph Lesezugriff auf die Ressourcen, die Sie im Azure Resource Graph abfragen
Azure-Daten-Explorer Anzeigen von Berechtigungen für die Tabellen, die Sie im Azure-Daten-Explorer abfragen

Überlegungen zur Implementierung

Dienstübergreifende Abfragen werden in den folgenden Szenarien nicht unterstützt:

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 arbeitsbereichübergreifenden oder dienstübergreifenden Ausdrücke enthält. Zu den zulässigen Funktionen gehören adx(): , arg(), resource(), workspace()und app().
  • Dienstübergreifende Abfragen unterstützen nur den Datenabruf.
  • Die einzigen Befehle, die dienstübergreifende Abfragen unterstützen, sind .show Befehle. Dadurch können clusterübergreifende Abfragen direkt auf eine tabellarische Azure Monitor-, Azure Data Explorer-oder Azure Resource Graph-Funktion verweisen.

    .show Befehle, die mit der dienstübergreifenden Abfrage unterstützt werden:

    .show functions
    .show function {FunctionName}
    .show database {DatabaseName} schema as json

  • Das Identifizieren der Zeitstempelspalte in einem Cluster wird nicht unterstützt. Die Abfrage-API von Log Analytics übergibt den Zeitfilter nicht.
  • 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 Sie external_table(<external-table-name>) sie als parameterlose Funktion im Azure Data Explorer. Anschließend können Sie die Funktion mithilfe des Ausdrucks adx("").<function-name>aufrufen.
  • Wenn Sie anstelle von „union“ den join-Operator nutzen, müssen Sie einen hint verwenden, um die Daten in Azure Data Explorer oder Azure Resource Graph mit Daten im Log Analytics-Arbeitsbereich zu kombinieren. Verwenden Sie Hint.remote={direction of the Log Analytics workspace}.
    Zum Beispiel:
    AzureDiagnostics
    | join hint.remote=left adx("cluster=ClusterURI").AzureDiagnostics on (ColumnName)
    

Überlegungen für dienstübergreifende Abfragen in Azure Resource Graph

  • Der arg Teil der Abfrage gibt nur die ersten 1.000 Datensätze zurück. Beachten Sie dies, wenn eine Kombination mit einem join da möglicherweise fehlenden Datensatz vorhanden ist, wenn der Grenzwert erreicht ist.
  • Mit dem join-Operator können Sie Daten aus einer Azure Resource Graph-Tabelle mit einer Tabelle in Ihrem Log Analytics-Arbeitsbereich kombinieren.
  • Azure Monitor gibt keine Azure Resource Graph-Abfragefehler zurück.
  • Der Log Analytics-Abfrage-Editor kennzeichnet gültige Azure Resource Graph-Abfragen als Syntaxfehler. Eine gültige Abfrage kann z. B. einen Fehler wie diesen geben: "Der <name valid name> bezieht sich nicht auf eine bekannte Spalte, Tabelle, Variable oder Funktion."
  • Diese 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(), bin_at.
  • Microsoft Sentinel unterstützt keine dienstübergreifenden Abfragen in allen Features, in denen KQL verwendet wird.

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.

Zum 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 bei einem einzelnen Mandanten angemeldet, um die Abfrage auszuführen, die sich über beide Ressourcen erstreckt.

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 autorisierter Benutzer in dem 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 im Microsoft Defender-Portal verfügbar. Dieses Feature ermöglicht Ergebnisse, die Microsoft Sentinel-Tabellen abfragen. Weitere Informationen finden Sie unter Azure Resource Graph-Abfragen in der erweiterten Suche.

Hier sind einige Azure Log Analytics-Beispielabfragen, welche die neuen dienstübergreifenden Abfragefunktionen von Azure Resource Graph verwenden:

Beispiel: Filtern einer 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

Beispiele: Erstellen einer Warnungsregel, die nur für bestimmte Ressourcen gilt, die aus einer Arg()-Abfrage stammen

Schließen Sie Ressourcen basierend auf Tags aus. Lösen Sie z. B. keine Warnungen für VMs mit einem Test-Tag aus.

arg("").Resources
| where tags.environment=~'Test'
| project name 

Abrufen von Leistungsdaten im Zusammenhang mit der CPU-Auslastung und Filtern von Ressourcen mit dem prod Tag.

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 Beispielanwendungsfälle

  • Verwenden Sie ein Etikett, um zu bestimmen, ob VMs rund um die Uhr ausgeführt oder nachts heruntergefahren werden sollen.
  • Warnungen auf jedem Server anzeigen, der eine definierte 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.

Tipp

Führen Sie dienstübergreifende Abfragen aus Azure Data Explorer und Azure Resource Graph in einem Log Analytics-Arbeitsbereich aus, indem Sie die relevante Ressource als Umfang 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.

Zum 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}. Zum 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"