Splunk 대 Kusto 참고 자료
이 문서는 Splunk에 익숙한 사용자가 Kusto를 사용하여 로그 쿼리를 작성할 수 있는 Kusto 쿼리 언어를 알아보는 데 도움을 주기 위한 것입니다. 두 항목을 직접 비교하여 주요 차이점과 유사성을 강조 표시하므로 기존 지식을 기반으로 작성할 수 있습니다.
구조 및 개념
다음 표에서는 Splunk와 Kusto 로그 간의 개념과 데이터 구조를 비교합니다.
개념 | Splunk | Kusto | 의견 |
---|---|---|---|
배포 단위 | cluster | cluster | Kusto는 임의 클러스터 간 쿼리를 허용합니다. 스플렁크는 그렇지 않습니다. |
데이터 캐시 | 버킷 | 캐싱 및 보존 정책 | 데이터에 대한 기간 및 캐싱 수준을 제어합니다. 이 설정은 쿼리 성능 및 배포 비용에 직접적인 영향을 줍니다. |
데이터의 논리적 파티션 | 인덱스 | 데이터베이스 | 데이터를 논리적으로 분리할 수 있습니다. 두 구현 모두는 이러한 파티션에서 합집합(union)과 조인(join)을 허용합니다. |
구조적 이벤트 메타데이터 | 해당 없음 | 테이블 | Splunk는 이벤트 메타데이터의 개념을 검색 언어에 노출하지 않습니다. Kusto 로그에는 열이 있는 테이블의 개념이 있습니다. 각 이벤트 인스턴스가 한 행에 매핑됩니다. |
레코드(record) | event | row | 용어 변경에만 해당 |
record 특성 | 필드(field) | 열 | Kusto에서 이 설정은 테이블 구조의 일부로 미리 정의됩니다. Splunk에서는 각 이벤트마다 자체의 필드 집합이 있습니다. |
types | 데이터 형식 | 데이터 형식 | Kusto 데이터 형식은 열에 설정되어 있으므로 더 명시적입니다. 둘 다 JSON 지원을 포함하여 데이터 형식과 거의 동등한 데이터 형식 집합을 사용하여 동적으로 작업할 수 있습니다. |
쿼리 및 검색 | search | Query | 개념은 기본적으로 Kusto와 Splunk 간에 동일합니다. |
이벤트 수집 시간 | 시스템 시간 | ingestion_time() |
Splunk에서 각 이벤트는 이벤트가 인덱싱된 시간의 시스템 타임스탬프를 가져옵니다. Kusto에서 ingestion_time() 함수를 통해 참조할 수 있는 시스템 열을 노출하는 ingestion_time 라는 정책을 정의할 수 있습니다. |
Functions
다음 표에서는 Splunk 함수와 동일한 Kusto의 함수를 지정합니다.
Splunk | Kusto | 의견 |
---|---|---|
strcat |
strcat() |
(1) |
split |
split() |
(1) |
if |
iff() |
(1) |
tonumber |
todouble() tolong() toint() |
(1) |
upper lower |
toupper() tolower() |
(1) |
replace |
replace_string() , replace_strings() 또는 replace_regex() |
(1) 함수는 두 제품 모두에서 세 개의 매개 변수를 사용하지만 replace 매개 변수는 다릅니다. |
substr |
substring() |
(1) 또한 Splunk는 1부터 시작하는 인덱스를 사용합니다. Kusto는 0부터 시작하는 인덱스를 메모합니다. |
tolower |
tolower() |
(1) |
toupper |
toupper() |
(1) |
match |
matches regex |
(2) |
regex |
matches regex |
Splunk에서 regex 는 연산자입니다. Kusto에서는 관계형 연산자입니다. |
searchmatch |
== | Splunk에서 searchmatch 는 일치 문자열 검색을 허용합니다. |
random |
rand() rand(n) |
Splunk의 함수는 0에서 231-1 사이의 숫자를 반환합니다. Kusto's는 0.0에서 1.0 사이의 숫자를 반환하거나 매개 변수가 제공된 경우 0에서 n-1 사이의 숫자를 반환합니다. |
now |
now() |
(1) |
relative_time |
totimespan() |
(1) Kusto에서 Splunk의 해당 값 relative_time(datetimeVal, offsetVal) 은 입니다 datetimeVal + totimespan(offsetVal) .예를 들어 은 search | eval n=relative_time(now(), "-1d@d") 가 ... | extend myTime = now() - totimespan("1d") 됩니다. |
(1) Splunk에서 함수는 연산자를 eval
사용하여 호출됩니다. Kusto에서는 또는 project
의 extend
일부로 사용됩니다.
(2) Splunk에서 함수는 연산자를 eval
사용하여 호출됩니다. Kusto에서는 연산자 where
에서 사용할 수 있습니다.
연산자
다음 섹션에서는 Splunk 및 Kusto에서 다른 연산자를 사용하는 방법에 대한 예제를 제공합니다.
참고
다음 예제에서 Splunk 필드는 rule
Kusto의 테이블에 매핑되고 Splunk의 기본 타임스탬프는 Logs Analytics ingestion_time()
열에 매핑됩니다.
검색
Splunk에서는 search
키워드를 생략하고 따옴표가 없는 문자열을 지정할 수 있습니다. Kusto에서는 각 쿼리를 로 find
시작해야 하며, 따옴표가 지정되지 않은 문자열은 열 이름이며 조회 값은 따옴표가 붙은 문자열이어야 합니다.
제품 | 연산자 | 예제 |
---|---|---|
Splunk | search |
search Session.Id="c8894ffd-e684-43c9-9125-42adc25cd3fc" earliest=-24h |
Kusto | find |
find Session.Id=="c8894ffd-e684-43c9-9125-42adc25cd3fc" and ingestion_time()> ago(24h) |
필터
Kusto 로그 쿼리는 가 적용되는 테이블 형식 결과 집합에서 filter
시작합니다. Splunk에서 필터링은 현재 인덱스에 대한 기본 작업입니다. Splunk에서 연산자를 where
사용할 수도 있지만 권장하지는 않습니다.
제품 | 연산자 | 예제 |
---|---|---|
Splunk | search |
Event.Rule="330009.2" Session.Id="c8894ffd-e684-43c9-9125-42adc25cd3fc" _indextime>-24h |
Kusto | where |
Office_Hub_OHubBGTaskError | where Session_Id == "c8894ffd-e684-43c9-9125-42adc25cd3fc" and ingestion_time() > ago(24h) |
검사할 n 개 이벤트 또는 행 가져오기
Kusto 로그 쿼리는 에 대한 별칭으로도 지원 take
합니다 limit
. Splunk에서 결과가 정렬되면 head
첫 번째 n 개 결과를 반환합니다. Kusto limit
에서는 순서가 지정되지 않지만 발견된 첫 번째 n 개 행을 반환합니다.
제품 | 연산자 | 예제 |
---|---|---|
Splunk | head |
Event.Rule=330009.2 | head 100 |
Kusto | limit |
Office_Hub_OHubBGTaskError | limit 100 |
필드 또는 열로 정렬된 첫 번째 n 개 이벤트 또는 행 가져오기
아래쪽 결과의 경우 Splunk에서 를 사용합니다 tail
. Kusto에서 를 사용하여 asc
순서 방향을 지정할 수 있습니다.
제품 | 연산자 | 예제 |
---|---|---|
Splunk | head |
Event.Rule="330009.2" | sort Event.Sequence | head 20 |
Kusto | top |
Office_Hub_OHubBGTaskError | top 20 by Event_Sequence |
새 필드 또는 열로 결과 집합 확장
Splunk에는 함수가 eval
있지만 Kusto의 연산자 eval
와 비교할 수 없습니다. Splunk의 eval
연산자와 Kusto의 extend
연산자는 스칼라 함수 및 산술 연산자만 지원합니다.
제품 | 연산자 | 예제 |
---|---|---|
Splunk | eval |
Event.Rule=330009.2 | eval state= if(Data.Exception = "0", "success", "error") |
Kusto | extend |
Office_Hub_OHubBGTaskError | extend state = iff(Data_Exception == 0,"success" ,"error") |
이름 바꾸기
Kusto는 연산자를 project-rename
사용하여 필드의 이름을 바꿉니다. 연산자 project-rename
에서 쿼리는 필드에 대해 미리 빌드된 인덱스를 활용할 수 있습니다. Splunk에는 rename
동일한 작업을 수행하는 연산자가 있습니다.
제품 | 연산자 | 예제 |
---|---|---|
Splunk | rename |
Event.Rule=330009.2 | rename Date.Exception as execption |
Kusto | project-rename |
Office_Hub_OHubBGTaskError | project-rename exception = Date_Exception |
결과 및 프로젝션 서식 지정
Splunk는 table
명령을 사용하여 결과에 포함할 열을 선택합니다. Kusto에는 project
동일하고 더 많은 작업을 수행하는 연산자가 있습니다.
제품 | 연산자 | 예제 |
---|---|---|
Splunk | table |
Event.Rule=330009.2 | table rule, state |
Kusto | project |
Office_Hub_OHubBGTaskError | project exception, state |
Splunk는 field -
명령을 사용하여 결과에서 제외할 열을 선택합니다. Kusto에는 project-away
동일한 작업을 수행하는 연산자가 있습니다.
제품 | 연산자 | 예제 |
---|---|---|
Splunk | fields - |
Event.Rule=330009.2 | fields - quota, hightest_seller |
Kusto | project-away |
Office_Hub_OHubBGTaskError | project-away exception, state |
집계
사용할 수 있는 집계 함수 요약 목록을 참조하세요.
Splunk 연산자 | Splunk 예제 | Kusto 연산자 | Kusto 예제 |
---|---|---|---|
stats |
search (Rule=120502.*) | stats count by OSEnv, Audience |
summarize |
Office_Hub_OHubBGTaskError | summarize count() by App_Platform, Release_Audience |
evenstats |
... | stats count_i by time, category | eventstats sum(count_i) AS count_total by _time_ |
join |
T2 | join kind=inner (T1) on _time | project _time, category, count_i, count_total |
Join
join
Splunk에는 상당한 제한 사항이 있습니다. 하위 쿼리는 10,000개의 결과(배포 구성 파일에 설정됨)로 제한되며 제한된 수의 조인 버전을 사용할 수 있습니다.
제품 | 연산자 | 예제 |
---|---|---|
Splunk | join |
Event.Rule=120103* | stats by Client.Id, Data.Alias | join Client.Id max=0 [search earliest=-24h Event.Rule="150310.0" Data.Hresult=-2147221040] |
Kusto | join |
cluster("OAriaPPT").database("Office PowerPoint").Office_PowerPoint_PPT_Exceptions | where Data_Hresult== -2147221040 | join kind = inner (Office_System_SystemHealthMetadata | summarize by Client_Id, Data_Alias)on Client_Id |
정렬
Splunk에서 오름차순으로 정렬하려면 연산자를 reverse
사용해야 합니다. 또한 Kusto는 시작 또는 끝에 null을 배치할 위치 정의도 지원합니다.
제품 | 연산자 | 예제 |
---|---|---|
Splunk | sort |
Event.Rule=120103 | sort Data.Hresult | reverse |
Kusto | order by |
Office_Hub_OHubBGTaskError | order by Data_Hresult, desc |
다중값 확장
다중값 확장 연산자는 Splunk와 Kusto 모두에서 유사합니다.
제품 | 연산자 | 예제 |
---|---|---|
Splunk | mvexpand |
mvexpand solutions |
Kusto | mv-expand |
mv-expand solutions |
결과 패싯, 흥미로운 필드
Azure Portal의 Log Analytics에서는 첫 번째 열만 공개됩니다. 모든 열은 API를 통해 사용할 수 있습니다.
제품 | 연산자 | 예제 |
---|---|---|
Splunk | fields |
Event.Rule=330009.2 | fields App.Version, App.Platform |
Kusto | facets |
Office_Excel_BI_PivotTableCreate | facet by App_Branch, App_Version |
중복 제거
Kusto에서 를 사용하여 summarize arg_min()
레코드가 선택된 순서를 되돌릴 수 있습니다.
제품 | 연산자 | 예제 |
---|---|---|
Splunk | dedup |
Event.Rule=330009.2 | dedup device_id sortby -batterylife |
Kusto | summarize arg_max() |
Office_Excel_BI_PivotTableCreate | summarize arg_max(batterylife, *) by device_id |
관련 콘텐츠
- Kusto 쿼리 언어 대한 자습서를 안내합니다.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기