이 문서는 Splunk에 익숙한 사용자가 Kusto 쿼리 언어를 학습하여 Kusto로 로그 쿼리를 작성할 수 있도록 지원하기 위한 것입니다. 두 항목을 직접 비교하여 주요 차이점과 유사성을 강조 표시하므로 기존 지식을 기반으로 빌드할 수 있습니다.
구조 및 개념
다음 표에서는 Splunk와 Kusto 로그 간의 개념과 데이터 구조를 비교합니다.
| 개념 | Splunk | Kusto | 주석 |
|---|---|---|---|
| 배포 단위 | 클러스터 | 클러스터 | Kusto는 임의의 클러스터 간 쿼리를 허용합니다. 스플렁크는 그렇지 않습니다. |
| 데이터 캐시 | buckets | 캐싱 및 보존 정책 | 데이터의 기간 및 캐싱 수준을 제어합니다. 이 설정은 쿼리 성능 및 배포 비용에 직접적인 영향을 줍니다. |
| 데이터의 논리적 파티션 | index | 데이터베이스 | 데이터를 논리적으로 분리할 수 있습니다. 두 구현 모두 이러한 파티션 간에 공용 구조체 및 조인을 허용합니다. |
| 구조적 이벤트 메타데이터 | N/A | table | Splunk는 이벤트 메타데이터의 개념을 검색 언어에 노출하지 않습니다. Kusto 로그에는 열이 있는 테이블의 개념이 있습니다. 각 이벤트 인스턴스는 행에 매핑됩니다. |
| 기록 | 이벤트 | 행 | 용어만 변경합니다. |
| 레코드 속성 | 분야 | 칼럼 | Kusto에서 이 설정은 테이블 구조의 일부로 미리 정의됩니다. Splunk에서 각 이벤트에는 고유한 필드 집합이 있습니다. |
| 유형 | datatype | datatype | 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) |
upperlower |
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는 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에서는 extend 또는 project의 일부로 사용됩니다.
(2) Splunk에서 함수는 연산자를 eval 사용하여 호출됩니다. Kusto에서는 연산자 where 에서 사용할 수 있습니다.
운영자
다음 섹션에서는 Splunk 및 Kusto에서 다른 연산자를 사용하는 방법에 대한 예제를 제공합니다.
비고
다음 예제에서 Splunk 필드는 rule Kusto의 테이블에 매핑되고 Splunk의 기본 타임스탬프는 Logs Analytics ingestion_time() 열에 매핑됩니다.
Search
Splunk에서 키워드를 search 생략하고 따옴 지정되지 않은 문자열을 지정할 수 있습니다. Kusto에서 각 쿼리를 find시작해야 합니다. 따옴표가 지정되지 않은 문자열은 열 이름이며 조회 값은 따옴표 붙은 문자열이어야 합니다.
| 제품 | Operator | 예시 |
|---|---|---|
| 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) |
Filter
Kusto 로그 쿼리는 filter가 적용된 테이블 형식 결과 집합에서 시작합니다. Splunk에서 필터링은 현재 인덱스의 기본 작업입니다. Splunk에서 연산자를 where 사용할 수도 있지만 권장하지는 않습니다.
| 제품 | Operator | 예시 |
|---|---|---|
| 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 개 행을 반환합니다.
| 제품 | Operator | 예시 |
|---|---|---|
| Splunk | head |
Event.Rule=330009.2| head 100 |
| Kusto | limit |
Office_Hub_OHubBGTaskError| limit 100 |
필드 또는 열로 정렬된 첫 번째 n 개 이벤트 또는 행 가져오기
아래쪽 결과의 경우 Splunk에서 .를 사용합니다 tail. Kusto에서는 .를 사용하여 asc순서 방향을 지정할 수 있습니다.
| 제품 | Operator | 예시 |
|---|---|---|
| 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 연산자는 스칼라 함수와 산술 연산자만 지원합니다.
| 제품 | Operator | 예시 |
|---|---|---|
| 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") |
Rename
Kusto는 연산자를 project-rename 사용하여 필드 이름을 바꿉니다. 연산자 project-rename 에서 쿼리는 필드에 미리 빌드된 인덱스를 활용할 수 있습니다. Splunk에는 rename 동일한 작업을 수행하는 연산자가 있습니다.
| 제품 | Operator | 예시 |
|---|---|---|
| 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 동일하고 더 많은 작업을 수행하는 연산자가 있습니다.
| 제품 | Operator | 예시 |
|---|---|---|
| Splunk | table |
Event.Rule=330009.2| table rule, state |
| Kusto | project |
Office_Hub_OHubBGTaskError| project exception, state |
Splunk는 이 fields - 명령을 사용하여 결과에서 제외할 열을 선택합니다. Kusto에는 project-away 동일한 작업을 수행하는 연산자가 있습니다.
| 제품 | Operator | 예시 |
|---|---|---|
| Splunk | fields - |
Event.Rule=330009.2| fields - quota, hightest_seller |
| Kusto | project-away |
Office_Hub_OHubBGTaskError| project-away exception, state |
Aggregation
사용할 수 있는 집계 함수 요약 목록을 참조하세요.
| 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 |
참여
Splunk의 join에는 상당한 제한이 있습니다. 하위 쿼리는 10,000개의 결과(배포 구성 파일에 설정됨)로 제한되며 제한된 수의 조인 버전을 사용할 수 있습니다.
| 제품 | Operator | 예시 |
|---|---|---|
| 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 |
정렬
기본 정렬 순서는 오름차순입니다. 내림차순을 지정하려면 필드 이름 앞에 빼기 기호(-)를 추가합니다. Kusto는 시작 또는 끝에 null을 넣을 위치 정의도 지원합니다.
| 제품 | Operator | 예시 |
|---|---|---|
| Splunk | sort |
Event.Rule=120103| sort -Data.Hresult |
| Kusto | order by |
Office_Hub_OHubBGTaskError| order by Data_Hresult, desc |
다중값 확장
다중값 확장 연산자는 Splunk와 Kusto 모두에서 유사합니다.
| 제품 | Operator | 예시 |
|---|---|---|
| Splunk | mvexpand |
mvexpand solutions |
| Kusto | mv-expand |
mv-expand solutions |
결과 패싯, 주목할 만한 필드
Azure Portal의 Log Analytics에서 첫 번째 열만 노출됩니다. 모든 열은 API를 통해 사용할 수 있습니다.
| 제품 | Operator | 예시 |
|---|---|---|
| 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() 수 있습니다.
| 제품 | Operator | 예시 |
|---|---|---|
| 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와 Splunk는 모두 연산자를 timechart 사용하여 시간이 지남에 따라 데이터를 시각화합니다. Splunk에서는 지정된 시간 간격 동안 데이터를 집계하고 다양한 통계 함수와 함께 사용할 수 있습니다. Kusto에서는 summarize 함수 및 bin 함수를 사용한 다음 시간 차트 렌더링 연산자를 사용하여 해당 값을 달성합니다.
| 제품 | Operator | 예시 |
|---|---|---|
| Splunk | timechart |
index=StormEvents | where StartTime >= "2007-01-01" AND StartTime <= "2007-12-31" AND DamageCrops > 0 | bin span=7d StartTime | stats count as EventCount by StartTime | timechart span=7d count as EventCount |
| Kusto | timechart |
StormEvents | where StartTime between (datetime(2007-01-01) .. datetime(2007-12-31)) and DamageCrops > 0 | summarize EventCount = count() by bin(StartTime, 7d) | render timechart |
관련 콘텐츠
- Kusto 쿼리 언어에 대한 자습서를 안내합니다.