Splunk 검색 규칙은 Microsoft Sentinel 분석 규칙과 비교되는 SIEM(보안 정보 및 이벤트 관리) 구성 요소입니다. 이 문서에서는 Microsoft Sentinel 식별, 비교 및 마이그레이션하는 개념을 설명합니다. 가장 좋은 방법은 자동으로 변환할 OOTB(기본 제공) 분석 규칙을 식별하는 SIEM 마이그레이션 환경으로 시작하는 것입니다.
Splunk 가시성 배포를 마이그레이션하려는 경우 Splunk에서 Azure 모니터 로그로 마이그레이션하는 방법에 대해 자세히 알아보세요.
감사 규칙
Microsoft Sentinel 기계 학습 분석을 사용하여 충실도가 높고 실행 가능한 인시던트가 생성됩니다. 기존 Splunk 검색 중 일부는 Microsoft Sentinel 중복될 수 있으므로 모두 맹목적으로 마이그레이션하지 마세요. 기존 검색 규칙을 식별할 때 이러한 고려 사항을 검토합니다.
- 비즈니스 우선 순위 및 효율성을 고려하여 규칙 마이그레이션을 정당화하는 사용 사례를 선택해야 합니다.
- Microsoft Sentinel 규칙 유형을 이해하고 있는지 확인합니다.
- 규칙 용어를 이해하고 있는지 확인합니다.
- 지난 6~12개월 동안 경고가 없는 오래된 규칙을 검토하고 여전히 관련성이 있는지 확인합니다.
- 일상적으로 무시하는 하위 수준 위협 또는 경고를 제거합니다.
- 연결된 데이터 원본을 확인하고 데이터 연결 방법을 검토합니다. Microsoft Sentinel 규칙을 사용하도록 설정하기 전에 데이터 형식이 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 플레이북을 사용하여 위협 대응 자동화를 참조하세요.
분석 규칙에 대해 자세히 알아보세요.
- 위협을 감지하는 사용자 지정 분석 규칙을 만듭니다. 경고 그룹화 를 사용하여 지정된 기간 내에 발생하는 경고를 그룹화하여 경고 피로를 줄입니다.
- SOC 엔지니어가 조사 중에 추적할 증거의 일부로 엔터티를 정의할 수 있도록 데이터 필드를 Microsoft Sentinel 엔터티에 매핑합니다. 또한 엔터티 매핑을 사용하면 SOC 분석가가 시간과 노력을 줄일 수 있는 직관적인 [조사 그래프](investigation-cases.md#use-the-investigation-graph-to-deep-dive)를 활용할 수 있습니다.
- 인시던트 미리 보기 창에서 특정 인시던트와 관련된 이벤트, 경고 및 책갈피를 표시하기 위해 증거를 사용하는 방법의 예로 UEBA 데이터를 사용하여 인시던트를 조사합니다.
- KQL(Kusto 쿼리 언어) - 데이터를 처리하고 결과를 반환하기 위해 Log Analytics 데이터베이스에 읽기 전용 요청을 보내는 데 사용할 수 있습니다. KQL은 엔드포인트용 Microsoft Defender 및 Application Insights와 같은 다른 Microsoft 서비스에서도 사용됩니다.
규칙 용어 비교
이 표에서는 SPL(검색 처리 언어)을 기반으로 하는 Splunk 검색과 비교하여 Microsoft Sentinel Kusto 쿼리 언어(KQL)를 기반으로 하는 규칙의 개념을 명확히 하는 데 도움이 됩니다.
| 스플렁크 주 | Microsoft Sentinel | |
|---|---|---|
| 규칙 유형 | •예약 • 실시간 |
• 예약된 쿼리 •퓨전 • Microsoft 보안 • ML(Machine Learning) 동작 분석 |
| Criteria | SPL에서 정의 | KQL에서 정의 |
| 트리거 조건 | • 결과 수 • 호스트 수 • 원본 수 •주문 |
임계값: 쿼리 결과 수 |
| 작업 | • 트리거된 경고에 추가 • 로그 이벤트 • 조회할 출력 결과 • 기타 |
• 경고 또는 인시던트 만들기 • Logic Apps와 통합 |
규칙 샘플 매핑 및 비교
이러한 샘플을 사용하여 다양한 시나리오에서 Splunk에서 Microsoft Sentinel 규칙을 비교하고 매핑합니다.
일반 검색 명령
| SPL 명령 | 설명 | KQL 연산자 | KQL 예제 |
|---|---|---|---|
chart/ timechart |
시계열 차트에 대한 테이블 형식 출력의 결과를 반환합니다. | render 연산자 | … | render timechart |
dedup |
지정된 조건과 일치하는 후속 결과를 제거합니다. | • distinct • 요약 |
… | summarize by Computer, EventID |
eval |
식을 계산합니다.
일반적인 eval 명령에 대해 알아봅니다. |
확장 | T | extend duration = endTime - startTime |
fields |
검색 결과에서 필드를 제거합니다. | • 프로젝트 • 프로젝트 어웨이 |
T | project cost=price*quantity, price |
head/tail |
첫 번째 또는 마지막 N 결과를 반환합니다. | 맨 위로 | T | top 5 by Name desc nulls last |
lookup |
외부 원본의 필드 값을 추가합니다. | • externaldata • 조회 |
KQL 예제 |
rename |
필드 이름을 바꿉니다. 와일드카드를 사용하여 여러 필드를 지정합니다. | project-rename | T | project-rename new_column_name = column_name |
rex |
정규식을 사용하여 필드를 추출하는 그룹 이름을 지정합니다. | regex와 일치 | … | where field matches regex "^addr.*" |
search |
검색 식과 일치하는 결과로 결과를 필터링합니다. | 검색 | search "X" |
sort |
지정된 필드를 기준으로 검색 결과를 정렬합니다. | 정렬 | T | sort by strlen(country) asc, price desc |
stats |
필요에 따라 필드별로 그룹화된 통계를 제공합니다. 일반적인 통계 명령에 대해 자세히 알아보세요. | 요약 | KQL 예제 |
mstats |
이벤트 대신 메트릭에 사용되는 통계와 유사합니다. | 요약 | KQL 예제 |
table |
결과 집합에 유지할 필드를 지정하고 데이터를 테이블 형식으로 유지합니다. | 프로젝트 | T | project columnA, columnB |
top/rare |
필드의 가장 일반적인 값 또는 최소 값을 표시합니다. | 맨 위로 | T | top 5 by Name desc nulls last |
transaction |
검색 결과를 트랜잭션으로 그룹화합니다. SPL 예제 |
예: row_window_session | KQL 예제 |
eventstats |
이벤트의 필드에서 요약 통계를 생성하고 해당 통계를 새 필드에 저장합니다. SPL 예제 |
예제: • 조인 • 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 검색 결과를 필터링합니다. 두 개의 서로 다른 필드를 비교하는 데 사용됩니다. |
어디 | 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 command: 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
를 사용하여 row_window_session() 직렬화된 행 집합의 열에 대한 세션 시작 값을 계산합니다.
...| extend SessionStarted = row_window_session(
Timestamp, 1h, 5m, ID != prev(ID))
eventstats command: 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 command: 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 을 사용합니다. 여기서 인수는 X 부울 식 Y 입니다. 로 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) |
로 TRUE계산되는 경우 X 결과는 두 번째 인수Y입니다. 가 FALSE로 계산되면 X 결과는 세 번째 인수 Z로 평가됩니다. |
if(error==200,"OK", "Error") |
iff() |
KQL 예제 |
isbool(X) |
가 부울이면 X 를 반환 TRUE 합니다. |
isbool(field) |
• iff()• gettype |
iff(gettype(X) =="bool","TRUE","FALSE") |
isint(X) |
가 정수이면 X 를 반환 TRUE 합니다. |
isint(field) |
• iff()• gettype |
KQL 예제 |
isnull(X) |
가 null이면 X 를 반환합니다TRUE. |
isnull(field) |
isnull() |
isnull(field) |
isstr(X) |
가 문자열이면 X 를 반환 TRUE 합니다. |
isstr(field) |
• iff()• gettype |
KQL 예제 |
len(X) |
이 함수는 문자열 X의 문자 길이를 반환합니다. |
len(field) |
strlen() |
strlen(field) |
like(X,"y") |
가 의 SQLite 패턴Y과 같은 경우에만 X 를 반환 TRUE 합니다. |
like(field, "addr%") |
• has• contains• startswith• regex와 일치 |
KQL 예제 |
log(X,Y) |
두 번째 인수 X 를 기본으로 사용하여 첫 번째 인수 Y 의 로그를 반환합니다. 의 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) |
문자열 값 의 MD5 해시를 반환합니다 X. |
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 로 다중값 X 인수의 하위 집합을 Z 반환합니다. |
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) |
두 개의 인수 및 XY를 포함하고 인수가 다른 경우 를 반환 X 합니다. 그렇지 않으면 가 를 반환합니다 NULL. |
nullif(fieldA, fieldB) |
iff |
iff(fieldA==fieldB, null, fieldA) |
random() |
사이의 의사 난수를 0 반환합니다 2147483647. |
random() |
rand() |
rand() |
relative_ time(X,Y) |
epoch 시간 X 및 상대 시간 지정자가 Y지정된 경우 에 적용된 의 Y epoch 시간 값을 반환합니다 X. |
relative_time(now(),"-1d@d") |
unix 시간 | KQL 예제 |
replace(X,Y,Z) |
문자열에서 정규식 문자열이 발생할 때마다 문자열 Z 을 대체하여 형식이 지정된 문자열을 Y 반환 X합니다. |
월 및 일 번호가 전환된 날짜를 반환합니다. 예를 들어 입력의 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") |
iff() | iff(field has "X","Yes","No") |
split(X,"Y") |
구분 기호로 분할된 다중값 필드로 를 반환 X 합니다 Y. |
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) |
(선택 사항) 문자에 대한 Z 시작 위치(1부터 시작) Y 에서 부분 문자열 필드를 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또는FALSE로TRUE다시 포맷됩니다. - 가 숫자인 경우
X두 번째 인수Y는 선택 사항이며(16진수로 변환X),commas(쉼표와 소수 자릿수가 있는 형식X) 또는duration(시간 형식에서 읽기 가능한 시간 형식으로 변환X:HH:MM:SS)일 수hex있습니다.
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의 발생 횟수를 반환합니다. 일치시킬 특정 필드 값을 나타내려면 형식을 로 지정 Xeval(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 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(X) |
다음 단계
이 문서에서는 Splunk에서 Microsoft Sentinel 마이그레이션 규칙을 매핑하는 방법을 알아보았습니다.