Abfragen von Daten in Log Analytics-Arbeitsbereichen, -Anwendungen und -Ressourcen in Azure Monitor

Es gibt zwei Möglichkeiten zum Abfragen von Daten aus mehreren Arbeitsbereichen, Anwendungen und Ressourcen:

  • Explizit durch Angabe der Arbeitsbereichs-, App- oder Ressourceninformationen mithilfe der Ausdrücke workspace(), app() oder resource(), wie in diesem Artikel beschrieben
  • Implizit durch Verwendung von Abfragen im Ressourcenkontext. Wenn Sie Abfragen im Kontext einer bestimmten Ressource, Ressourcengruppe oder eines Abonnements ausführen, ruft die Abfrage die relevanten Daten aus allen Arbeitsbereichen ab, die Daten für diese Ressourcen enthalten. Ressourcenkontextabfragen rufen keine Daten aus klassischen Application Insights-Ressourcen ab.

In diesem Artikel wird erläutert, wie Sie die Ausdrücke workspace(), app() und resource() verwenden, um Daten aus mehreren Log Analytics-Arbeitsbereichen, -Anwendungen und -Ressourcen abzufragen.

Wenn Sie Abonnements in anderen Microsoft Entra-Mandanten über Azure Lighthouse verwalten, können Sie Log Analytics-Arbeitsbereiche, die in diesen Kundenmandanten erstellt wurden, in Ihre Abfragen einschließen.

Wichtig

Wenn Sie eine arbeitsbereichsbasierte Application Insights-Ressource verwenden, werden Telemetriedaten in einem Log Analytics-Arbeitsbereich mit allen anderen Protokolldaten gespeichert. Verwenden Sie den Ausdruck workspace(), um Daten aus Anwendungen in mehreren Arbeitsbereichen abzufragen. Zum Abfragen mehrerer Anwendungen im selben Arbeitsbereich benötigen Sie keine arbeitsbereichsübergreifende Abfrage.

Erforderliche Berechtigungen

  • Sie müssen über Microsoft.OperationalInsights/workspaces/query/*/read-Berechtigungen für die Log Analytics-Arbeitsbereiche verfügen, die Sie abfragen, wie sie z. B. von der integrierten Log Analytics-Reader-Rolle bereitgestellt werden.
  • Zum Speichern einer Abfrage benötigen Sie Berechtigung vom Typ microsoft.operationalinsights/querypacks/queries/action für das Abfragepaket, in dem Sie die Abfrage speichern möchten. Diese Berechtigung wird beispielsweise durch die integrierten Rolle Log Analytics-Mitwirkender gewährt.

Begrenzungen

  • Ressourcenübergreifende und 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().
  • Sie können bis zu 100 Log Analytics-Arbeitsbereiche oder klassische Application Insights-Ressourcen in eine einzelne Abfrage einschließen.
  • Das Abfragen über eine große Anzahl von Ressourcen hinweg kann die Abfrage erheblich verlangsamen.
  • Ressourcenübergreifende Abfragen in Protokollsuchwarnungen werden nur in der aktuellen scheduledQueryRules-API unterstützt. Wenn Sie die Legacy-API für Log Analytics-Warnungen verwenden, müssen Sie zur aktuellen API wechseln.
  • Verweise auf übergreifende Ressourcen, z. B. einen anderen Arbeitsbereich, sollten explizit sein und können nicht parametrisiert werden.

Abfragen in Arbeitsbereichen, Anwendungen und Ressourcen mithilfe von Funktionen

In diesem Abschnitt wird erläutert, wie Sie Arbeitsbereiche, Anwendungen und Ressourcen mit und ohne Verwendung einer Funktion abfragen.

Abfrage ohne Verwendung einer Funktion

Sie können mehrere Ressourcen aus beliebigen Ressourceninstanzen abfragen. Dabei können Arbeitsbereiche und Apps kombiniert werden.

Beispiel für eine Abfrage über drei Arbeitsbereiche:

union 
  Update, 
  workspace("00000000-0000-0000-0000-000000000001").Update, 
  workspace("00000000-0000-0000-0000-000000000002").Update
| where TimeGenerated >= ago(1h)
| where UpdateState == "Needed"
| summarize dcount(Computer) by Classification

Weitere Informationen zu union-, where- und summarize-Operatoren finden Sie unter union-Operator, where-Operator und summarize-Operator.

Abfragen mithilfe einer Funktion

Wenn Sie ressourcenübergreifende Abfragen verwenden, um Daten aus mehreren Log Analytics-Arbeitsbereichen und Application Insights-Komponenten zu korrelieren, kann die Abfrage komplex und schwer zu verwalten werden. Sie können mithilfe von Funktionen in Azure Monitor-Protokollabfragen die Abfragelogik von der Bereichsdefinition der Abfrageressourcen trennen. Diese Methode vereinfacht die Abfragestruktur. Das folgende Beispiel zeigt, wie Sie mehrere Application Insights-Komponenten überwachen und die Anzahl der fehlgeschlagenen Anforderungen anhand des Anwendungsnamens visualisieren können.

Erstellen Sie eine Abfrage wie das folgende Beispiel, die auf den Bereich der Application Insights-Komponenten verweist. Der Befehl withsource= SourceApp fügt eine Spalte hinzu, die den Namen der Anwendung angibt, von der das Protokoll gesendet wurde. Speichern Sie die Abfrage als Funktion mit dem Alias applicationsScoping.

// crossResource function that scopes my Application Insights components
union withsource= SourceApp
app('00000000-0000-0000-0000-000000000000').requests, 
app('00000000-0000-0000-0000-000000000001').requests,
app('00000000-0000-0000-0000-000000000002').requests,
app('00000000-0000-0000-0000-000000000003').requests,
app('00000000-0000-0000-0000-000000000004').requests

Diese Funktion können Sie nun wie im folgenden Beispiel in einer ressourcenübergreifenden Abfrage verwenden. Der Funktionsalias applicationsScoping gibt die Vereinigungsmenge der Anforderungstabelle aller definierten Anwendungen zurück. Die Abfrage filtert dann fehlgeschlagene Anforderungen heraus und visualisiert die Trends nach Anwendung sortiert. Der parse-Operator ist in diesem Beispiel optional. Er extrahiert den Namen der Anwendung aus der SourceApp-Eigenschaft.

applicationsScoping 
| where timestamp > ago(12h)
| where success == 'False'
| parse SourceApp with * '(' applicationId ')' * 
| summarize count() by applicationId, bin(timestamp, 1h) 
| render timechart

Hinweis

Diese Methode kann bei Protokollsuchwarnungen nicht verwendet werden, weil die Zugriffsüberprüfung der Warnungsregelressourcen, einschließlich Arbeitsbereichen und Anwendungen, zum Zeitpunkt der Warnungserstellung ausgeführt wird. Das Hinzufügen neuer Ressourcen zur Funktion nach dem Erstellen der Warnung wird nicht unterstützt. Wenn Sie eine Funktion zur Ressourcenbereichsdefinition in Protokollsuchwarnungen verwenden möchten, müssen Sie die Warnungsregel im Portal bearbeiten oder eine Azure Resource Manager-Vorlage verwenden, um die bereichsbezogenen Ressourcen zu aktualisieren. Alternativ dazu können Sie die Liste der Ressourcen in die Abfrage der Protokollsuchwarnung einbeziehen.

Arbeitsbereichsübergreifende Abfragen für Log Analytics mithilfe von „workspace()“

Verwenden Sie den Ausdruck workspace(), um Daten aus einem bestimmten Arbeitsbereich in derselben Ressourcengruppe, einer anderen Ressourcengruppe oder einem anderen Abonnement abzurufen. Sie können diese Erweiterung verwenden, um Protokolldaten in einer Application Insights-Abfrage einzuschließen und um Daten übergreifend über mehrere Arbeitsbereiche in einer Protokollabfrage abzufragen.

Syntax

workspace(Bezeichner)

Argumente

*Identifier*: ermittelt den Arbeitsbereich mit einem der Formate in der folgenden Tabelle

Bezeichner BESCHREIBUNG Beispiel
id GUID des Arbeitsbereichs workspace("00000000-0000-0000-0000-000000000000")
Azure-Ressourcen-ID Bezeichner für die Azure-Ressource workspace("/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Contoso/providers/Microsoft.OperationalInsights/workspaces/contosoretail")

Beispiele

workspace("00000000-0000-0000-0000-000000000000").Update | count
workspace("/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Contoso/providers/Microsoft.OperationalInsights/workspaces/contosoretail").Event | count
union 
( workspace("00000000-0000-0000-0000-000000000000").Heartbeat | where Computer == "myComputer"),
(app("00000000-0000-0000-0000-000000000000").requests | where cloud_RoleInstance == "myRoleInstance")
| count  
union 
(workspace("00000000-0000-0000-0000-000000000000").Heartbeat), (app("00000000-0000-0000-0000-000000000000").requests) | where TimeGenerated between(todatetime("2023-03-08 15:00:00") .. todatetime("2023-04-08 15:05:00"))

Anwendungsübergreifende Abfragen für Application Insights (klassisch) mithilfe von „app()“

Verwenden Sie den Ausdruck app, um Daten aus einer bestimmten klassischen Application Insights-Ressource in derselben Ressourcengruppe, einer anderen Ressourcengruppe oder einem anderen Abonnement abzurufen. Wenn Sie eine arbeitsbereichsbasierte Application Insights-Ressource verwenden, werden Telemetriedaten in einem Log Analytics-Arbeitsbereich mit allen anderen Protokolldaten gespeichert. Verwenden Sie den Ausdruck workspace(), um Daten aus Anwendungen in mehreren Arbeitsbereichen abzufragen. Zum Abfragen mehrerer Anwendungen im selben Arbeitsbereich benötigen Sie keine arbeitsbereichsübergreifende Abfrage.

Syntax

app(Bezeichner)

Argumente

*Identifier*: ermittelt die Anwendung mit einem der Formate in der folgenden Tabelle

Bezeichner BESCHREIBUNG Beispiel
id GUID der Anwendung app("00000000-0000-0000-0000-000000000000")
Azure-Ressourcen-ID Bezeichner für die Azure-Ressource app("/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Fabrikam/providers/microsoft.insights/components/fabrikamapp")

Beispiele

app("00000000-0000-0000-0000-000000000000").requests | count
app("/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Fabrikam/providers/microsoft.insights/components/fabrikamapp").requests | count
union 
(workspace("00000000-0000-0000-0000-000000000000").Heartbeat | where Computer == "myComputer"),
(app("00000000-0000-0000-0000-000000000000").requests | where cloud_RoleInstance == "myColumnInstance")
| count  
union 
(workspace("00000000-0000-0000-0000-000000000000").Heartbeat), (app("00000000-0000-0000-0000-000000000000").requests)
| where TimeGenerated between(todatetime("2023-03-08 15:00:00") .. todatetime("2023-04-08 15:05:00"))

Korrelieren von Daten zwischen Ressourcen mithilfe von „resource()“

Der resource-Ausdruck wird in einer Azure Monitor-Abfrage mit dem Umfang einer Ressource verwendet, um Daten von anderen Ressourcen abzurufen.

Syntax

resource(Bezeichner)

Argumente

*Identifier*: ermittelt die Ressource, Ressourcengruppe oder das Abonnement, aus der Daten korreliert werden sollen

Bezeichner BESCHREIBUNG Beispiel
Resource Schließt Daten für die Ressource ein. resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcesgroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm")
Ressourcengruppe oder Abonnement Enthält Daten für die Ressource und alle darin enthaltenen Ressourcen. resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcesgroups/myresourcegroup)

Beispiele

union (Heartbeat),(resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcesgroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm").Heartbeat) | summarize count() by _ResourceId, TenantId
union (Heartbeat),(resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcesgroups/myresourcegroup).Heartbeat) | summarize count() by _ResourceId, TenantId

Nächste Schritte

Eine Übersicht über Protokollabfragen und die Strukturierung von Azure Monitor-Protokolldaten erhalten Sie unter Analysieren von Protokolldaten in Azure Monitor.