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
Aktion | Erforderliche Berechtigungen |
---|---|
Überprüfen des Arbeitsbereichsstatus | 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. |
Speichern einer Abfrage | Berechtigung vom Typ microsoft.operationalinsights/querypacks/queries/action für das Abfragepaket, in dem Sie die Abfrage speichern möchten, die beispielsweise durch die integrierte Rolle Log Analytics-Mitwirkender gewährt wird. |
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()
undapp()
. - 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/Contoso/providers/Microsoft.OperationalInsights/workspaces/contosoretail") |
Beispiele
workspace("00000000-0000-0000-0000-000000000000").Update | count
workspace("/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/Fabrikam/providers/microsoft.insights/components/fabrikamapp") |
Beispiele
app("00000000-0000-0000-0000-000000000000").requests | count
app("/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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.