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:
- In modo esplicito specificando 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 di contesto delle risorse non recuperano dati dalle risorse classiche di Application Insights.
Questo articolo illustra come usare le espressioni workspace()
, 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 nelle query aree di lavoro Log Analytics create in tali tenant dei clienti.
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
Azione | Autorizzazioni obbligatorie |
---|---|
Controllare lo stato dell'area di lavoro | Autorizzazioni Microsoft.OperationalInsights/workspaces/query/*/read per le aree di lavoro Log Analytics su cui si esegue la query, ad esempio le autorizzazioni fornite dal ruolo predefinito Lettore di Log Analytics. |
Salvare una query | Autorizzazioni microsoft.operationalinsights/querypacks/queries/action per il pacchetto di query in cui si vuole salvare la query, ad esempio le autorizzazioni fornite dal ruolo predefinito Collaboratore di Log Analytics. |
Limiti
- Le query tra risorse e tra servizi non supportano funzioni con parametri e funzioni la cui definizione include altre espressioni tra aree di lavoro o tra servizi, tra cui
adx()
,arg()
,resource()
,workspace()
eapp()
. - È 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 tra aree di lavoro, applicazioni e risorse usando funzioni
Questa sezione illustra come eseguire query su aree di lavoro, applicazioni e risorse usando funzioni e senza usare una funzione.
Eseguire query senza usare una funzione
È possibile eseguire query su più risorse da una qualsiasi delle istanze delle risorse. Queste risorse possono essere combinazioni di aree di lavoro e app.
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 sugli operatori union, where e summarize, vedere Operatore union, Operatore where e Operatore summarize.
Eseguire una query usando una funzione
Quando si usano query tra risorse per correlare i dati di più aree di lavoro di Log Analytics e componenti di Application Insights, la query può diventare complessa e difficile da gestire. È consigliabile usare funzioni nelle query di log di Monitoraggio di Azure per separare la logica di query dalla definizione dell'ambito delle risorse di query. Questo metodo semplifica la struttura della query. L'esempio seguente mostra come è possibile monitorare più componenti di Application Insights e visualizzare il numero di richieste non riuscite per nome applicazione.
Creare una query analoga all'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
A questo punto è possibile usare questa funzione in una query tra risorse simile all'esempio seguente. L'alias della funzione applicationsScoping
restituisce l'unione della tabella di 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 dalla proprietà SourceApp
.
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 per la ricerca di 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 degli avvisi non è supportata. Se si preferisce usare una funzione per la definizione dell'ambito delle risorse negli avvisi per la ricerca di 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 per la ricerca di 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 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.
Identifier | Descrizione | Esempio |
---|---|---|
ID | Identificatore univoco dell'area di lavoro | workspace("00000000-0000-0000-0000-000000000000") |
ID risorsa di Azure | Identificatore della risorsa di Azure | workspace("/subscriptions/00000000-0000-0000-0000-000000000000/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 classica di Application Insights 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 indicati nella tabella seguente.
Identifier | Descrizione | Esempio |
---|---|---|
ID | GUID dell'app | app("00000000-0000-0000-0000-000000000000") |
ID risorsa di Azure | Identificatore della risorsa di Azure | app("/subscriptions/00000000-0000-0000-0000-000000000000/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 corrispondente a 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.
Identifier | Descrizione | Esempio |
---|---|---|
Conto risorse | Include i dati per la risorsa. | resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/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 di come sono strutturati i dati di log di Monitoraggio di Azure., vedere Analizzare i dati di log in Monitoraggio di Azure.