Share 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:

  • Uttryckligen genom att ange arbetsytan, appen eller resursinformationen med hjälp av uttrycken workspace(), app()eller resource() enligt beskrivningen i den här artikeln.
  • Implicit med hjälp av 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 uttrycken workspace(), app()och resource() för att fråga efter data från flera Log Analytics-arbetsytor, program och resurser.

Om du hanterar prenumerationer i andra Microsoft Entra-klienter via Azure Lighthouse kan du inkludera Log Analytics-arbetsytor som skapats i dessa kundklientorganisationer i dina frågor.

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 fråga mellan arbetsytor för att köra frågor mot data från flera program på samma arbetsyta.

Behörigheter som krävs

  • Du måste ha Microsoft.OperationalInsights/workspaces/query/*/read behörighet till de Log Analytics-arbetsytor som du frågar efter, till exempel den inbyggda rollen Log Analytics Reader.
  • Om du vill spara en fråga måste du ha microsoft.operationalinsights/querypacks/queries/action behörighet till frågepaketet där du vill spara frågan, till exempel enligt log analytics-deltagarens inbyggda roll.

Begränsningar

  • 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 mellan resurser i loggsökningsaviseringar stöds endast i det aktuella schemalagdaQueryRules-API:et. 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.

Fråga mellan arbetsytor, program och resurser med hjälp av funktioner

I det här avsnittet beskrivs hur du frågar arbetsytor, program och resurser med hjälp av funktioner med och utan att använda en funktion.

Fråga utan att använda en funktion

Du kan köra frågor mot flera resurser från någon av dina resursinstanser. 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 om unionen, var och sammanfatta operatorer finns i fackföreningsoperatorn, var operatorn och sammanfatta 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

Kommentar

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*: Identifierar arbetsytan med något av formaten i följande tabell.

Identifierare beskrivning Exempel
ID GUID för arbetsytan workspace("00000000-0000-0000-0000-000000000000")
Azure Resource ID Identifierare för Azure-resursen workspace("/subscriptions/00000000-0000-0000-0000-0000000000000/resourcegroups/Contoso/providers/Microsoft.OperationalInsights/workspaces/contosoretail")

Exempel

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

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 fråga mellan arbetsytor för att köra frågor mot data från flera program på samma arbetsyta.

Syntax

app(Identifierare)

Argument

*Identifier*: Identifierar appen med något av formaten i tabellen nedan.

Identifierare beskrivning Exempel
ID GUID för appen app("00000000-0000-0000-0000-0000000000000")
Azure Resource ID Identifierare för Azure-resursen app("/subscriptions/00000000-0000-0000-0000-0000000000000/resourcegroups/Fabrikam/providers/microsoft.insights/components/fabrikamapp")

Exempel

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

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/resourcesgroups/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

Nästa steg

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