Korelowanie danych w usłudze Azure Data Explorer i usłudze Azure Resource Graph z danymi w obszarze roboczym usługi Log Analytics
Możesz skorelować dane w usługach Azure Data Explorer i Azure Resource Graph z danymi w obszarze roboczym usługi Log Analytics i zasobami usługi Application Insights, aby ulepszyć analizę w dziennikach usługi Azure Monitor. Usługa Microsoft Sentinel, która również przechowuje dane w obszarach roboczych usługi Log Analytics, obsługuje zapytania między usługami w usłudze Azure Data Explorer, ale nie w usłudze Azure Resource Graph. W tym artykule wyjaśniono, jak uruchamiać zapytania obejmujące wiele usług z dowolnej usługi, która przechowuje dane w obszarze roboczym usługi Log Analytics.
Uruchamianie zapytań między usługami przy użyciu dowolnych narzędzi klienckich obsługujących zapytania język zapytań Kusto (KQL), w tym internetowego interfejsu użytkownika usługi Log Analytics, skoroszytów, programu PowerShell i interfejsu API REST.
Wymagane uprawnienia
Aby uruchomić zapytanie obejmujące wiele usług, które koreluje dane w usłudze Azure Data Explorer lub Azure Resource Graph z danymi w obszarze roboczym usługi Log Analytics, potrzebne są następujące elementy:
Microsoft.OperationalInsights/workspaces/query/*/read
uprawnienia do obszarów roboczych usługi Log Analytics, które wykonujesz, zgodnie z wbudowaną rolą czytelnika usługi Log Analytics.- Uprawnienia czytelnika do zasobów, których dotyczy zapytanie w usłudze Azure Resource Graph.
- Uprawnienia przeglądarki do tabel, których dotyczy zapytanie w usłudze Azure Data Explorer.
Wykonywanie zapytań dotyczących danych w usłudze Azure Data Explorer przy użyciu funkcji adx()
Wprowadź identyfikator klastra usługi Azure Data Explorer w zapytaniu w adx
ramach wzorca, a następnie nazwę bazy danych i tabelę.
adx('https://help.kusto.windows.net/Samples').StormEvents
Łączenie tabel klastra usługi Azure Data Explorer z obszarem roboczym usługi Log Analytics
union
Użyj polecenia , aby połączyć tabele klastra z obszarem roboczym usługi Log Analytics.
Na przykład:
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
Napiwek
Format skrócony jest dozwolony: Nazwa_klastra/InitialCatalog. Na przykład adx('help/Samples')
jest tłumaczony na adx('help.kusto.windows.net/Samples')
.
Jeśli używasz join
operatora zamiast unii, musisz użyć elementu , hint
aby połączyć dane w klastrze usługi Azure Data Explorer z obszarem roboczym usługi Log Analytics. Użyj witryny Hint.remote={Direction of the Log Analytics Workspace}
.
Na przykład:
AzureDiagnostics
| join hint.remote=left adx("cluster=ClusterURI").AzureDiagnostics on (ColumnName)
Dołączanie danych z klastra usługi Azure Data Explorer w jednej dzierżawie przy użyciu zasobu usługi Azure Monitor w innej
Zapytania między dzierżawami między usługami nie są obsługiwane. Zalogowaliśmy się do jednej dzierżawy na potrzeby uruchamiania zapytania obejmującego oba zasoby.
Jeśli zasób usługi Azure Data Explorer znajduje się w dzierżawie A, a obszar roboczy usługi Log Analytics znajduje się w dzierżawie B, użyj jednej z następujących metod:
- Użyj usługi Azure Data Explorer, aby dodać role dla podmiotów zabezpieczeń w różnych dzierżawach. Dodaj swój identyfikator użytkownika w dzierżawie B jako autoryzowanego użytkownika w klastrze usługi Azure Data Explorer. Sprawdź, czy właściwość TrustedExternalTenant w klastrze usługi Azure Data Explorer zawiera dzierżawę B. Uruchom zapytanie krzyżowe w pełni w dzierżawie B.
- Użyj usługi Lighthouse , aby projektować zasób usługi Azure Monitor w dzierżawie A.
Nawiązywanie połączenia z klastrami usługi Azure Data Explorer z różnych dzierżaw
Narzędzie Kusto Explorer automatycznie loguje Cię do dzierżawy, do której pierwotnie należy konto użytkownika. Aby uzyskać dostęp do zasobów w innych dzierżawach przy użyciu tego samego konta użytkownika, musisz jawnie określić TenantId
w parametry połączenia:
Data Source=https://ade.applicationinsights.io/subscriptions/SubscriptionId/resourcegroups/ResourceGroupName;Initial Catalog=NetDefaultDB;AAD Federated Security=True;Authority ID=TenantId
Wykonywanie zapytań dotyczących danych w usłudze Azure Resource Graph przy użyciu funkcji arg() (wersja zapoznawcza)
arg("")
Wprowadź wzorzec, a następnie nazwę tabeli usługi Azure Resource Graph.
Na przykład:
arg("").<Azure-Resource-Graph-table-name>
Napiwek
Operator arg()
jest teraz dostępny na potrzeby zaawansowanego wyszukiwania zagrożeń na ujednoliconej platformie Microsoft Defender. Ta funkcja umożliwia wykonywanie zapytań tylko o dane usługi Microsoft Sentinel. Przeczytaj więcej na stronie Use arg() operator for Azure Resource Graph queries (Używanie operatora arg() dla zapytań usługi Azure Resource Graph.
Oto kilka przykładowych zapytań usługi Azure Log Analytics, które korzystają z nowych funkcji zapytań między usługami usługi Azure Resource Graph:
Filtruj zapytanie usługi Log Analytics na podstawie wyników zapytania usługi 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
Utwórz regułę alertu, która ma zastosowanie tylko do niektórych zasobów pobranych z zapytania usługi ARG:
Wyklucz zasoby na podstawie tagów — na przykład nie wyzwalać alertów dla maszyn wirtualnych za pomocą tagu "Test".
arg("").Resources | where tags.environment=~'Test' | project name
Pobieranie danych wydajności związanych z wykorzystaniem procesora CPU i filtrowanie zasobów za pomocą tagu "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"
Więcej przypadków użycia:
- Użyj tagu, aby określić, czy maszyny wirtualne powinny działać 24x7 lub powinny być zamykane w nocy.
- Pokaż alerty na dowolnym serwerze, który zawiera określoną liczbę rdzeni.
Tworzenie alertu na podstawie zapytania obejmującego wiele usług z obszaru roboczego usługi Log Analytics
Aby utworzyć regułę alertu na podstawie zapytania obejmującego wiele usług z obszaru roboczego usługi Log Analytics, wykonaj kroki opisane w artykule Tworzenie lub edytowanie reguły alertu przeszukiwania dzienników, wybieranie obszaru roboczego usługi Log Analytics na karcie Zakres .
Uwaga
Zapytania między usługami można również uruchamiać z poziomu usług Azure Data Explorer i Azure Resource Graph do obszaru roboczego usługi Log Analytics, wybierając odpowiedni zasób jako zakres alertu.
Ograniczenia
Ogólne ograniczenia zapytań między usługami
- Zapytania obejmujące wiele usług nie obsługują sparametryzowanych funkcji i funkcji, których definicja obejmuje inne wyrażenia między obszarami roboczymi lub między usługami, w tym
adx()
,arg()
,resource()
,workspace()
, iapp()
. - Zapytania między usługami obsługują tylko funkcje ".show".
Ta funkcja umożliwia bezpośrednie odwołowanie się do funkcji tabelarycznej usługi Azure Monitor, Usługi Azure Data Explorer lub usługi Azure Resource Graph.
Następujące polecenia są obsługiwane za pomocą zapytania obejmującego wiele usług:
.show functions
.show function {FunctionName}
.show database {DatabaseName} schema as json
- W nazwach baz danych jest rozróżniana wielkość liter.
- Identyfikowanie kolumny Sygnatura czasowa w klastrze nie jest obsługiwane. Interfejs API zapytań usługi Log Analytics nie przejdzie przez filtr czasu.
- Zapytania między usługami obsługują tylko pobieranie danych.
- Ograniczenia usługi Private Link (prywatnych punktów końcowych) i adresów IP nie obsługują zapytań między usługami.
mv-expand
jest ograniczony do 2000 rekordów.- Dzienniki usługi Azure Monitor nie obsługują
external_table()
funkcji, która umożliwia wykonywanie zapytań dotyczących tabel zewnętrznych w usłudze Azure Data Explorer. Aby wysłać zapytanie do tabeli zewnętrznej, zdefiniujexternal_table(<external-table-name>)
jako funkcję bez parametrów w usłudze Azure Data Explorer. Następnie można wywołać funkcję przy użyciu wyrażeniaadx("").<function-name>
.
Ograniczenia zapytań między usługami usługi Azure Resource Graph
- Usługa Microsoft Sentinel nie obsługuje zapytań między usługami w usłudze Azure Resource Graph.
- Podczas wykonywania zapytań dotyczących danych usługi Azure Resource Graph z usługi Azure Monitor:
- Zapytanie zwraca tylko pierwsze 1000 rekordów.
- Usługa Azure Monitor nie zwraca błędów zapytań usługi Azure Resource Graph.
- Edytor zapytań usługi Log Analytics oznacza prawidłowe zapytania usługi Azure Resource Graph jako błędy składni.
- Sprzężenia nie są obsługiwane, jeśli nie używasz wskazówki.
- Te operatory nie są obsługiwane:
smv-apply()
,rand()
variancep()
variance()
stdevp()
stdevif()
stdev()
arg_max()
percentilesw()
percentilew()
arg_min()
percentiles()
percentile()
avg_if()
avg()
countif()
sumif()
.varianceif()
Łączenie tabel usługi Azure Resource Graph z obszarem roboczym usługi Log Analytics
union
Użyj polecenia , aby połączyć tabele klastra z obszarem roboczym usługi Log Analytics.
Na przykład:
union AzureActivity, arg("").Resources
| take 10
let CL1 = arg("").Resources ;
union AzureActivity, CL1 | take 10
Jeśli używasz join
operatora zamiast unii, musisz użyć elementu , hint
aby połączyć dane w usłudze Azure Resource Graph z danymi w obszarze roboczym usługi Log Analytics. Użyj witryny Hint.remote={Direction of the Log Analytics Workspace}
. Na przykład:
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"