Condividi tramite


Correlare i dati in Esplora dati di Azure e Azure Resource Graph con i dati in un'area di lavoro Log Analytics

È possibile correlare i dati in Esplora dati di Azure e Azure Resource Graph con i dati nell'area di lavoro Log Analytics e nelle risorse di Application Insights per migliorare l'analisi nei log di Monitoraggio di Azure. Microsoft Sentinel, che archivia anche i dati nelle aree di lavoro Log Analytics, supporta query tra servizi in Esplora dati di Azure, ma non in Azure Resource Graph. Questo articolo illustra come eseguire query tra servizi da qualsiasi servizio che archivia i dati in un'area di lavoro Log Analytics.

Eseguire query tra servizi usando tutti gli strumenti client che supportano query KQL (Kusto Query Language), tra cui l'interfaccia utente Web di Log Analytics, le cartelle di lavoro, PowerShell e l'API REST.

Autorizzazioni obbligatorie

Per eseguire una query tra servizi che correla i dati in Esplora dati di Azure o Azure Resource Graph con i dati in un'area di lavoro Log Analytics, è necessario:

  • 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.
  • Autorizzazioni di lettura per le risorse su cui si esegue una query in Azure Resource Graph.
  • Autorizzazioni del visualizzatore per le tabelle su cui si esegue una query in Esplora dati di Azure.

Eseguire query sui dati in Esplora dati di Azure usando adx()

Immettere l'identificatore per un cluster di Esplora dati di Azure in una query all'interno del modello adx seguito dal nome e dalla tabella del database.

adx('https://help.kusto.windows.net/Samples').StormEvents

Combinare tabelle del cluster di Esplora dati di Azure con un'area di lavoro Log Analytics

Usare il comando union per combinare tabelle cluster con un'area di lavoro Log Analytics.

Ad esempio:

union customEvents, adx('https://help.kusto.windows.net/Samples').StormEvents
| take 10
let CL1 = adx('https://help.kusto.windows.net/Samples').StormEvents;
union customEvents, CL1 | take 10

Suggerimento

Il formato abbreviato è consentito: ClusterName/InitialCatalog. Ad esempio adx('help/Samples') viene convertito in adx('help.kusto.windows.net/Samples').

Quando si usa l'operatore join anziché l'unione, è necessario usare hint per combinare i dati nel cluster di Esplora dati di Azure con l'area di lavoro Log Analytics. Usare Hint.remote={Direction of the Log Analytics Workspace}.

Ad esempio:

AzureDiagnostics
| join hint.remote=left adx("cluster=ClusterURI").AzureDiagnostics on (ColumnName)

Unire tramite join i dati di un cluster di Esplora dati di Azure in un tenant con una risorsa di Monitoraggio di Azure in un altro

Le query tra tenant tra i servizi non sono supportate. Si è connessi a un solo tenant per eseguire la query che si estende su entrambe le risorse.

Se la risorsa di Esplora dati di Azure è nel tenant A e l'area di lavoro Log Analytics è nel tenant B, usare uno dei metodi seguenti:

  • Usare Esplora dati di Azure consente di aggiungere ruoli per le entità di sicurezza in tenant diversi. Aggiungere il proprio ID utente nel tenant B come utente autorizzato nel cluster di Esplora dati di Azure. Verificare che la proprietà TrustedExternalTenant nel cluster di Esplora dati di Azure contenga il tenant B. Eseguire la query incrociata completamente nel tenant B.
  • Usare Lighthouse per proiettare la risorsa di Monitoraggio di Azure nel tenant A.

Connettersi a cluster di Esplora dati di Azure da tenant diversi

Kusto Explorer esegue automaticamente l'accesso dell'utente nel tenant a cui appartiene originariamente l'account utente. Per accedere a risorse in altri tenant con lo stesso account utente, è necessario specificare in modo esplicito TenantId nella stringa di connessione:

Data Source=https://ade.applicationinsights.io/subscriptions/SubscriptionId/resourcegroups/ResourceGroupName;Initial Catalog=NetDefaultDB;AAD Federated Security=True;Authority ID=TenantId

Eseguire query sui dati in Azure Resource Graph usando arg() (anteprima)

Immettere il modello arg("") seguito dal nome della tabella di Azure Resource Graph.

Ad esempio:

arg("").<Azure-Resource-Graph-table-name>

L'operatore arg() in Log Analytics può essere usato anche nella piattaforma unificata di Microsoft Defender. L'operatore arg() funziona solo sui dati di Microsoft Sentinel, ovvero le tabelle XDR di Defender non sono supportate. Questa funzionalità consente di sfruttare e ottenere arg() informazioni dettagliate direttamente all'interno dell'interfaccia di ricerca avanzata, risparmiando la necessità di aprire manualmente una nuova finestra per consentire a Microsoft Sentinel di usare l'operatore .

Screenshot dell'operatore arg nella ricerca avanzata.

Suggerimento

L'operatore arg() è ora disponibile per l'anteprima nella ricerca avanzata. Questa funzionalità consente di eseguire query solo sui dati di Microsoft Sentinel. Per altre informazioni, vedere Usare l'operatore arg() per le query di Azure Resource Graph (anteprima)

Ecco alcuni esempi di query di Azure Log Analytics che usano le nuove funzionalità di query tra servizi di Azure Resource Graph:

  • Filtrare una query di Log Analytics in base ai risultati di una query di Azure Resource Graph:

    arg("").Resources 
    | where type == "microsoft.compute/virtualmachines" and properties.hardwareProfile.vmSize startswith "Standard_D"
    | join (
        Heartbeat
        | where TimeGenerated > ago(1d)
        | distinct Computer
        )
        on $left.name == $right.Computer
    
  • Creare una regola di avviso che si applica solo a determinate risorse ricavate da una query ARG:

    • Escludere le risorse in base ai tag, ad esempio non attivare avvisi per le macchine virtuali con un tag "Test".

      arg("").Resources
      | where tags.environment=~'Test'
      | project name 
      
    • Recuperare i dati sulle prestazioni correlati all'utilizzo della CPU e filtrare le risorse con il tag "prod".

      InsightsMetrics
      | where Name == "UtilizationPercentage"
      | lookup (
          arg("").Resources 
          | where type == 'microsoft.compute/virtualmachines' 
          | project _ResourceId=tolower(id), tags
          )
          on _ResourceId
      | where tostring(tags.Env) == "Prod"
      

Altri casi d'uso:

  • Usare un tag per determinare se le macchine virtuali devono essere in esecuzione 24x7 o devono essere arrestate di notte.
  • Mostra avvisi in qualsiasi server che contiene un determinato numero di core.

Creare un avviso basato su una query tra servizi dall'area di lavoro Log Analytics

Per creare una regola di avviso basata su una query tra servizi dall'area di lavoro Log Analytics, seguire la procedura descritta in Creare o modificare una regola di avviso di ricerca log selezionando l'area di lavoro Log Analytics nella scheda Ambito.

Nota

È anche possibile eseguire query tra servizi da Esplora dati di Azure e Azure Resource Graph a un'area di lavoro Log Analytics selezionando la risorsa pertinente come ambito dell'avviso.

Limiti

Limitazioni generali delle query tra servizi

  • Le query 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() e app().
  • Le query tra servizi supportano solo le funzioni ".show". Questa funzionalità consente alle query tra cluster di fare riferimento direttamente a una funzione tabulare di Monitoraggio di Azure, Esplora dati di Azure o Azure Resource Graph. Con la query tra servizi sono supportati i comandi seguenti:
    • .show functions
    • .show function {FunctionName}
    • .show database {DatabaseName} schema as json
  • Per i nomi dei database viene fatta distinzione tra maiuscole e minuscole.
  • L'identificazione della colonna Timestamp nel cluster non è supportata. L'API query di Log Analytics non passerà il filtro temporale.
  • Le query tra servizi supportano solo il recupero dei dati.
  • Il collegamento privato di Azure (endpoint privati) e le restrizioni IP non supportano le query tra servizi.
  • mv-expand è limitato a 2.000 record.
  • I log di Monitoraggio di Azure non supportano la funzione external_table() che consente di eseguire query su tabelle esterne in Esplora dati di Azure. Per eseguire query su una tabella esterna, definire external_table(<external-table-name>) come funzione senza parametri in Esplora dati di Azure. Quindi è possibile chiamare la funzione usando l'espressione adx("").<function-name>.

Limitazioni delle query tra servizi di Azure Resource Graph

  • Microsoft Sentinel non supporta le query tra servizi in Azure Resource Graph.
  • Quando si eseguono query sui dati di Azure Resource Graph da Monitoraggio di Azure:
    • La query restituisce solo i primi 1.000 record.
    • Monitoraggio di Azure non restituisce errori di query di Azure Resource Graph.
    • L'editor di query di Log Analytics contrassegna le query valide di Azure Resource Graph come errori di sintassi.
    • I join non sono supportati quando non si usa Hint.
    • Questi operatori non sono supportati: smv-apply(), rand(), arg_max(), arg_min(), avg(), avg_if(), countif(), sumif(), percentile(), percentiles(), percentilew(), percentilesw(), stdev(), stdevif(), stdevp(), variance(), variancep(), varianceif().

Combinare tabelle di Azure Resource Graph con un'area di lavoro Log Analytics

Usare il comando union per combinare tabelle cluster con un'area di lavoro Log Analytics.

Ad esempio:

union AzureActivity, arg("").Resources
| take 10
let CL1 = arg("").Resources ;
union AzureActivity, CL1 | take 10

Quando si usa l'operatore join anziché l'unione, è necessario usare hint per combinare i dati in Azure Resource Graph con i dati nell'area di lavoro Log Analytics. Usare Hint.remote={Direction of the Log Analytics Workspace}. Ad esempio:

Perf | where ObjectName == "Memory" and (CounterName == "Available MBytes Memory")
| extend _ResourceId = replace_string(replace_string(replace_string(_ResourceId, 'microsoft.compute', 'Microsoft.Compute'), 'virtualmachines','virtualMachines'),"resourcegroups","resourceGroups")
| join hint.remote=left (arg("").Resources | where type =~ 'Microsoft.Compute/virtualMachines' | project _ResourceId=id, tags) on _ResourceId | project-away _ResourceId1 | where tostring(tags.env) == "prod"

Passaggi successivi