Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zwiększ możliwości analizy w dziennikach usługi Azure Monitor , korelując dane w usługach Azure Data Explorer i Azure Resource Graph przy użyciu danych w obszarze roboczym usługi Log Analytics i zasobach usługi Application Insights. 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. Mimo że usługa Microsoft Sentinel przechowuje dane w obszarach roboczych usługi Log Analytics i obsługuje zapytania obejmujące wiele usług w usłudze Azure Data Explorer, nie każda funkcja usługi Microsoft Sentinel obsługuje zapytania do usługi Azure Resource Graph.
Uruchamianie zapytań między usługami przy użyciu dowolnych narzędzi klienckich, które obsługują zapytania języka KQL (Kusto Query Language), w tym usługi Log Analytics w witrynie Azure Portal, skoroszytach, programie PowerShell i interfejsie API REST.
Wymagania wstępne
| Zasób | Wymagane uprawnienie |
|---|---|
| obszar roboczy usługi Log Analytics |
Microsoft.OperationalInsights/workspaces/query/*/read w obszarach roboczych usługi Log Analytics, w których wykonujesz zapytania, na przykład przy użyciu wbudowanej roli użytkownika odczytu dla Log Analytics. |
| Azure Resource Graph | Uprawnienia do odczytu zasobów, które zapytujesz w usłudze Azure Resource Graph |
| Azure Data Explorer | Wyświetlanie uprawnień do tabel, których dotyczy zapytanie w usłudze Azure Data Explorer |
Uwagi dotyczące implementacji
Zapytania między usługami nie są obsługiwane w następujących scenariuszach:
- Chmury rządowe
- Klastry usługi Data Explorer skonfigurowane z ograniczeniami adresów IP lub usługą Private Link (prywatne punkty końcowe)
Ogólne zagadnienia dotyczące różnych usług
- W nazwach baz danych jest rozróżniana wielkość liter.
- Używaj niesparametryzowanych funkcji i funkcji, których definicja nie zawiera innych wyrażeń między obszarami roboczymi ani między usługami. Dopuszczalne funkcje obejmują
adx(), ,arg(),resource()workspace(), iapp(). - Zapytania między usługami pozwalają jedynie na pobieranie danych.
-
Jedynymi poleceniami, które zapytania obejmujące wiele usług wspierają, są
.showpolecenia. Ta możliwość umożliwia bezpośrednie odwoływanie się do funkcji tabelarycznej w usługach Azure Monitor, Azure Data Explorer lub Azure Resource Graph w ramach zapytań międzysłużątkowych.
.showpolecenia obsługiwane za pomocą zapytania między usługami:.show functions.show function {FunctionName}.show database {DatabaseName} schema as json - Identyfikowanie kolumny Sygnatura czasowa w klastrze nie jest obsługiwane. Interfejs API zapytań usługi Log Analytics nie stosuje filtru czasu.
-
mv-expandobsługuje maksymalnie 2000 rekordów. - Dzienniki usługi Azure Monitor nie obsługują funkcji
external_table(), która umożliwia zapytania do zewnętrznych tabel 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>. - Jeśli używasz
joinoperatora zamiast operatora union, musisz użyć elementuhintaby połączyć dane w Azure Data Explorer lub Azure Resource Graph z danymi w obszarze roboczym usługi Log Analytics. UżyjHint.remote={direction of the Log Analytics workspace}.
Na przykład:AzureDiagnostics | join hint.remote=left adx("cluster=ClusterURI").AzureDiagnostics on (ColumnName)
Zagadnienia dotyczące zapytań w usłudze Azure Resource Graph obejmujące różne usługi
- Część
argzapytania zwraca tylko pierwsze 1000 rekordów. Należy pamiętać o połączeniu z elementemjoin, ponieważ może brakować rekordów, jeśli limit zostanie osiągnięty. - Operator
joinumożliwia łączenie danych z jednej tabeli usługi Azure Resource Graph z jedną tabelą w obszarze roboczym usługi Log Analytics. - 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. Na przykład prawidłowe zapytanie może spowodować wystąpienie błędu w następujący sposób: "Prawidłowa nazwa <> nie odnosi się do żadnej znanej kolumny, tabeli, zmiennej lub funkcji".
- Te operatory nie są obsługiwane:
smv-apply(),rand(),arg_max(),arg_min(),avg(),avg_if(),countif(),sumif(),percentile(),percentiles(),percentilew(),percentilesw(),stdev(),stdevif(),stdevp(),variance(),variancep(),varianceif(),bin_at. - Usługa Microsoft Sentinel nie obsługuje zapytań obejmujących wiele usług we wszystkich funkcjach, w których jest używany język KQL.
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
Wskazówka
Format skrócony jest dozwolony: Nazwa_klastra/InitialCatalog. Na przykład adx('help/Samples') jest tłumaczony na adx('help.kusto.windows.net/Samples').
Połącz dane z klastra usługi Azure Data Explorer w jednej dzierżawie z zasobem usługi Azure Monitor w innej
Zapytania międzydzierżawowe w ramach usług nie są obsługiwane. Jesteś zalogowany do jednej dzierżawy, aby uruchomić zapytanie obejmujące 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 Azure Data Explorer, aby dodać role dla podmiotów w różnych dzierżawach. Dodaj swój identyfikator użytkownika jako autoryzowanego użytkownika w dzierżawie B na klastrze usługi Azure Data Explorer. Sprawdź, czy właściwość TrustedExternalTenant w klastrze usługi Azure Data Explorer zawiera dzierżawcę B. Uruchom pełne zapytanie krzyżowe w dzierżawcy B.
- Użyj usługi Lighthouse, aby przenieść zasób Azure Monitor do dzierżawy A.
Nawiązywanie połączenia z klastrami usługi Azure Data Explorer w różnych dzierżawach
Narzędzie Kusto Explorer automatycznie loguje Cię do dzierżawcy, do którego 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>
Wskazówka
Operator arg() jest teraz dostępny na potrzeby zaawansowanego wyszukiwania w portalu usługi Microsoft Defender. Ta funkcja umożliwia wykonywanie zapytań do tabel Microsoft Sentinel. Aby uzyskać więcej informacji, zobacz Zapytania usługi Azure Resource Graph w zaawansowanym eksplorowaniu.
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:
Przykład: filtrowanie zapytania 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
Przykłady: tworzenie reguły alertu, która ma zastosowanie tylko do niektórych zasobów pobranych z zapytania arg()
Wyklucz zasoby na podstawie tagów. Na przykład nie wyzwalaj alertów dla maszyn wirtualnych z tagiem 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 przykładowych 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 zdefiniowaną 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 Tworzenie lub edytowanie reguły alertu przeszukiwania dzienników, wybierając obszar roboczy usługi Log Analytics na karcie Zakres.
Wskazówka
Uruchom zapytania obejmujące wiele usług z usług Azure Data Explorer i Azure Resource Graph do obszaru roboczego usługi Log Analytics, wybierając odpowiedni zasób jako zakres alertu.
Łą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ć hint aby połączyć dane w usłudze Azure Resource Graph z danymi w obszarze roboczym usługi Log Analytics. Użyj 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"