Gegevens correleren in Azure Data Explorer en Azure Resource Graph met gegevens in een Log Analytics-werkruimte

Verbeter uw analyse in Azure Monitor-logboeken door gegevens in Azure Data Explorer en Azure Resource Graph te correleren met gegevens in uw Log Analytics-werkruimte en Application Insights-resources. In dit artikel wordt uitgelegd hoe u query's voor meerdere services uitvoert vanuit elke service waarin gegevens in een Log Analytics-werkruimte worden opgeslagen. Hoewel Microsoft Sentinel gegevens opslaat in Log Analytics-werkruimten en ondersteuning biedt voor query's tussen services naar Azure Data Explorer, ondersteunt niet elke functie van Microsoft Sentinel query's naar Azure Resource Graph.

Voer query's tussen services uit met behulp van clienthulpprogramma's die KQL-query's (Kusto Query Language) ondersteunen, waaronder Log Analytics in Azure Portal, werkmappen, PowerShell en de REST API.

Vereiste voorwaarden

Hulpbron Toestemming vereist
Log Analytics-werkruimte Microsoft.OperationalInsights/workspaces/query/*/read in de Log Analytics-werkruimten waarin u bijvoorbeeld een query uitvoert
, zoals opgegeven door de Log Analytics-lezer ingebouwde rol.
Azure Resource Graph (Azure hulpbronnen grafiek) Leesmachtigingen voor de resources die u opvraagt in Azure Resource Graph
Azure-gegevensverkenner Machtigingen weergeven voor de tabellen die u opvraagt in Azure Data Explorer

Implementatieoverwegingen

Query's tussen services worden niet ondersteund in de volgende scenario's:

Algemene overwegingen voor meerdere services

  • Databasenamen zijn hoofdlettergevoelig.
  • Gebruik niet-geparameteriseerde functies en functies waarvan de definitie geen andere expressies voor meerdere werkruimten of services bevat. Acceptabele functies zijn onder andere adx(), arg(), resource(), workspace()en app().
  • Query's voor meerdere services ondersteunen alleen het ophalen van gegevens.
  • De enige opdrachten die ondersteuning bieden voor query's tussen services zijn .show opdrachten. Met deze mogelijkheid kunnen query's tussen clusters rechtstreeks verwijzen naar een tabellaire azure Monitor-, Azure Data Explorer- of Azure Resource Graph-functie.

    .show opdrachten die worden ondersteund met de query voor meerdere services:

    .show functions
    .show function {FunctionName}
    .show database {DatabaseName} schema as json

  • Het identificeren van de kolom Timestamp in een cluster wordt niet ondersteund. De Log Analytics-query-API geeft het tijdfilter niet door.
  • mv-expand ondersteunt maximaal 2000 records.
  • Azure Monitor-logboeken bieden geen ondersteuning voor de external_table() functie, waarmee u externe tabellen kunt opvragen in Azure Data Explorer. Als u een query wilt uitvoeren op een externe tabel, definieert u external_table(<external-table-name>) als een functie zonder parameters in Azure Data Explorer. Vervolgens kunt u de functie aanroepen met behulp van de expressie adx("").<function-name>.
  • Wanneer u de join gebruiken om gegevens in Azure Data Explorer of Azure Resource Graph te combineren met gegevens in de Log Analytics-werkruimte. Gebruik Hint.remote={direction of the Log Analytics workspace}.
    Bijvoorbeeld:
    AzureDiagnostics
    | join hint.remote=left adx("cluster=ClusterURI").AzureDiagnostics on (ColumnName)
    

Overwegingen voor query's voor meerdere services in Azure Resource Graph

  • Het arg gedeelte van de query retourneert alleen de eerste 1000 records. Houd er rekening mee dat als u combineert met een join, er mogelijk records ontbreken als de limiet is bereikt.
  • Met de join operator kunt u gegevens uit één Azure Resource Graph-tabel combineren met één tabel in uw Log Analytics-werkruimte.
  • Azure Monitor retourneert geen queryfouten van Azure Resource Graph.
  • De Log Analytics-queryeditor markeert geldige Azure Resource Graph-query's als syntaxisfouten. Een geldige query kan bijvoorbeeld een fout als deze geven: 'De naam geldige naam <> verwijst niet naar een bekende kolom, tabel, variabele of functie'.
  • Deze operators worden niet ondersteund: smv-apply(), rand(), arg_max(), arg_min(), avg(), avg_if(), countif(), sumif(), percentile(), percentiles(), percentilew(), percentilesw(), stdev(), stdevif(), stdevp(), variance(), variancep(), varianceif(), bin_at.
  • Microsoft Sentinel biedt geen ondersteuning voor query's tussen services in alle functies waar KQL wordt gebruikt.

Query's uitvoeren op gegevens in Azure Data Explorer met behulp van adx()

Voer de id in voor een Azure Data Explorer-cluster in een query binnen het adx patroon, gevolgd door de databasenaam en -tabel.

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

Azure Data Explorer-clustertabellen combineren met een Log Analytics-werkruimte

Gebruik de union opdracht om clustertabellen te combineren met een Log Analytics-werkruimte.

Voorbeeld:

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

Aanbeveling

Shorthand-indeling is toegestaan: ClusterName/InitialCatalog. Wordt bijvoorbeeld adx('help/Samples') vertaald naar adx('help.kusto.windows.net/Samples').

Gegevens samenvoegen vanuit een Azure Data Explorer-cluster in één tenant met een Azure Monitor-resource in een andere

Cross-tenant queries tussen de services worden niet ondersteund. U bent aangemeld bij één tenant voor het uitvoeren van de query die beide resources omvat.

Als de Azure Data Explorer-resource zich in Tenant A bevindt en de Log Analytics-werkruimte zich in Tenant B bevindt, gebruikt u een van de volgende methoden:

  • Gebruik Azure Data Explorer om rollen toe te voegen voor principals in verschillende tenants. Voeg uw gebruikers-id toe in Tenant B als geautoriseerde gebruiker in het Azure Data Explorer-cluster. Controleer of de eigenschap TrustedExternalTenant in het Azure Data Explorer-cluster tenant B bevat. Voer de kruisquery volledig uit in Tenant B.
  • Gebruik Lighthouse om de Azure Monitor-resource te projecteren in Tenant A.

Verbinding maken met Azure Data Explorer-clusters vanuit verschillende tenants

Kusto Explorer meldt u automatisch aan bij de tenant waartoe het gebruikersaccount oorspronkelijk behoort. Als u toegang wilt krijgen tot resources in andere tenants met hetzelfde gebruikersaccount, moet u expliciet opgeven TenantId in de verbindingsreeks:

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

Query's uitvoeren op gegevens in Azure Resource Graph met behulp van arg() (preview)

Voer het arg("") patroon in, gevolgd door de naam van de Azure Resource Graph-tabel.

Voorbeeld:

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

Aanbeveling

De arg() operator is nu beschikbaar voor geavanceerde opsporing in de Microsoft Defender-portal. Met deze functie kunt u query's uitvoeren op Microsoft Sentinel-tabellen. Zie voor meer informatie Azure Resource Graph-queries in geavanceerd zoeken.

Hier volgen enkele voorbeelden van Azure Log Analytics-query's die gebruikmaken van de nieuwe mogelijkheden voor query's voor meerdere services van Azure Resource Graph:

Voorbeeld: Log Analytics-query filteren op basis van de resultaten van een Azure Resource Graph-query

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

Voorbeelden: Een waarschuwingsregel maken die alleen van toepassing is op bepaalde resources die afkomstig zijn van een arg()-query

Resources uitsluiten op basis van tags. Activeer bijvoorbeeld geen waarschuwingen voor VM's met een Test tag.

arg("").Resources
| where tags.environment=~'Test'
| project name 

Prestatiegegevens ophalen met betrekking tot HET CPU-gebruik en filteren op resources met de prod tag.

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

Meer voorbeeldgebruiksvoorbeelden

  • Gebruik een tag om te bepalen of vm's 24x7 moeten worden uitgevoerd of 's nachts moeten worden afgesloten.
  • Waarschuwingen weergeven op een server die een gedefinieerd aantal kernen bevat.

Een waarschuwing maken op basis van een query voor meerdere services vanuit uw Log Analytics-werkruimte

Als u een waarschuwingsregel wilt maken op basis van een query tussen services vanuit uw Log Analytics-werkruimte, volgt u de stappen in Een waarschuwingsregel voor zoeken in logboeken maken of bewerken, waarbij u uw Log Analytics-werkruimte selecteert op het tabblad Bereik .

Aanbeveling

Voer query's tussen services uit vanuit Azure Data Explorer en Azure Resource Graph naar een Log Analytics-werkruimte door de relevante resource te selecteren als het bereik van uw waarschuwing.

Azure Resource Graph-tabellen combineren met een Log Analytics-werkruimte

Gebruik de union opdracht om clustertabellen te combineren met een Log Analytics-werkruimte.

Voorbeeld:

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

Wanneer u de join gebruiken om de gegevens in Azure Resource Graph te combineren met gegevens in de Log Analytics-werkruimte. Gebruik Hint.remote={Direction of the Log Analytics Workspace}. Voorbeeld:

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"