Eseguire query sui dati in aree di lavoro, applicazioni e risorse di Log Analytics in Monitoraggio di Azure

Esistono due modi per eseguire query sui dati da più aree di lavoro, applicazioni e risorse:

  • Specificando in modo esplicito l'area di lavoro, l'app o le informazioni sulle risorse usando le espressioni workspace(),app()o resource(), come descritto in questo articolo.
  • In modo implicito usando query di contesto delle risorse. Quando si esegue una query nel contesto di una risorsa, di un gruppo di risorse o di una sottoscrizione specifica, la query recupera i dati pertinenti da tutte le aree di lavoro che contengono dati per queste risorse. Le query sul contesto delle risorse non recuperano dati dalle risorse classiche di Application Insights.

Questo articolo illustra come usare le workspace()espressioni , app()e resource() per eseguire query sui dati da più aree di lavoro, applicazioni e risorse di Log Analytics.

Se si gestiscono le sottoscrizioni in altri tenant di Microsoft Entra tramite Azure Lighthouse, è possibile includere le aree di lavoro Log Analytics create in tali tenant dei clienti nelle query.

Importante

Se si usa una risorsa di Application Insights basata sull'area di lavoro, i dati di telemetria vengono archiviati in un'area di lavoro Log Analytics con tutti gli altri dati di log. Usare l'espressione workspace() per eseguire query sui dati dalle applicazioni in più aree di lavoro. Non è necessaria una query tra aree di lavoro per eseguire query sui dati di più applicazioni nella stessa area di lavoro.

Autorizzazioni obbligatorie

  • È necessario disporre Microsoft.OperationalInsights/workspaces/query/*/read delle autorizzazioni per le aree di lavoro Log Analytics su cui si esegue la query, ad esempio, come specificato dal ruolo predefinito Lettore di Log Analytics.
  • Per salvare una query, è necessario disporre microsoft.operationalinsights/querypacks/queries/action delle autorizzazioni per il pacchetto di query in cui si vuole salvare la query, come specificato dal ruolo predefinito Collaboratore Log Analytics, ad esempio.

Limiti

  • Le query tra risorse e tra servizi non supportano funzioni e funzioni con parametri la cui definizione include altre espressioni tra aree di lavoro o tra servizi, tra cui adx(), arg()resource(), workspace(), e app().
  • È possibile includere fino a 100 aree di lavoro Log Analytics o risorse classiche di Application Insights in una singola query.
  • L'esecuzione di query in un numero elevato di risorse può rallentare notevolmente la query.
  • Le query tra risorse negli avvisi di ricerca log sono supportate solo nell'API scheduledQueryRules corrente. Se si usa l'API degli avvisi di Log Analytics legacy, è necessario passare all'API corrente.
  • I riferimenti a una risorsa incrociata, ad esempio un'altra area di lavoro, devono essere espliciti e non possono essere parametrizzati.

Eseguire query su aree di lavoro, applicazioni e risorse usando funzioni

Questa sezione illustra come eseguire query su aree di lavoro, applicazioni e risorse usando funzioni con e senza usare una funzione.

Query senza usare una funzione

È possibile eseguire query su più risorse da una qualsiasi delle istanze delle risorse. Queste risorse possono essere aree di lavoro e app combinate.

Esempio per una query in tre aree di lavoro:

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

Per altre informazioni sull'unione, dove e riepilogare gli operatori, vedere Operatore union, dove operatore e operatore summarize.

Eseguire una query usando una funzione

Quando si usano query tra risorse per correlare i dati di più aree di lavoro Log Analytics e componenti di Application Insights, la query può diventare complessa e difficile da gestire. È consigliabile usare le funzioni nelle query di log di Monitoraggio di Azure per separare la logica di query dall'ambito delle risorse di query. Questo metodo semplifica la struttura di query. L'esempio seguente illustra come monitorare più componenti di Application Insights e visualizzare il numero di richieste non riuscite in base al nome dell'applicazione.

Creare una query come l'esempio seguente che fa riferimento all'ambito dei componenti di Application Insights. Il comando withsource= SourceApp aggiunge una colonna che indica il nome dell'applicazione che ha inviato il log. Salvare la query come funzione con l'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

È ora possibile usare questa funzione in una query tra risorse, come nell'esempio seguente. L'alias applicationsScoping della funzione restituisce l'unione della tabella delle richieste da tutte le applicazioni definite. La query filtra quindi le richieste non riuscite e visualizza le tendenze per applicazione. L'operatore parse è facoltativo in questo esempio. Estrae il nome dell'applicazione SourceApp dalla proprietà .

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

Nota

Questo metodo non può essere usato con gli avvisi di ricerca log perché la convalida dell'accesso delle risorse delle regole di avviso, incluse le aree di lavoro e le applicazioni, viene eseguita in fase di creazione degli avvisi. L'aggiunta di nuove risorse alla funzione dopo la creazione dell'avviso non è supportata. Se si preferisce usare una funzione per l'ambito delle risorse negli avvisi di ricerca log, è necessario modificare la regola di avviso nel portale o con un modello di Azure Resource Manager per aggiornare le risorse con ambito. In alternativa, è possibile includere l'elenco delle risorse nella query di avviso di ricerca log.

Eseguire query tra aree di lavoro Log Analytics usando workspace()

Usare l'espressione workspace() per recuperare dati da un'area di lavoro specifica nello stesso gruppo di risorse, in un altro gruppo di risorse o in un'altra sottoscrizione. È possibile usare questa espressione per includere i dati di log in una query di Application Insights e per eseguire query sui dati in più aree di lavoro in una query di log.

Sintassi

workspace(Identifier)

Argomenti

*Identifier*: identifica l'area di lavoro usando uno dei formati nella tabella seguente.

Identificatore Descrizione Esempio
ID Identificatore univoco dell'area di lavoro workspace("000000000-0000-0000-0000-0000000000000")
ID risorsa di Azure Identificatore della risorsa di Azure workspace("/subscriptions/000000000-0000-0000-0000-00000000000/resourcegroups/Contoso/providers/Microsoft.OperationalInsights/workspaces/contosoretail")

Esempi

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

Eseguire query tra applicazioni classiche di Application Insights usando app()

Usare l'espressione app per recuperare dati da una risorsa di Application Insights classica specifica nello stesso gruppo di risorse, in un altro gruppo di risorse o in un'altra sottoscrizione. Se si usa una risorsa di Application Insights basata sull'area di lavoro, i dati di telemetria vengono archiviati in un'area di lavoro Log Analytics con tutti gli altri dati di log. Usare l'espressione workspace() per eseguire query sui dati dalle applicazioni in più aree di lavoro. Non è necessaria una query tra aree di lavoro per eseguire query sui dati di più applicazioni nella stessa area di lavoro.

Sintassi

app(Identifier)

Argomenti

*Identifier*: identifica l'app usando uno dei formati nella tabella seguente.

Identificatore Descrizione Esempio
ID GUID dell'app app("000000000-0000-0000-0000-00000000000000")
ID risorsa di Azure Identificatore della risorsa di Azure app("/subscriptions/000000000-0000-0000-0000-00000000000/resourcegroups/Fabrikam/providers/microsoft.insights/components/fabrikamapp")

Esempi

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

Correlare i dati tra le risorse usando resource()

L'espressione resource viene usata in una query di Monitoraggio di Azure con ambito una risorsa per recuperare dati da altre risorse.

Sintassi

resource(Identifier)

Argomenti

*Identifier*: identifica la risorsa, il gruppo di risorse o la sottoscrizione da cui correlare i dati.

Identificatore Descrizione Esempio
Conto risorse Include i dati per la risorsa. resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxx/resourcesgroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm")
Gruppo di risorse o sottoscrizione Include i dati per la risorsa e tutte le risorse contenute. resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcesgroups/myresourcegroup)

Esempi

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

Passaggi successivi

Per una panoramica delle query di log e della struttura dei dati di log di Monitoraggio di Azure, vedere Analizzare i dati di log in Monitoraggio di Azure.