Wykonywanie zapytań dotyczących danych przy użyciu języka Kusto Query Language
Do wyszukiwania i filtrowania zebranych danych można użyć język zapytań Kusto (KQL) w usłudze Microsoft Sentinel.
Kusto Query Language
Język KQL umożliwia tworzenie, przechowywanie i uruchamianie interaktywnej analizy na zebranych danych. Usługa Microsoft Sentinel używa języka KQL do wizualizacji i analizowania ważnych danych. Za pomocą języka KQL można tworzyć złożone zapytania analityczne, które zawierają niektóre z następujących operatorów:
- Kolumny obliczeniowe
- Funkcje sprzężenia
- Grupowanie według agregacji
Pisanie i uruchamianie zapytań podstawowych
Zapytanie jest żądaniem tylko do odczytu, które przetwarza dane i zwraca wyniki tego przetwarzania bez modyfikowania danych lub metadanych. Podobnie jak zapytania języka SQL, zapytania języka KQL używają jednostek schematu, które są organizowane w formie hierarchii, takiej jak bazy danych, tabele i kolumny. Schemat to zbiór tabel pogrupowanych w kategorie logiczne. Zapytania składają się z sekwencji instrukcji, które są rozdzielone średnikami (;).
Konstruując zapytanie, należy rozpocząć od nazwy tabeli lub polecenia wyszukiwania. Na przykład następujące zapytanie pobiera wszystkie rekordy z Event
tabeli:
Event
Aby oddzielić polecenia, można użyć znaku kreski pionowej (|). Dane wyjściowe pierwszego polecenia stają się danymi wejściowymi następnego polecenia. Do pojedynczego zapytania można dodać dowolną liczbę poleceń. Następujące zapytanie pobiera rekordy z Event
tabeli, a następnie wyszukuje je error
w dowolnej właściwości:
Event
| search error
Można utworzyć zapytanie z operatorami tabelarycznymi i skalarnymi, które język KQL łączy w wiele instrukcji wyrażeń tabelarycznych, generujących wyniki zapytania.
source1 | operator1 | operator2
W poniższym przykładzie źródłem jest AzureActivity
. Pierwszy operator to where
, który filtruje rekordy na podstawie wyrażenia logicznego. Drugi operator to ponownie where
:
AzureActivity
| where OperationName == 'Delete Virtual Machine'
| where ActivityStatus == 'Accepted'
Domyślnie usługa Log Analytics ogranicza zapytania do zakresu czasu wynoszącego ostatnie 24 godziny. Aby ustawić inny zakres czasu, możesz dodać jawny TimeGenerated
filtr do zapytania lub użyć kontrolki Time range
. Następujące zapytanie zwraca na przykład dane z poprzedniej godziny:
AzureActivity
| where OperationName == 'Delete Virtual Machine'
| where ActivityStatus == 'Accepted'
| where TimeGenerated > ago (1h)
Zapytania można łączyć za pomocą kilku powszechnie używanych operatorów:
count
. Zwraca liczbę wierszy w tabeli.take
. Zwraca maksymalnie podaną liczbę wierszy danych.project
. Wybiera podzestaw kolumn.sort
. Sortuje wiersze tabeli wejściowej w kolejności określonej za pomocą jednej lub większej liczby kolumn.top
. Zwraca N pierwszych rekordów i sortuje je według określonych kolumn.extend
. Oblicza kolumny pochodne.summarize
. Agreguje grupy wierszy.render
. Renderuje wyniki w formie graficznych danych wyjściowych.
Aby połączyć rekordy z dwóch źródeł (tabel), możesz użyć join
operatora . Operator union
łączy co najmniej dwie tabele w jedną.
Aby uzyskać więcej informacji, zapoznaj się z samouczkiem usługi Log Analytics firmy Microsoft, w którym zamiast pracy z samym zapytaniem, do kompilowania i uruchamiania zapytania są używane funkcje usługi Log Analytics.
Możesz również skorzystać z samouczka usługi Azure Data Explorer, aby dowiedzieć się więcej o języku KQL.
Uwaga
Usługa Log Analytics usługi Microsoft Sentinel nie obsługuje całej składni języka KQL używanej w usłudze Azure Data Explorer.
Repozytorium usługi Microsoft Sentinel w witrynie GitHub
Możesz również użyć repozytorium Usługi Microsoft Sentinel w usłudze GitHub, aby wyszukać wyspecjalizowane zapytania i skoroszyty, aby ułatwić zabezpieczanie środowiska i wyszukiwanie zagrożeń. Na przykład następujące zapytanie z repozytorium GitHub usługi Microsoft Sentinel wyświetla podejrzane delegowanie uprawnień do kont użytkowników.
let timeframe = 7d;
AzureActivity
| where TimeGenerated >= ago(timeframe)
| where OperationName == "Create role assignment"
| where ActivityStatus == "Succeeded"
| project Caller, CallerIpAddress
| evaluate basket()
| extend AccountCustomEntity = Caller, IPCustomEntity = CallerIpAddress
Zapytanie analizuje adres IP, z którego administrator przyznaje dostęp do zasobów platformy Azure innym użytkownikom. Jeśli operacja nie pochodzi z prawidłowego adresu IP, zapytanie sygnalizuje podejrzane działania, które można dokładniej zbadać.
Jeśli chcesz wypróbować kilka przykładów, użyj środowiska demonstracyjnego w witrynie Azure Portal.