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
Å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 till frågepaketet där du till exempel vill spara frågan, 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()
ochapp()
. - 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.