Freigeben über


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.

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.

Wenn Sie anstelle von „union“ den join-Operator nutzen, müssen Sie einen hint zum Kombinieren der Daten im Azure Data Explorer-Cluster mit dem Log Analytics-Arbeitsbereich verwenden. Verwenden Sie Hint.remote={Direction of the Log Analytics Workspace}.

Beispiel:

AzureDiagnostics
| join hint.remote=left adx("cluster=ClusterURI").AzureDiagnostics on (ColumnName)

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.

Begrenzungen

Allgemeine dienstübergreifende Abfrageeinschränkungen

  • Dienstübergreifende Abfragen unterstützen keine parametrisierten Funktionen oder Funktionen, deren Definition andere arbeitsbereichsübergreifende oder dienstübergreifende Ausdrücke umfasst, einschließlich adx(), arg(), resource(), workspace() und app().
  • Dienstübergreifende Abfragen unterstützen nur „.show“-Funktionen. 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
  • Bei Datenbanknamen wird die Groß-/Kleinschreibung berücksichtigt.
  • Das Identifizieren der Zeitstempelspalte im Cluster wird nicht unterstützt. Die Log Analytics-Abfrage-API übergibt den Zeitfilter nicht.
  • Dienstübergreifende Abfragen unterstützen nur den Datenabruf.
  • Private Link (private Endpunkte) und IP-Einschränkungen unterstützen keine dienstübergreifenden Abfragen.
  • mv-expand ist auf 2.000 Datensätze beschränkt.
  • 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.

Dienstübergreifende Abfragebeschränkungen für Azure Resource Graph

  • Microsoft Sentinel unterstützt keine dienstübergreifenden Abfragen für Azure Resource Graph.
  • Beim Abfragen von Azure Resource Graph-Daten aus Azure Monitor:
    • 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.
    • Verknüpfungen werden nicht unterstützt, wenn Sie „Hint“ nicht verwenden.
    • 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().

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