Splunk 검색 규칙을 Microsoft Sentinel로 마이그레이션
Splunk 검색 규칙은 Microsoft Sentinel의 분석 규칙과 비교되는 SIEM(보안 정보 및 이벤트 관리) 구성 요소입니다. 이 문서에서는 Microsoft Sentinel을 식별, 비교 및 마이그레이션하는 개념을 설명합니다. 가장 좋은 방법은 자동으로 변환할 OOTB(기본 제공) 분석 규칙을 식별하는 SIEM 마이그레이션 환경으로 시작하는 것입니다.
Splunk 가시성 배포를 마이그레이션하려면 Splunk에서 Azure Monitor 로그로 마이그레이션하는 방법에 대해 자세히 알아보세요.
감사 규칙
Microsoft Sentinel은 기계 학습 분석을 사용하여 충실도가 높고 실행 가능한 인시던트가 생성됩니다. 기존 Splunk 검색 중 일부는 Microsoft Sentinel에서 중복될 수 있으므로 모두 맹목적으로 마이그레이션하지 마세요. 기존 검색 규칙을 식별할 때 이러한 고려 사항을 검토합니다.
- 비즈니스 우선 순위와 효율성을 고려하여 규칙 마이그레이션에 타당한 사용 사례를 선택해야 합니다.
- Microsoft Sentinel 규칙 유형을 이해하는지 확인합니다.
- 규칙 용어를 이해하는지 확인합니다.
- 지난 6~12개월 동안 경고가 없는 오래된 규칙을 검토하고 여전히 관련이 있는지 확인합니다.
- 일상적으로 무시하는 낮은 수준의 위협이나 경고를 제거합니다.
- 연결된 데이터 원본을 확인하고 데이터 연결 방법을 검토합니다. Microsoft Sentinel Analytics에서는 규칙을 사용하도록 설정하기 전에 데이터 형식이 Log Analytics 작업 영역에 있어야 합니다. 데이터 수집 대화를 다시 논의하여 검색하려는 사용 사례 전반에서 데이터의 깊이와 범위를 확인합니다. 그런 다음 SIEM 마이그레이션 환경을 사용하여 데이터 원본이 적절하게 매핑되도록 합니다.
규칙 마이그레이션
마이그레이션할 Splunk 검색을 식별한 후 마이그레이션 프로세스에 대한 다음 고려 사항을 검토합니다.
- Microsoft Sentinel의 OOTB 분석 규칙의 기존 기능을 현재 사용 사례와 비교합니다. SIEM 마이그레이션 환경을 사용하여 OOTB 템플릿으로 자동으로 변환되는 Splunk 검색을 확인합니다.
- OOTB 분석 규칙에 맞지 않는 검색을 변환합니다. Splunk 검색을 자동으로 변환하는 가장 좋은 방법은 SIEM 마이그레이션 환경을 사용하는 것입니다.
- SOC Prime Threat Detection Marketplace와 같은 커뮤니티 리소스를 탐색하여 사용 사례에 대한 더 많은 알고리즘을 검색합니다.
- 기본 제공 규칙을 사용할 수 없거나 자동으로 변환되지 않는 경우 검색을 수동으로 변환합니다. 새 KQL 쿼리를 만들고 규칙 매핑을 검토합니다.
자세한 내용은 검색 규칙 마이그레이션 모범 사례를 참조 하세요.
규칙 마이그레이션 단계
마이그레이션하려는 각 규칙에 대한 테스트 시스템이 있는지 확인합니다.
전체 테스트 시나리오 및 스크립트를 포함하여 마이그레이션된 규칙에 대한 유효성 검사 프로세스를 준비합니다.
마이그레이션된 규칙을 테스트하는 데 유용한 리소스가 팀에 있는지 확인합니다.
필요한 데이터 원본이 연결되어 있는지 확인하고 데이터 연결 방법을 검토합니다.
Microsoft Sentinel에서 검색을 OOTB 템플릿으로 사용할 수 있는지 확인합니다.
SIEM 마이그레이션 환경을 사용하여 OOTB 템플릿의 번역 및 설치를 자동화합니다.
자세한 내용은 SIEM 마이그레이션 환경 사용을 참조하세요.
검색에 반영되지 않은 사용 사례가 있는 경우 OOTB 규칙 템플릿을 사용하여 사용자 고유의 작업 영역에 대한 규칙을 만듭니다.
Microsoft Sentinel에서 콘텐츠 허브로 이동합니다.
분석 규칙 템플릿에 대한 콘텐츠 형식 필터링
해당하는 각 콘텐츠 허브 솔루션 또는 독립 실행형 분석 규칙 템플릿을 찾아서 설치/업데이트합니다.
자세한 내용은 곧바로 위협 탐지를 참조하세요.
Microsoft Sentinel의 OOTB 규칙에서 다루지 않는 검색이 있는 경우 먼저 자동 번역을 위한 SIEM 마이그레이션 환경을 사용해 보세요.
OOTB 규칙이나 SIEM 마이그레이션이 검색을 완전히 변환하지 않으면 규칙을 수동으로 만듭니다. 이러한 경우 다음 단계를 사용하여 규칙을 만듭니다.
규칙에서 사용할 데이터 원본을 식별합니다. 데이터 원본과 데이터 테이블 간에 매핑 테이블을 만들어 쿼리하려는 Microsoft Sentinel 테이블을 식별합니다.
규칙에 사용할 데이터의 특성, 필드 또는 엔터티를 식별합니다.
규칙 조건과 논리를 식별합니다. 이 단계에서는 KQL 쿼리를 생성하는 방법에 대한 샘플로 규칙 템플릿을 찾는 것이 좋습니다.
필터, 상관 관계 규칙, 활성 목록, 참조 집합, 관심 목록, 탐지 이상 항목, 집계 등을 고려합니다. 레거시 SIEM에서 제공한 참조를 사용하여 쿼리 구문을 가장 잘 매핑하는 방법을 파악할 수 있습니다.
트리거 조건 및 규칙 작업을 파악한 다음, KQL 쿼리를 구성하고 검토합니다. 쿼리를 검토할 때 KQL 최적화 지침 리소스를 고려하세요.
각각의 관련 사용 사례로 규칙을 테스트합니다. 예상 결과를 제공하지 않는 경우 KQL을 검토 및 편집하고 다시 테스트합니다.
만족하면 마이그레이션된 규칙을 고려합니다. 필요에 따라 규칙 작업에 대한 플레이북을 만듭니다. 자세한 내용은 Microsoft Sentinel의 플레이북을 사용하여 위협 대응 자동화를 참조하세요.
분석 규칙에 대해 자세히 알아봅니다.
- 위협 탐지를 위한 사용자 지정 분석 규칙 만들기. 경고 그룹화를 사용하여 지정된 기간 내에 발생하는 경고를 그룹화하여 경고 피로를 줄입니다.
- 데이터 필드를 Microsoft Sentinel의 엔터티에 매핑하여 SOC 엔지니어가 조사 중에 추적할 증거의 일부로 엔터티를 정의할 수 있도록 합니다. 엔터티 매핑을 사용하면 SOC 분석가가 시간과 노력을 줄일 수 있는 직관적인 [조사 그래프](investigate-cases.md#use-the-investigation-graph-to-deep-dive)를 활용할 수 있습니다.
- 증거를 사용하여 인시던트 미리 보기 창에서 특정 인시던트와 관련된 이벤트, 경고 및 책갈피를 표시하는 방법의 예로 UEBA 데이터를 사용하여 인시던트를 조사합니다.
- KQL(Kusto 쿼리 언어): 데이터를 처리하고 결과를 반환하기 위해 Log Analytics 데이터베이스에 읽기 전용 요청을 보내는 데 사용할 수 있습니다. KQL은 엔드포인트용 Microsoft Defender 및 Application Insights와 같은 다른 Microsoft 서비스에서도 사용됩니다.
규칙 용어 비교
이 표에서는 SPL(검색 처리 언어)을 기반으로 하는 Splunk 검색과 비교하여 Microsoft Sentinel의 KQL(Kusto 쿼리 언어)을 기반으로 하는 규칙의 개념을 명확히 하는 데 도움이 됩니다.
Splunk | Microsoft Sentinel | |
---|---|---|
규칙 유형 | • 예약됨 • 실시간 |
• 예약된 쿼리 • 퓨전 • Microsoft 보안 • ML(기계 학습) 동작 분석 |
조건 | SPL에서 정의 | KQL에서 정의 |
트리거 조건 | • 결과 수 • 호스트 수 • 원본 수 • 사용자 지정 |
임계값: 쿼리 결과 수 |
작업 | • 트리거된 경고에 추가 • 이벤트 로그 • 검색 결과 출력 • 기타 등등 |
• 경고 또는 인시던트 만들기 • Logic Apps와 통합 |
규칙 샘플 매핑 및 비교
이러한 샘플을 사용하여 다양한 시나리오에서 규칙을 비교하고 Splunk에서 Microsoft Sentinel로 매핑합니다.
일반 검색 명령
SPL 명령 | 설명 | KQL 연산자 | KQL 예제 |
---|---|---|---|
chart/ timechart |
시계열 차트 작성을 위해 표 형식 출력으로 결과를 반환합니다. | render 연산자 | … | render timechart |
dedup |
지정된 기준과 일치하는 후속 결과를 제거합니다. | • distinct • summarize |
… | summarize by Computer, EventID |
eval |
식을 계산합니다. 일반적인 명령에 대해 알아봅니다.eval |
extend | T | extend duration = endTime - startTime |
fields |
검색 결과에서 필드를 제거합니다. | • project • project-away |
T | project cost=price*quantity, price |
head/tail |
첫 번째 또는 마지막 N개 결과를 반환합니다. | top | T | top 5 by Name desc nulls last |
lookup |
외부 원본에서 필드 값을 추가합니다. | • externaldata • lookup |
KQL 예제 |
rename |
파일 이름을 바꿉니다. 와일드카드를 사용하여 여러 필드를 지정합니다. | project-rename | T | project-rename new_column_name = column_name |
rex |
정규식을 사용하여 필드를 추출하기 위해 그룹 이름을 지정합니다. | matches regex | … | where field matches regex "^addr.*" |
search |
결과를 검색 식과 일치하는 결과로 필터링합니다. | search | search "X" |
sort |
지정된 필드를 기준으로 검색 결과를 정렬합니다. | sort | T | sort by strlen(country) asc, price desc |
stats |
필요에 따라 필드별로 그룹화된 통계를 제공합니다. 일반적인 stats 명령에 관해 자세히 알아봅니다. | summarize | KQL 예제 |
mstats |
이벤트 대신 메트릭에 사용되는 stats와 유사합니다. | summarize | KQL 예제 |
table |
결과 집합에 유지할 필드를 지정하고 데이터를 테이블 형식으로 유지합니다. | project | T | project columnA, columnB |
top/rare |
필드의 가장 많거나 가장 적은 일반 값을 표시합니다. | top | T | top 5 by Name desc nulls last |
transaction |
검색 결과를 트랜잭션으로 그룹화합니다. SPL 예제 |
예제: row_window_session | KQL 예제 |
eventstats |
이벤트의 필드에서 요약 통계를 생성하고 해당 통계를 새 필드에 저장합니다. SPL 예제 |
예: • join • make_list • mv-expand |
KQL 예제 |
streamstats |
필드의 누적 합계를 찾습니다. SPL 예제: ... | streamstats sum(bytes) as bytes _ total \| timechart |
row_cumsum | ...\| serialize cs=row_cumsum(bytes) |
anomalydetection |
지정된 필드에서 변칙을 찾습니다. SPL 예제 |
series_decompose_anomalies() | KQL 예제 |
where |
eval 식을 사용하여 검색 결과를 필터링합니다. 서로 다른 두 필드를 비교하는 데 사용됩니다. |
where | T | where fruit=="apple" |
lookup
명령: 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
명령: KQL 예제
Sales
| summarize NumTransactions=count(),
Total=sum(UnitPrice * NumUnits) by Fruit,
StartOfMonth=startofmonth(SellDateTime)
mstats
명령: KQL 예제
T | summarize count() by price_range=bin(price, 10.0)
transaction
명령: SPL 예제
sourcetype=MyLogTable type=Event
| transaction ActivityId startswith="Start" endswith="Stop"
| Rename timestamp as StartTime
| Table City, ActivityId, StartTime, Duration
transaction
명령: 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
serialize된 행 집합의 열에 대한 세션 시작 값을 계산하는 데 사용합니다 row_window_session()
.
...| extend SessionStarted = row_window_session(
Timestamp, 1h, 5m, ID != prev(ID))
eventstats
명령: SPL 예제
… | bin span=1m _time
|stats count AS count_i by _time, category
| eventstats sum(count_i) as count_total by _time
eventstats
명령: KQL 예제
다음은 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
다음은 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
명령: SPL 예제
sourcetype=nasdaq earliest=-10y
| anomalydetection Close _ Price
anomalydetection
명령: 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)
일반 eval
명령
SPL 명령 | 설명 | SPL 예제 | KQL 명령 | KQL 예제 |
---|---|---|---|---|
abs(X) |
X의 절대값을 반환합니다. | abs(number) |
abs() |
abs(X) |
case(X,"Y",…) |
X 및 Y 인수의 쌍을 사용합니다. 여기서 X 인수는 부울 식입니다. TRUE 로 평가되는 경우 인수는 해당하는 Y 인수를 반환합니다. |
SPL 예제 | case |
KQL 예제 |
ceil(X) |
숫자 X의 최댓값입니다. | ceil(1.9) |
ceiling() |
ceiling(1.9) |
cidrmatch("X",Y) |
특정 서브넷에 속하는 IP 주소를 식별합니다. | 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,…) |
Null이 아닌 첫 번째 값을 반환합니다. | coalesce(null(), "Returned val", null()) |
coalesce() |
coalesce(tolong("not a number"), tolong("42"), 33) == 42 |
cos(X) |
X의 코사인을 계산합니다. | n=cos(0) |
cos() | cos(X) |
exact(X) |
배정밀도 부동 소수점 산술 연산을 사용하여 식 X를 평가합니다. | exact(3.14*num) |
todecimal() |
todecimal(3.14*2) |
exp(X) |
eX를 반환합니다. | exp(3) |
exp() | exp(3) |
if(X,Y,Z) |
X 가 TRUE 로 평가되는 경우 결과는 두 번째 인수 Y 입니다. X 가 FALSE 로 평가되는 경우 결과는 세 번째 인수 Z 로 평가됩니다. |
if(error==200, "OK", "Error") |
iif() |
KQL 예제 |
isbool(X) |
X 가 부울이면 TRUE 를 반환합니다. |
isbool(field) |
• iif() • gettype |
iif(gettype(X) =="bool","TRUE","FALSE") |
isint(X) |
X 가 정수이면 TRUE 를 반환합니다. |
isint(field) |
• iif() • gettype |
KQL 예제 |
isnull(X) |
X 가 null이면 TRUE 를 반환합니다. |
isnull(field) |
isnull() |
isnull(field) |
isstr(X) |
X 가 문자열이면 TRUE 를 반환합니다. |
isstr(field) |
• iif() • gettype |
KQL 예제 |
len(X) |
이 함수는 문자열 X 의 문자 길이를 반환합니다. |
len(field) |
strlen() |
strlen(field) |
like(X,"y") |
X 가 Y 의 SQLite 패턴과 유사한 경우에만 TRUE 를 반환합니다. |
like(field, "addr%") |
• has • contains • startswith • matches regex |
KQL 예제 |
log(X,Y) |
두 번째 인수 Y 를 베이스로 사용하여 첫 번째 인수 X 의 로그를 반환합니다. Y 의 기본값은 10 입니다. |
log(number,2) |
• log • log2 • log10 |
log(X) log2(X) log10(X) |
lower(X) |
X 의 소문자 값을 반환합니다. |
lower(username) |
tolower | tolower(username) |
ltrim(X,Y) |
왼쪽에서 잘린 매개 변수 Y 에 문자와 함께 X 를 반환합니다. Y 의 기본 출력은 공백과 탭입니다. |
ltrim(" ZZZabcZZ ", " Z") |
trim_start() |
trim_start(“ ZZZabcZZ”,” ZZZ”) |
match(X,Y) |
X가 정규식 패턴 Y와 일치하는지 여부를 반환합니다. | match(field, "^\d{1,3}.\d$") |
matches regex |
… | where field matches regex @"^\d{1,3}.\d$") |
max(X,…) |
열의 최댓값을 반환합니다. | max(delay, mydelay) |
• max() • arg_max() |
… | summarize max(field) |
md5(X) |
문자열 값 X 의 MD5 해시를 반환합니다. |
md5(field) |
hash_md5 |
hash_md5("X") |
min(X,…) |
열의 최솟값을 반환합니다. | min(delay, mydelay) |
• min_of() • min() • arg_min |
KQL 예제 |
mvcount(X) |
X 값의 숫자(합계)를 반환합니다. |
mvcount(multifield) |
dcount |
…| summarize dcount(X) by Y |
mvfilter(X) |
부울 X 식을 기준으로 다중값 필드를 필터링합니다. |
mvfilter(match(email, "net$")) |
mv-apply |
KQL 예제 |
mvindex(X,Y,Z) |
시작 위치(0부터 시작) Y 에서 Z 까지 다중값 X 인수의 하위 집합을 반환합니다. |
mvindex( multifield, 2) |
array_slice |
array_slice(arr, 1, 2) |
mvjoin(X,Y) |
다중값 필드 X 및 문자열 구분 기호 Y 를 제공하고 Y 를 사용하여 X 의 개별 값을 조인합니다. |
mvjoin(address, ";") |
strcat_array |
KQL 예제 |
now() |
Unix 시간으로 표시된 현재 시간을 반환합니다. | now() |
now() |
now() now(-2d) |
null() |
인수를 수락하지 않고 NULL 을 반환합니다. |
null() |
null | null |
nullif(X,Y) |
두 개의 인수 X 및 Y 를 포함하고 인수가 서로 다른 경우 X 를 반환합니다. 그렇지 않으면 NULL 을(를) 반환합니다. |
nullif(fieldA, fieldB) |
iif |
iif(fieldA==fieldB, null, fieldA) |
random() |
0 ~2147483647 사이 의사 난수를 반환합니다. |
random() |
rand() |
rand() |
relative_ time(X,Y) |
Epoch 시간 X 및 상대 시간 지정자 Y 가 제공된 경우 X 에 적용된 Y 의 epoch 시간 값을 반환합니다. |
relative_time(now(),"-1d@d") |
unix time | KQL 예제 |
replace(X,Y,Z) |
문자열 X 에서 발생하는 모든 정규식 문자열 Y 를 문자열 Z 로 바꿔서 형성된 문자열을 반환합니다. |
월 및 일 숫자가 전환된 날짜를 반환합니다. 예를 들어, 4/30/2015 입력의 경우 출력은 30/4/2009 입니다.replace(date, "^(\d{1,2})/ (\d{1,2})/", "\2/\1/") |
replace() |
KQL 예제 |
round(X,Y) |
Y 로 지정된 소수 자릿수로 반올림된 X 를 반환합니다. 기본값은 정수로 반올림하는 것입니다. |
round(3.5) |
round |
round(3.5) |
rtrim(X,Y) |
오른쪽에서 잘린 Y 의 문자와 함께 X 를 반환합니다. Y 가 지정되지 않으면 공백과 탭이 잘립니다. |
rtrim(" ZZZZabcZZ ", " Z") |
trim_end() |
trim_end(@"[ Z]+",A) |
searchmatch(X) |
이벤트가 검색 문자열 X 와 일치하는 경우 TRUE 를 반환합니다. |
searchmatch("foo AND bar") |
iif() | iif(field has "X","Yes","No") |
split(X,"Y") |
구분 기호 Y 로 분할된 다중값 필드로 X 를 반환합니다. |
split(address, ";") |
split() |
split(address, ";") |
sqrt(X) |
X 의 제곱근을 반환합니다. |
sqrt(9) |
sqrt() |
sqrt(9) |
strftime(X,Y) |
Y 로 지정된 형식을 사용하여 렌더링된 epoch 시간 값 X 를 반환합니다. |
strftime(_time, "%H:%M") |
format_datetime() |
format_datetime(time,'HH:mm') |
strptime(X,Y) |
문자열 X 로 표시되는 시간이 제공된 경우 형식 Y 에서 구문 분석된 값을 반환합니다. |
strptime(timeStr, "%H:%M") |
format_datetime() | KQL 예제 |
substr(X,Y,Z) |
시작 위치(1부터 시작) Y 부터 Z (선택 사항) 문자에 대한 substring 필드 X 를 반환합니다. |
substr("string", 1, 3) |
substring() |
substring("string", 0, 3) |
time() |
마이크로초 해상도로 벽시계 시간을 반환합니다. | time() |
format_datetime() |
KQL 예제 |
tonumber(X,Y) |
입력 문자열 X 를 숫자로 변환합니다. 여기서 Y (선택 사항, 기본값은 10 )는 변환할 숫자의 베이스를 정의합니다. |
tonumber("0A4",16) |
toint() |
toint("123") |
tostring(X,Y) |
설명 | SPL 예제 | tostring() |
tostring(123) |
typeof(X) |
필드 형식의 문자열 표현을 반환합니다. | typeof(12) |
gettype() |
gettype(12) |
urldecode(X) |
디코딩된 URL X 를 반환합니다. |
SPL 예제 | url_decode |
KQL 예제 |
case(X,"Y",…)
SPL 예제
case(error == 404, "Not found",
error == 500,"Internal Server Error",
error == 200, "OK")
case(X,"Y",…)
KQL 예제
T
| extend Message = case(error == 404, "Not found",
error == 500,"Internal Server Error", "OK")
if(X,Y,Z)
KQL 예제
iif(floor(Timestamp, 1d)==floor(now(), 1d),
"today", "anotherday")
isint(X)
KQL 예제
iif(gettype(X) =="long","TRUE","FALSE")
isstr(X)
KQL 예제
iif(gettype(X) =="string","TRUE","FALSE")
like(X,"y")
예제
… | where field has "addr"
… | where field contains "addr"
… | where field startswith "addr"
… | where field matches regex "^addr.*"
min(X,…)
KQL 예제
min_of (expr_1, expr_2 ...)
…|summarize min(expr)
…| summarize arg_min(Price,*) by Product
mvfilter(X)
KQL 예제
T | mv-apply Metric to typeof(real) on
(
top 2 by Metric desc
)
mvjoin(X,Y)
KQL 예제
strcat_array(dynamic([1, 2, 3]), "->")
relative time(X,Y)
KQL 예제
let toUnixTime = (dt:datetime)
{
(dt - datetime(1970-01-01))/1s
};
replace(X,Y,Z)
KQL 예제
replace( @'^(\d{1,2})/(\d{1,2})/', @'\2/\1/',date)
strptime(X,Y)
KQL 예제
format_datetime(datetime('2017-08-16 11:25:10'),
'HH:mm')
time()
KQL 예제
format_datetime(datetime(2015-12-14 02:03:04),
'h:m:s')
tostring(X,Y)
X
의 필드 값을 문자열로 반환합니다.
X
값이 숫자인 경우X
는 문자열 값으로 형식이 다시 지정됩니다.X
가 부울 값이면X
는TRUE
또는FALSE
로 형식이 다시 지정됩니다.X
가 숫자인 경우 두 번째 인수Y
는 선택 사항이며hex
(X
를 16진수로 변환),commas
(쉼표와 소수점 두 자리로X
형식 지정) 또는duration
(X
를 초 단위 시간 형식에서 읽을 수 있는 시간 형식HH:MM:SS
로 변환) 중 하나일 수 있습니다.
tostring(X,Y)
SPL 예제
이 예제에서는 다음을 반환합니다.
foo=615 and foo2=00:10:15:
… | eval foo=615 | eval foo2 = tostring(
foo, "duration")
urldecode(X)
SPL 예제
urldecode("http%3A%2F%2Fwww.splunk.com%2Fdownload%3Fr%3Dheader")
일반적인 stats
명령 KQL 예제
SPL 명령 | 설명 | KQL 명령 | KQL 예제 |
---|---|---|---|
avg(X) |
X 필드 값의 평균을 반환합니다. |
avg() | avg(X) |
count(X) |
X 필드의 발생 수를 반환합니다. 일치시킬 특정 필드 값을 나타내려면 X 형식을 eval(field="value") 로 지정합니다. |
count() | summarize count() |
dc(X) |
X 필드의 고유 값 수를 반환합니다. |
dcount() | …\| summarize countries=dcount(country) by continent |
earliest(X) |
X 의 시간순으로 가장 먼저 표시된 값을 반환합니다. |
arg_min() | … \| summarize arg_min(TimeGenerated, *) by X |
latest(X) |
X 의 시간순으로 가장 나중에 표시된 값을 반환합니다. |
arg_max() | … \| summarize arg_max(TimeGenerated, *) by X |
max(X) |
X 필드의 최댓값을 반환합니다. X 값이 숫자가 아닌 경우 최댓값은 사전순 순서를 통해 찾을 수 있습니다. |
max() | …\| summarize max(X) |
median(X) |
X 필드의 중간 최댓값을 반환합니다. |
percentile() | …\| summarize percentile(X, 50) |
min(X) |
X 필드의 최솟값을 반환합니다. X 값이 숫자가 아닌 경우 최솟값은 사전순 순서를 통해 찾을 수 있습니다. |
min() | …\| summarize min(X) |
mode(X) |
X 필드의 가장 빈번한 값을 반환합니다. |
top-hitters() | …\| top-hitters 1 of Y by X |
perc(Y) |
Y 필드의 백분위수 X 값을 반환합니다. 예를 들어, perc5(total) 는 total 필드의 다섯 번째 백분위수 값을 반환합니다. |
percentile() | …\| summarize percentile(Y, 5) |
range(X) |
X 필드의 최댓값과 최솟값 사이 차이를 반환합니다. |
range() | range(1, 3) |
stdev(X) |
X 필드의 표본 표준 편차를 반환합니다. |
stdev | stdev() |
stdevp(X) |
X 필드의 모집단 표준 편차를 반환합니다. |
stdevp() | stdevp() |
sum(X) |
X 필드 값의 합계를 반환합니다. |
sum() | sum(X) |
sumsq(X) |
X 필드 값의 제곱 합계를 반환합니다. |
||
values(X) |
X 필드의 모든 고유 값 목록을 다중값 항목으로 반환합니다. 값의 순서는 사전순입니다. |
make_set() | …\| summarize r = make_set(X) |
var(X) |
X 필드의 표본 분산을 반환합니다. |
variance | variance(X) |
다음 단계
이 문서에서는 Splunk에서 Microsoft Sentinel로 마이그레이션 규칙을 매핑하는 방법을 알아보았습니다.