Dela via


Fråga efter data mellan Log Analytics-arbetsytor, program och resurser i Azure Monitor

Det finns två sätt att fråga efter data från flera arbetsytor, program och resurser:

  • Explicit – rikta in dig på arbetsytan, appen eller resursen med hjälp av uttrycken workspace(), app()eller resource(), enligt beskrivningen i den här artikeln.
  • Implicit – använd resurskontextfrågor. När du frågar i kontexten för en specifik resurs, resursgrupp eller en prenumeration hämtar frågan relevanta data från alla arbetsytor som innehåller data för dessa resurser. Resurskontextfrågor hämtar inte data från klassiska Application Insights-resurser.

Den här artikeln beskriver hur du använder explicita workspace(), app()och resource() -uttryck för att fråga efter data från flera Log Analytics-arbetsytor, program och resurser.

När du hanterar prenumerationer i andra Microsoft Entra-klienter med Azure Lighthouse är Log Analytics-arbetsytor som skapats i dessa kundklienter tillgängliga att använda i dina frågor mellan arbetsytor.

Viktigt!

Om du använder en arbetsytebaserad Application Insights-resurs lagras telemetri på en Log Analytics-arbetsyta med alla andra loggdata. Använd uttrycket workspace() för att fråga efter data från program på flera arbetsytor. Du behöver ingen tvärs arbetsyta-fråga för att fråga data från flera applikationer i samma arbetsyta.

Behörigheter som krävs

Åtgärd Behörigheter som krävs
Kontrollera arbetsytans tillstånd Microsoft.OperationalInsights/workspaces/query/*/read behörigheter till de Log Analytics-arbetsytor som du frågar efter, till exempel den inbyggda rollen Log Analytics Reader.
Spara en fråga microsoft.operationalinsights/querypacks/queries/action behörigheter för frågepaketet där du vill spara frågan, till exempel, som tillhandahålls av den inbyggda rollen Log Analytics Contributor.

Överväganden

  • Frågor mellan resurser och mellan tjänster stöder inte parametriserade funktioner och funktioner vars definition omfattar andra uttryck mellan arbetsytor eller korstjänster, inklusive adx(), arg(), resource(), workspace()och app().
  • Du kan inkludera upp till 100 Log Analytics-arbetsytor eller klassiska Application Insights-resurser i en enda fråga.
  • Att fråga över ett stort antal resurser kan göra frågan avsevärt långsammare.
  • Frågor över flera resurser i loggsökningsaviseringar stöds endast i den nuvarande scheduledQueryRules API. Om du använder det äldre Log Analytics-aviserings-API:et måste du växla till det aktuella API:et.
  • Referenser till en korsresurs, till exempel en annan arbetsyta, bör vara explicita och kan inte parametriseras.

Använda funktioner för att förenkla frågor

Det här avsnittet beskriver hur du frågar arbetsytor, program och resurser med och utan att använda en funktion.

Fråga utan att använda en funktion

Du kan alltid använda explicita uttryck direkt för att köra frågor mot flera resurser. Dessa resurser kan vara arbetsytor och appar tillsammans.

Exempel på en fråga mellan tre arbetsytor:

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

Mer information finns i unionoperatorn, where-operatorn och summera-operatorn.

Fråga med hjälp av en funktion

När du använder frågor mellan resurser för att korrelera data från flera Log Analytics-arbetsytor och Application Insights-komponenter kan frågan bli komplex och svår att underhålla. Du bör använda funktioner i Azure Monitor-loggfrågor för att skilja frågelogik från omfånget för frågeresurserna. Den här metoden förenklar frågestrukturen. I följande exempel visas hur du kan övervaka flera Application Insights-komponenter och visualisera antalet misslyckade begäranden efter programnamn.

Skapa en fråga som i följande exempel som refererar till omfånget för Application Insights-komponenter. Kommandot withsource= SourceApp lägger till en kolumn som anger programnamnet som skickade loggen. Spara frågan som en funktion med aliaset 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

Du kan nu använda den här funktionen i en fråga mellan resurser som i följande exempel. Funktionsaliaset applicationsScoping returnerar en union av begärandetabellen från alla definierade program. Frågan filtrerar sedan efter misslyckade begäranden och visualiserar trenderna per program. Operatorn parse är valfri i det här exemplet. Den extraherar programnamnet från SourceApp egenskapen .

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

Anteckning

Den här metoden kan inte användas med loggsökningsaviseringar eftersom åtkomstverifieringen av aviseringsregelresurserna, inklusive arbetsytor och program, utförs när aviseringar skapas. Det går inte att lägga till nya resurser i funktionen när aviseringen har skapats. Om du föredrar att använda en funktion för resursomfång i loggsökningsaviseringar måste du redigera aviseringsregeln i portalen eller med en Azure Resource Manager-mall för att uppdatera de begränsade resurserna. Du kan också inkludera listan över resurser i aviseringsfrågan för loggsökning.

Fråga mellan Log Analytics-arbetsytor med hjälp av workspace()

Använd uttrycket workspace() för att hämta data från en specifik arbetsyta i samma resursgrupp, en annan resursgrupp eller en annan prenumeration. Du kan använda det här uttrycket för att inkludera loggdata i en Application Insights-fråga och för att fråga data över flera arbetsytor i en loggfråga.

Syntax

workspace( Identifierare)

Argument

Identifier: De explicita identifierarformaten i följande tabell är det bästa sättet att fråga arbetsytor eftersom de är de mest effektiva.

Identifierare beskrivning Exempel
ID-nummer GUID för arbetsytan arbetsyta("00000000-0000-0000-0000-000000000000")
Azure Resource-ID Identifierare för Azure-resursen workspace("/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/Contoso/providers/Microsoft.OperationalInsights/workspaces/contosoretail")

Andra arbetsyteidentifierare som endast använder arbetsytans namn eller arbetsytans resursnamn rekommenderas inte eftersom de resulterar i sämre prestanda och möjliga fel vid frågor mellan arbetsytor.

Exempel

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"))

Fråga mellan klassiska Application Insights-program med app()

Använd uttrycket app för att hämta data från en specifik klassisk Application Insights-resurs i samma resursgrupp, en annan resursgrupp eller en annan prenumeration. Om du använder en arbetsytebaserad Application Insights-resurs lagras telemetri på en Log Analytics-arbetsyta med alla andra loggdata. Använd uttrycket workspace() för att fråga efter data från program på flera arbetsytor. Du behöver ingen tvärs arbetsyta-fråga för att fråga data från flera applikationer i samma arbetsyta.

Syntax

app( Identifierare)

Argument

Identifier: De explicita identifierarformaten i följande tabell är det bästa sättet att fråga appar eftersom de är mest effektiva..

Identifierare beskrivning Exempel
ID-nummer GUID för appen app("00000000-0000-0000-0000-000000000000")
Azure Resource-ID Identifierare för Azure-resursen app("/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/Fabrikam/providers/microsoft.insights/components/fabrikamapp")

Exempel

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"))

Korrelera data mellan resurser med hjälp av resource()

Uttrycket resource används i en Azure Monitor-fråga som är begränsad till en resurs för att hämta data från andra resurser.

Syntax

resource( Identifierare)

Argument

Identifier: Identifierar resursen, resursgruppen eller prenumerationen som data ska korreleras från.

Identifierare beskrivning Exempel
Resurs Innehåller data för resursen. resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm")
Resursgrupp eller prenumeration Innehåller data för resursen och alla resurser som den innehåller. resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxx/resourcesgroups/myresourcegroup)

Exempel

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

Se Analysera loggdata i Azure Monitor för en översikt över loggfrågor och hur Azure Monitor-loggdata är strukturerade.