Migrowanie reguł wykrywania splunk do usługi Microsoft Sentinel
Reguły wykrywania splunk to składniki zarządzania informacjami i zdarzeniami zabezpieczeń (SIEM), które porównują się z regułami analizy w usłudze Microsoft Sentinel. W tym artykule opisano pojęcia dotyczące identyfikowania, porównywania i migrowania ich do usługi Microsoft Sentinel. Najlepszym sposobem jest rozpoczęcie od środowiska migracji rozwiązania SIEM, które identyfikuje gotowe do użycia reguły analizy (OOTB) w celu automatycznego tłumaczenia na.
Jeśli chcesz przeprowadzić migrację wdrożenia funkcji Obserwacja splunk, dowiedz się więcej o sposobie migracji z rozwiązania Splunk do dzienników usługi Azure Monitor.
Reguły inspekcji
Usługa Microsoft Sentinel używa analizy uczenia maszynowego do tworzenia zdarzeń o wysokiej wierności i z możliwością działania. Niektóre z istniejących wykryć splunk mogą być nadmiarowe w usłudze Microsoft Sentinel, więc nie migruj ich wszystkich ślepo. Zapoznaj się z tymi zagadnieniami, aby zidentyfikować istniejące reguły wykrywania.
- Pamiętaj, aby wybrać przypadki użycia, które uzasadniają migrację reguł, biorąc pod uwagę priorytet biznesowy i wydajność.
- Sprawdź, czy rozumiesz typy reguł usługi Microsoft Sentinel.
- Sprawdź, czy rozumiesz terminologię dotyczącą reguł.
- Przejrzyj nieaktualne reguły, które nie mają alertów z ostatnich 6–12 miesięcy, i ustal, czy są one nadal istotne.
- Wyeliminuj zagrożenia niskiego poziomu lub alerty, które rutynowo ignorujesz.
- Potwierdź połączone źródła danych i przejrzyj metody połączenia danych. Analiza usługi Microsoft Sentinel wymaga, aby typ danych był obecny w obszarze roboczym usługi Log Analytics przed włączeniem reguły. Ponownie zajmij się konwersacjami zbierania danych, aby zapewnić głębokość i szerokość danych w różnych przypadkach użycia, które mają być wykrywane. Następnie użyj środowiska migracji rozwiązania SIEM, aby upewnić się, że źródła danych są odpowiednio mapowane.
Migrowanie reguł
Po zidentyfikowaniu wykrywania splunk do migracji zapoznaj się z tymi zagadnieniami dotyczącymi procesu migracji:
- Porównaj istniejące funkcje reguł analizy OOTB usługi Microsoft Sentinel z bieżącymi przypadkami użycia. Użyj środowiska migracji rozwiązania SIEM, aby sprawdzić, które wykrycia splunk są automatycznie konwertowane na szablony OOTB.
- Przetłumacz wykrycia, które nie są zgodne z regułami analizy OOTB. Najlepszym sposobem automatycznego tłumaczenia wykrywania splunk jest użycie środowiska migracji rozwiązania SIEM.
- Odkryj więcej algorytmów dla Twoich przypadków użycia, eksplorując zasoby społeczności, takie jak witryna Marketplace wykrywania zagrożeń SOC Prime.
- Ręczne tłumaczenie wykryć, jeśli wbudowane reguły nie są dostępne lub nie są automatycznie tłumaczone. Utwórz nowe zapytania KQL i przejrzyj mapowanie reguł.
Aby uzyskać więcej informacji, zobacz najlepsze rozwiązania dotyczące migrowania reguł wykrywania.
Kroki migracji reguł
Sprawdź, czy masz system testowania dla każdej reguły, którą chcesz migrować.
Przygotuj proces weryfikacji dla zmigrowanych reguł, w tym scenariusze i skrypty pełnego testu.
Upewnij się, że zespół ma przydatne zasoby do testowania migrowanych reguł.
Upewnij się, że masz połączone wymagane źródła danych i przejrzyj metody połączenia danych.
Sprawdź, czy twoje wykrycia są dostępne jako szablony OOTB w usłudze Microsoft Sentinel:
Użyj środowiska migracji rozwiązania SIEM, aby zautomatyzować tłumaczenie i instalację szablonów OOTB.
Aby uzyskać więcej informacji, zobacz Używanie środowiska migracji rozwiązania SIEM.
Jeśli przypadki użycia nie zostały odzwierciedlone w wykrywaniu, utwórz reguły dla własnego obszaru roboczego za pomocą szablonów reguł OOTB.
W usłudze Microsoft Sentinel przejdź do centrum zawartości.
Filtruj typ zawartości dla szablonów reguł analizy.
Znajdź i zainstaluj/zaktualizuj każde odpowiednie rozwiązanie centrum zawartości lub autonomiczny szablon reguły analizy.
Aby uzyskać więcej informacji, zobacz Wykrywanie zagrożeń poza urządzeniem.
Jeśli masz wykrycia, które nie są objęte regułami OOTB usługi Microsoft Sentinel, najpierw wypróbuj środowisko migracji rozwiązania SIEM na potrzeby automatycznego tłumaczenia.
Jeśli ani reguły OOTB, ani migracja rozwiązania SIEM całkowicie nie przetłumaczą wykrywania, utwórz regułę ręcznie. W takich przypadkach wykonaj następujące kroki, aby utworzyć regułę:
Zidentyfikuj źródła danych, których chcesz użyć w regule. Zidentyfikuj tabele usługi Microsoft Sentinel, które chcesz wykonać, tworząc tabelę mapowania między źródłami danych i tabelami danych.
Zidentyfikuj wszystkie atrybuty, pola lub jednostki w danych, które mają być używane w regułach.
Zidentyfikuj kryteria i logikę reguły. Na tym etapie rozważ znalezienie szablonów reguł jako przykłady tworzenia zapytań KQL.
Rozważ filtry, reguły korelacji, aktywne listy, zestawy odwołań, listy kontrolne, anomalie wykrywania, agregacje itd. Możesz użyć odwołań dostarczonych przez starsze rozwiązanie SIEM, aby zrozumieć , jak najlepiej mapować składnię zapytań.
Zidentyfikuj warunek wyzwalacza i akcję reguły, a następnie skonstruuj i przejrzyj zapytanie KQL. Podczas przeglądania zapytania rozważ zasoby wskazówek dotyczących optymalizacji języka KQL.
Przetestuj regułę przy użyciu każdego z odpowiednich przypadków użycia. Jeśli nie dostarczy oczekiwanych wyników, przejrzyj i zmodyfikuj język KQL i przetestuj go ponownie.
Jeśli masz pewność, że reguła została zmigrowana. Utwórz podręcznik dla akcji reguły zgodnie z potrzebami. Aby uzyskać więcej informacji, zobacz artykuł Automatyzowanie reagowania na zagrożenia za pomocą podręczników w usłudze Microsoft Sentinel.
Dowiedz się więcej o regułach analizy:
- Tworzenie niestandardowych reguł analizy w celu wykrywania zagrożeń. Grupowanie alertów umożliwia zmniejszenie zmęczenia alertów przez grupowanie alertów występujących w danym przedziale czasu.
- Mapowanie pól danych na jednostki w usłudze Microsoft Sentinel w celu umożliwienia inżynierom SOC definiowania jednostek w ramach dowodów do śledzenia podczas badania. Mapowanie jednostek umożliwia również analitykom SOC korzystanie z intuicyjnego [wykresu badania] (zbadaj przypadki.md#use-the-investigation-graph-to-deep-dive), co może pomóc skrócić czas i nakład pracy.
- Zbadaj zdarzenia przy użyciu danych UEBA, jako przykład użycia dowodów do wyświetlania zdarzeń, alertów i wszystkich zakładek skojarzonych z konkretnym zdarzeniem w okienku podglądu incydentu.
- język zapytań Kusto (KQL), których można użyć do wysyłania żądań tylko do odczytu do bazy danych usługi Log Analytics w celu przetwarzania danych i zwracania wyników. Język KQL jest również używany w innych usługi firmy Microsoft, takich jak Ochrona punktu końcowego w usłudze Microsoft Defender i Application Insights.
Porównanie terminologii dotyczącej reguł
Ta tabela ułatwia wyjaśnienie koncepcji reguły opartej na język zapytań Kusto (KQL) w usłudze Microsoft Sentinel w porównaniu z wykrywaniem splunk na podstawie języka przetwarzania wyszukiwania (SPL).
Splunk | Microsoft Sentinel | |
---|---|---|
Typ reguły | •Zaplanowane •Czasu rzeczywistego |
• Zaplanowane zapytanie •Fuzja • Zabezpieczenia firmy Microsoft • Analiza zachowań uczenia maszynowego |
Kryteria | Definiowanie w usłudze SPL | Definiowanie w języku KQL |
Warunek wyzwalacza | • Liczba wyników • Liczba hostów • Liczba źródeł •Zwyczaj |
Próg: liczba wyników zapytania |
Akcja | • Dodawanie do wyzwalanych alertów • Zdarzenie dziennika • Wyniki wyjściowe do wyszukania • I więcej |
• Tworzenie alertu lub zdarzenia • Integruje się z usługą Logic Apps |
Mapuj i porównaj przykłady reguł
Skorzystaj z tych przykładów, aby porównać i mapować reguły z rozwiązania Splunk do usługi Microsoft Sentinel w różnych scenariuszach.
Typowe polecenia wyszukiwania
Polecenie SPL | opis | Operator KQL | Przykład KQL |
---|---|---|---|
chart/ timechart |
Zwraca wyniki w tabelarycznych danych wyjściowych wykresów szeregów czasowych. | operator renderowania | … | render timechart |
dedup |
Usuwa kolejne wyniki zgodne z określonym kryterium. | • odrębne • podsumowywanie |
… | summarize by Computer, EventID |
eval |
Oblicza wyrażenie. Dowiedz się więcej o typowych eval poleceniach. |
rozszerzyć | T | extend duration = endTime - startTime |
fields |
Usuwa pola z wyników wyszukiwania. | • projekt • odejście od projektu |
T | project cost=price*quantity, price |
head/tail |
Zwraca pierwsze lub ostatnie N wyników. | Do góry | T | top 5 by Name desc nulls last |
lookup |
Dodaje wartości pól ze źródła zewnętrznego. | • dane zewnętrzne • wyszukiwanie |
Przykład KQL |
rename |
Zmienia nazwę pola. Użyj symboli wieloznacznych, aby określić wiele pól. | zmiana nazwy projektu | T | project-rename new_column_name = column_name |
rex |
Określa nazwy grup używające wyrażeń regularnych do wyodrębniania pól. | dopasowanie wyrażeń regularnych | … | where field matches regex "^addr.*" |
search |
Filtruje wyniki do wyników odpowiadających wyrażeniu wyszukiwania. | search | search "X" |
sort |
Sortuje wyniki wyszukiwania według określonych pól. | sort | T | sort by strlen(country) asc, price desc |
stats |
Udostępnia statystyki, opcjonalnie pogrupowane według pól. Dowiedz się więcej o typowych poleceniach statystyk. | podsumować | Przykład KQL |
mstats |
Podobnie jak w przypadku statystyk, używanych w metrykach zamiast zdarzeń. | podsumować | Przykład KQL |
table |
Określa, które pola mają być przechowywane w zestawie wyników, i przechowuje dane w formacie tabelarycznym. | projekt | T | project columnA, columnB |
top/rare |
Wyświetla najbardziej lub najmniej typowe wartości pola. | Do góry | T | top 5 by Name desc nulls last |
transaction |
Grupuje wyniki wyszukiwania w transakcjach. Przykład spl |
Przykład: row_window_session | Przykład KQL |
eventstats |
Generuje statystyki podsumowania z pól w zdarzeniach i zapisuje te statystyki w nowym polu. Przykład spl |
Przykłady: • sprzężenia • make_list • rozszerzenie mv-expand |
Przykład KQL |
streamstats |
Znajdź sumę skumulowaną pola. Przykład spl: ... | streamstats sum(bytes) as bytes _ total \| timechart |
row_cumsum | ...\| serialize cs=row_cumsum(bytes) |
anomalydetection |
Znajdź anomalie w określonym polu. Przykład spl |
series_decompose_anomalies() | Przykład KQL |
where |
Filtruje wyniki wyszukiwania przy użyciu eval wyrażeń. Służy do porównywania dwóch różnych pól. |
gdzie | T | where fruit=="apple" |
lookup
polecenie: przykład KQL
Users
| where UserID in ((externaldata (UserID:string) [
@"https://storageaccount.blob.core.windows.net/storagecontainer/users.txt"
h@"?...SAS..." // Secret token to access the blob
])) | ...
stats
polecenie: przykład KQL
Sales
| summarize NumTransactions=count(),
Total=sum(UnitPrice * NumUnits) by Fruit,
StartOfMonth=startofmonth(SellDateTime)
mstats
polecenie: przykład KQL
T | summarize count() by price_range=bin(price, 10.0)
transaction
polecenie: przykład spl
sourcetype=MyLogTable type=Event
| transaction ActivityId startswith="Start" endswith="Stop"
| Rename timestamp as StartTime
| Table City, ActivityId, StartTime, Duration
transaction
polecenie: przykład KQL
let Events = MyLogTable | where type=="Event";
Events
| where Name == "Start"
| project Name, City, ActivityId, StartTime=timestamp
| join (Events
| where Name == "Stop"
| project StopTime=timestamp, ActivityId)
on ActivityId
| project City, ActivityId, StartTime,
Duration = StopTime – StartTime
Służy row_window_session()
do obliczania wartości rozpoczęcia sesji dla kolumny w serializowanym zestawie wierszy.
...| extend SessionStarted = row_window_session(
Timestamp, 1h, 5m, ID != prev(ID))
eventstats
polecenie: przykład spl
… | bin span=1m _time
|stats count AS count_i by _time, category
| eventstats sum(count_i) as count_total by _time
eventstats
polecenie: przykład KQL
Oto przykład z instrukcją join
:
let binSize = 1h;
let detail = SecurityEvent
| summarize detail_count = count() by EventID,
tbin = bin(TimeGenerated, binSize);
let summary = SecurityEvent
| summarize sum_count = count() by
tbin = bin(TimeGenerated, binSize);
detail
| join kind=leftouter (summary) on tbin
| project-away tbin1
Oto przykład z instrukcją make_list
:
let binSize = 1m;
SecurityEvent
| where TimeGenerated >= ago(24h)
| summarize TotalEvents = count() by EventID,
groupBin =bin(TimeGenerated, binSize)
|summarize make_list(EventID), make_list(TotalEvents),
sum(TotalEvents) by groupBin
| mvexpand list_EventID, list_TotalEvents
anomalydetection
polecenie: przykład spl
sourcetype=nasdaq earliest=-10y
| anomalydetection Close _ Price
anomalydetection
polecenie: przykład KQL
let LookBackPeriod= 7d;
let disableAccountLogon=SignIn
| where ResultType == "50057"
| where ResultDescription has "account is disabled";
disableAccountLogon
| make-series Trend=count() default=0 on TimeGenerated
in range(startofday(ago(LookBackPeriod)), now(), 1d)
| extend (RSquare,Slope,Variance,RVariance,Interception,
LineFit)=series_fit_line(Trend)
| extend (anomalies,score) =
series_decompose_anomalies(Trend)
Typowe eval
polecenia
Polecenie SPL | opis | Przykład spl | Polecenie KQL | Przykład KQL |
---|---|---|---|---|
abs(X) |
Zwraca wartość bezwzględną X. | abs(number) |
abs() |
abs(X) |
case(X,"Y",…) |
Przyjmuje pary argumentów X i Y , gdzie X argumenty są wyrażeniami logicznymi. Po obliczeniu TRUE wartości argumenty zwracają odpowiedni Y argument. |
Przykład spl | case |
Przykład KQL |
ceil(X) |
Sufit liczby X. | ceil(1.9) |
ceiling() |
ceiling(1.9) |
cidrmatch("X",Y) |
Identyfikuje adresy IP należące do określonej podsieci. | cidrmatch ("123.132.32.0/25",ip) |
• ipv4_is_match() • ipv6_is_match() |
ipv4_is_match('192.168.1.1', '192.168.1.255') == false |
coalesce(X,…) |
Zwraca pierwszą wartość, która nie ma wartości null. | coalesce(null(), "Returned val", null()) |
coalesce() |
coalesce(tolong("not a number"), tolong("42"), 33) == 42 |
cos(X) |
Oblicza cosinus X. | n=cos(0) |
cos() | cos(X) |
exact(X) |
Oblicza wyrażenie X przy użyciu arytmetyki zmiennoprzecinkowych o podwójnej precyzji. | exact(3.14*num) |
todecimal() |
todecimal(3.14*2) |
exp(X) |
Zwraca wartość eX. | exp(3) |
exp() | exp(3) |
if(X,Y,Z) |
Jeśli X zostanie obliczona TRUE wartość , wynikiem jest drugi argument Y . Jeśli X zostanie obliczona FALSE wartość , wynik zwróci wynik do trzeciego argumentu Z . |
if(error==200, "OK", "Error") |
iif() |
Przykład KQL |
isbool(X) |
Zwraca wartość TRUE , jeśli X jest wartością logiczną. |
isbool(field) |
• iif() • gettype |
iif(gettype(X) =="bool","TRUE","FALSE") |
isint(X) |
Zwraca wartość TRUE , jeśli X jest liczbą całkowitą. |
isint(field) |
• iif() • gettype |
Przykład KQL |
isnull(X) |
Zwraca wartość TRUE , jeśli X ma wartość null. |
isnull(field) |
isnull() |
isnull(field) |
isstr(X) |
Zwraca wartość TRUE , jeśli X jest ciągiem. |
isstr(field) |
• iif() • gettype |
Przykład KQL |
len(X) |
Ta funkcja zwraca długość znaku ciągu X . |
len(field) |
strlen() |
strlen(field) |
like(X,"y") |
Zwraca wartość TRUE if i tylko wtedy, gdy X jest jak wzorzec SQLite w pliku Y . |
like(field, "addr%") |
• has • contains • startswith • dopasowanie wyrażeń regularnych |
Przykład KQL |
log(X,Y) |
Zwraca dziennik pierwszego argumentu X przy użyciu drugiego argumentu Y jako podstawy. Wartość domyślna Y to 10 . |
log(number,2) |
• log • log2 • log10 |
log(X) log2(X) log10(X) |
lower(X) |
Zwraca małą wartość .X |
lower(username) |
tolower | tolower(username) |
ltrim(X,Y) |
Zwraca X znaki w parametrze Y przyciętym z lewej strony. Domyślne dane wyjściowe to Y spacje i karty. |
ltrim(" ZZZabcZZ ", " Z") |
trim_start() |
trim_start(“ ZZZabcZZ”,” ZZZ”) |
match(X,Y) |
Zwraca wartość , jeśli X pasuje do wzorca wyrażenia regularnego Y. | match(field, "^\d{1,3}.\d$") |
matches regex |
… | where field matches regex @"^\d{1,3}.\d$") |
max(X,…) |
Zwraca wartość maksymalną w kolumnie. | max(delay, mydelay) |
• max() • arg_max() |
… | summarize max(field) |
md5(X) |
Zwraca skrót MD5 wartości X ciągu . |
md5(field) |
hash_md5 |
hash_md5("X") |
min(X,…) |
Zwraca wartość minimalną w kolumnie. | min(delay, mydelay) |
• min_of() • min() • arg_min |
Przykład KQL |
mvcount(X) |
Zwraca liczbę (łączną X ) wartości. |
mvcount(multifield) |
dcount |
…| summarize dcount(X) by Y |
mvfilter(X) |
Filtruje pole wielowarte na podstawie wyrażenia logicznego X . |
mvfilter(match(email, "net$")) |
mv-apply |
Przykład KQL |
mvindex(X,Y,Z) |
Zwraca podzbiór argumentu wielowartościowego X z pozycji początkowej (na podstawie zera) Y do Z (opcjonalnie). |
mvindex( multifield, 2) |
array_slice |
array_slice(arr, 1, 2) |
mvjoin(X,Y) |
Biorąc pod uwagę wielowartościowe pole X i ogranicznik Y ciągu , i łączy poszczególne wartości X przy użyciu metody Y . |
mvjoin(address, ";") |
strcat_array |
Przykład KQL |
now() |
Zwraca bieżący czas reprezentowany w czasie systemu Unix. | now() |
now() |
now() now(-2d) |
null() |
Nie akceptuje argumentów i zwraca wartość NULL . |
null() |
null | null |
nullif(X,Y) |
Zawiera dwa argumenty i X Y , i zwraca X , jeśli argumenty są różne. W przeciwnym razie zwraca wartość NULL . |
nullif(fieldA, fieldB) |
iif |
iif(fieldA==fieldB, null, fieldA) |
random() |
Zwraca pseudolosową liczbę z zakresu od 0 do 2147483647 . |
random() |
rand() |
rand() |
relative_ time(X,Y) |
Biorąc pod uwagę czas X epoki i specyfikator Y czasu względnego , zwraca wartość czasu epoki zastosowaną Y do X . |
relative_time(now(),"-1d@d") |
czas systemu unix | Przykład KQL |
replace(X,Y,Z) |
Zwraca ciąg utworzony przez podstawianie ciągu Z dla każdego wystąpienia ciągu wyrażenia Y regularnego w ciągu X . |
Zwraca datę z przełączonymi liczbami miesięcy i dni. Na przykład dla danych wejściowych 4/30/2015 dane wyjściowe to 30/4/2009 :replace(date, "^(\d{1,2})/ (\d{1,2})/", "\2/\1/") |
replace() |
Przykład KQL |
round(X,Y) |
Zwraca zaokrąglone X do liczby miejsc dziesiętnych określonych przez Y . Wartość domyślna to zaokrąglenie do liczby całkowitej. |
round(3.5) |
round |
round(3.5) |
rtrim(X,Y) |
Zwraca X znaki Y przycięte z prawej strony. Jeśli Y nie zostanie określony, spacje i karty zostaną przycięte. |
rtrim(" ZZZZabcZZ ", " Z") |
trim_end() |
trim_end(@"[ Z]+",A) |
searchmatch(X) |
Zwraca TRUE wartość , jeśli zdarzenie pasuje do ciągu X wyszukiwania . |
searchmatch("foo AND bar") |
iif() | iif(field has "X","Yes","No") |
split(X,"Y") |
Zwraca X jako pole wielowarte podzielone przez ogranicznik Y . |
split(address, ";") |
split() |
split(address, ";") |
sqrt(X) |
Zwraca pierwiastek kwadratowy elementu X . |
sqrt(9) |
sqrt() |
sqrt(9) |
strftime(X,Y) |
Zwraca wartość X czasu epoki renderowaną przy użyciu formatu określonego przez Y . |
strftime(_time, "%H:%M") |
format_datetime() |
format_datetime(time,'HH:mm') |
strptime(X,Y) |
Biorąc pod uwagę czas reprezentowany przez ciąg X , zwraca wartość przeanalizowaną z formatu Y . |
strptime(timeStr, "%H:%M") |
format_datetime() | Przykład KQL |
substr(X,Y,Z) |
Zwraca pole X podciągów z pozycji początkowej (opartej na jednej) Y dla Z (opcjonalnie) znaków. |
substr("string", 1, 3) |
substring() |
substring("string", 0, 3) |
time() |
Zwraca czas zegara ściany z mikrosekundową rozdzielczością. | time() |
format_datetime() |
Przykład KQL |
tonumber(X,Y) |
Konwertuje ciąg X wejściowy na liczbę, gdzie Y (opcjonalna wartość domyślna to 10 ) definiuje podstawę liczby do konwersji na. |
tonumber("0A4",16) |
toint() |
toint("123") |
tostring(X,Y) |
Opis | Przykład spl | tostring() |
tostring(123) |
typeof(X) |
Zwraca reprezentację ciągu typu pola. | typeof(12) |
gettype() |
gettype(12) |
urldecode(X) |
Zwraca zdekodowany adres URL X . |
Przykład spl | url_decode |
Przykład KQL |
case(X,"Y",…)
Przykład spl
case(error == 404, "Not found",
error == 500,"Internal Server Error",
error == 200, "OK")
case(X,"Y",…)
Przykład KQL
T
| extend Message = case(error == 404, "Not found",
error == 500,"Internal Server Error", "OK")
if(X,Y,Z)
Przykład KQL
iif(floor(Timestamp, 1d)==floor(now(), 1d),
"today", "anotherday")
isint(X)
Przykład KQL
iif(gettype(X) =="long","TRUE","FALSE")
isstr(X)
Przykład KQL
iif(gettype(X) =="string","TRUE","FALSE")
like(X,"y")
przykład
… | where field has "addr"
… | where field contains "addr"
… | where field startswith "addr"
… | where field matches regex "^addr.*"
min(X,…)
Przykład KQL
min_of (expr_1, expr_2 ...)
…|summarize min(expr)
…| summarize arg_min(Price,*) by Product
mvfilter(X)
Przykład KQL
T | mv-apply Metric to typeof(real) on
(
top 2 by Metric desc
)
mvjoin(X,Y)
Przykład KQL
strcat_array(dynamic([1, 2, 3]), "->")
relative time(X,Y)
Przykład KQL
let toUnixTime = (dt:datetime)
{
(dt - datetime(1970-01-01))/1s
};
replace(X,Y,Z)
Przykład KQL
replace( @'^(\d{1,2})/(\d{1,2})/', @'\2/\1/',date)
strptime(X,Y)
Przykład KQL
format_datetime(datetime('2017-08-16 11:25:10'),
'HH:mm')
time()
Przykład KQL
format_datetime(datetime(2015-12-14 02:03:04),
'h:m:s')
tostring(X,Y)
Zwraca wartość pola jako X
ciąg.
- Jeśli wartość
X
jest liczbą,X
jest ponownie sformatowana na wartość ciągu. - Jeśli
X
wartość logiczna jest wartością logiczną,X
jest ponownie sformatowana naTRUE
lubFALSE
. - Jeśli
X
jest liczbą, drugi argumentY
jest opcjonalny i może byćhex
(konwertowanyX
na szesnastkowy),commas
(formaty z przecinkamiX
i dwoma miejscami dziesiętnymi) lubduration
(konwertuje format z formatu czasu w sekundachX
na format czasu czytelny:HH:MM:SS
).
tostring(X,Y)
Przykład spl
Ten przykład zwraca następujące dane:
foo=615 and foo2=00:10:15:
… | eval foo=615 | eval foo2 = tostring(
foo, "duration")
urldecode(X)
Przykład spl
urldecode("http%3A%2F%2Fwww.splunk.com%2Fdownload%3Fr%3Dheader")
Przykład języka KQL typowych stats
poleceń
Polecenie SPL | opis | Polecenie KQL | Przykład KQL |
---|---|---|---|
avg(X) |
Zwraca średnią wartości pola X . |
avg() | avg(X) |
count(X) |
Zwraca liczbę wystąpień pola X . Aby wskazać konkretną wartość pola do dopasowania, sformatuj X jako eval(field="value") . |
count() | summarize count() |
dc(X) |
Zwraca liczbę unikatowych wartości pola X . |
dcount() | …\| summarize countries=dcount(country) by continent |
earliest(X) |
Zwraca chronologicznie najwcześniejszą widzianą wartość .X |
arg_min() | … \| summarize arg_min(TimeGenerated, *) by X |
latest(X) |
Zwraca chronologicznie ostatnią widzianą wartość .X |
arg_max() | … \| summarize arg_max(TimeGenerated, *) by X |
max(X) |
Zwraca maksymalną wartość pola X . Jeśli wartości są X nieliczbowe, maksymalna wartość zostanie znaleziona za pomocą kolejności alfabetycznej. |
max() | …\| summarize max(X) |
median(X) |
Zwraca wartość najbardziej środkową pola X . |
percentyl() | …\| summarize percentile(X, 50) |
min(X) |
Zwraca minimalną wartość pola X . Jeśli wartości są X nieliczbowe, minimalna wartość zostanie znaleziona za pomocą kolejności alfabetycznej. |
min() | …\| summarize min(X) |
mode(X) |
Zwraca najczęstszą wartość pola X . |
top-hitters() | …\| top-hitters 1 of Y by X |
perc(Y) |
Zwraca wartość percentyla X pola Y . Na przykład perc5(total) zwraca piątą wartość percentyla pola total . |
percentyl() | …\| summarize percentile(Y, 5) |
range(X) |
Zwraca różnicę między wartościami maksymalnymi i minimalnymi pola X . |
range() | range(1, 3) |
stdev(X) |
Zwraca odchylenie standardowe próbki pola X . |
stdev | stdev() |
stdevp(X) |
Zwraca odchylenie standardowe populacji pola X . |
stdevp() | stdevp() |
sum(X) |
Zwraca sumę wartości pola X . |
sum() | sum(X) |
sumsq(X) |
Zwraca sumę kwadratów wartości pola X . |
||
values(X) |
Zwraca listę wszystkich unikatowych wartości pola X jako wpis wielowartościowy. Kolejność wartości jest alfabetyczna. |
make_set() | …\| summarize r = make_set(X) |
var(X) |
Zwraca wariancję próbki pola X . |
wariancja | variance(X) |
Następne kroki
W tym artykule przedstawiono sposób mapowania reguł migracji z rozwiązania Splunk do usługi Microsoft Sentinel.