4tdg-20250912 [PS] Kusto Query Language (KQL) from Scratch 1
https://app.pluralsight.com/library/courses/kusto-query-language-kql-from-scratch/table-of-contents
- 1 Introduction
- 2 80% of the Operator You’ll Ever Use
- 2.1 The Search Command
- 2.1.1 1. search 연산자
- 2.1.2 2. 특정 컬럼 검색
- 2.1.3 3. 와일드카드 검색
- 2.1.4 4. 복합 조건 검색
- 2.1.5 5. 정규 표현식 검색
- 2.1.6 6. 성능 팁
- 2.2 The Where Command
- 2.2.1 1. where 절의 기본 기능
- 2.2.2 2. 시간 기반 필터링 (TimeGenerated + ago)
- 2.2.3 3. 조건 조합
- 2.2.4 4. 문자열 매칭 연산자
- 2.2.5 5. search처럼 활용하는 방법
- 2.2.6 contains vs has
- 2.2.7 6. 예시 쿼리
- 2.3 The Take Command
- 2.3.1 1. take 연산자 기본 기능
- 2.3.2 2. 사용 예시
- 2.4 The Summarize Command
- 2.4.1 1. summarize 연산자요약
- 2.4.2 2. 예제 및 설명
- 2.4.3 3. 추가 팁
- 2.5 The Extend Command
- 2.5.1 1. 기능
- 2.5.2 2. 사용 예시
- 2.5.3 3. 여러 컬럼 동시에 생성
- 2.5.4 4. 컬럼 이름 변경 목적 사용
- 2.5.5 5. 문자열 결합
- 2.5.6 6. 주의 사항
- 2.6 The Project Command
- 2.6.1 1. project
- 2.6.2 2. project + extend 조합
- 2.6.3 3. project 내 계산도 가능
- 2.6.4 4. project-away
- 2.6.5 5. project-rename
- 2.6.6 6. 요약 핵심
- 2.7 The Distinct Command
- 2.8 The Top Command
- 2.1 The Search Command
Introduction
주요 학습 내용
기초 연산자 학습 (초기 모듈): 전체의 80%를 차지하는 주요 연산자 집중 소개
스칼라 연산자: 계산, 조건 처리, 문자열/날짜 처리
고급 집계:
max
,sum
외에도makeset
,makelist
,mvexpand
등 KQL 고유 기능데이터셋 다루기:
join
,union
,datatable
,materialize
등 SQL과 유사 + 고급 기능시계열 분석: 시간 기반 분석 도구
기초 머신러닝 기능: 장바구니 분석, 군집화 등
데이터 내보내기: CSV 파일 또는 Power BI로 출력
KQL이 사용되는 플랫폼
Azure Log Analytics
Azure Application Insights
Microsoft Defender ATP
Azure Security Center 등
쿼리 문법은 동일, 데이터만 다름
실습 환경
Microsoft 제공 무료 데모 플랫폼 활용
수강 중 직접 Azure Log Analytics에서 실습 가능
80% of the Operator You’ll Ever Use
The Search Command
1. search
연산자
기본 기능
하나 이상의 테이블과 컬럼에서 특정 텍스트 문자열 검색
예시:
Perf | search "Memory"
주요 특징
기본적으로 대소문자 구분 없음
대소문자 구분 검색:
search kind=case_sensitive "Memory"
search kind=case_sensitive "Memory"
검색 범위
전체 데이터베이스 검색 가능 (성능 저하 가능성 있음)
특정 테이블 지정 가능:
search in (Perf, Event, Alert) "Contoso"
시간 범위 설정
UI에서 설정 가능 (예: 최근 24시간, 7일 등)
쿼리 내에서도 설정 가능
2. 특정 컬럼 검색
정확한 값 검색:
Perf | search CounterName == "Available MBytes"
AppPerformanceCounters
| search Counter == "Available Bytes"
부분 문자열 검색:
Perf | search CounterName : "MBytes"
3. 와일드카드 검색
전체 컬럼에서 포함 여부 검색:
search "*Bytes*"
AppPerformanceCounters
| search "*Bytes*"
시작 문자열 검색:
search * startswith "Bytes"
AppPerformanceCounters
| search * startswith "Pri"
끝 문자열 검색:
search * endswith "Bytes"
중간 문자열 무시:
search * "Free*bytes"
AppPerformanceCounters
| search "c9*94"
4. 복합 조건 검색
예시:
"Free*bytes"
포함 +InstanceName
이C:
또는D:
인 경우
AppPerformanceCounters
| search "c9*94" and ("Process" or "ASP")
5. 정규 표현식 검색
특정 패턴 검색 가능
예:InstanceName
이A:
~Z:
형식인 경우
AppPerformanceCounters
| search Category matches regex "[A-Z]SP"
6. 성능 팁
가능한 경우 특정 컬럼을 지정하여 검색 → 성능 향상
다양한 검색 방식 (
==
,:
,startswith
,endswith
,regex
)을 상황에 맞게 활용
The Where Command
1. where
절의 기본 기능
특정 조건에 따라 결과를 필터링하는 데 사용
search
는 여러 열에서 특정 값(텍스트)를 찾고,where
는 특정 열에 대한 조건식을 기반으로 필터링함
2. 시간 기반 필터링 (TimeGenerated + ago)
대부분의 테이블에 있는
TimeGenerated
열을 기준으로 시간 조건 적용ago()
함수: 현재 시간 기준 상대적 시간 범위를 지정
예:where TimeGenerated >= ago(1h)
(최근 1시간 데이터)ms
(밀리초),us
(마이크로초)) 등 원하는 만큼 능
3. 조건 조합
AND / OR 조합 가능
예:where CounterName == "Bytes Received/sec" or CounterName == "% Processor Time" and CounterValue > 0
다단 필터링 (파이프 사용)
중간 계산, 가독성 향상에 유리| where TimeGenerated >= ago(1h) | where CounterName == "Bytes Received/sec"
4. 문자열 매칭 연산자
연산자 | 설명 |
---|---|
| 문자열 포함 |
| 시작 또는 끝 위치에서 매칭 |
| 단어 기준으로 시작/끝 매칭 |
| 정규표현식 사용 |
hasprefix
AppPerformanceCounters
| where * hasprefix "petclinic"
//| where * hassuffix "petclinic"
hassuffix : 정상 동작 ??
AppPerformanceCounters
//| where * hasprefix "petclinic"
| where * hassuffix "petclinic"
5. search
처럼 활용하는 방법
where * contains "Bytes"
형태로 전체 컬럼 검색도 가능
contains vs has
// contains 예시
Perf
| where CounterName contains "tes" // "Bytes", "test", "Interest" 모두 포함됨
// has 예시
Perf
| where CounterName has "Bytes" // "Bytes Received/sec" 가능
// "ByteStream" X (단어가 아님)
정확한 단어 매칭이 필요하면
has
부분 문자열 검색이 필요하면
contains
사용
6. 예시 쿼리
Perf
| where TimeGenerated >= ago(1h)
| where (CounterName == "Bytes Received/sec" or CounterName == "% Processor Time")
| where CounterValue > 0
→ 최근 1시간 내, 특정 성능 카운터에서 실제 값이 있는 데이터만 추출
The Take Command
1. take
연산자 기본 기능
take
은 입력 데이터에서 무작위로 지정된 수의 행을 반환하는 명령어
→ 명령 실행할 때마다 결과가 달라질 수 있음.
주로 쿼리 결과의 작동 여부를 빠르게 확인하거나 대용량 데이터셋의 처리 시간을 줄이기 위해 사용
limit
은take
의 동의어로, 동일한 기능을 수행
2. 사용 예시
Perf
| take 10
Perf
| limit 10
Perf
| where CounterValue > 0
| take 5
The Summarize Command
1. summarize
연산자요약
항목 | 설명 |
---|---|
기능 | 데이터를 하나 이상의 열 기준으로 집계(aggregate) |
구문 |
|
유사 용어 | SQL의 |
주요 집계 함수 |
|
2. 예제 및 설명
예제 | 설명 |
---|---|
`Perf | summarize count() by CounterName` |
`Perf | summarize PerfCount = count() by ObjectName, CounterName` → count() by 만을 사용하면 컬럼 이름이 기본적으로 _count로 표기됨. 이를 PerfCount라는 원하는 컬럼 이름으로 변경. |
`Perf | where CounterName == "% Free Space" |
`Perf | summarize NumberOfEntries = count() by bin(TimeGenerated, 1d)` |
`Perf | summarize count() by bin(CounterValue, 10)` |
3. 추가 팁
bin(열, 시간/숫자)
: 시간 또는 숫자를 그룹으로 묶을 때 사용summarize
시 열 순서에 따라 결과 정렬 및 해석에 영향을 줄 수 있음시간 기반 분석에는
startofday()
,endofday()
,between
함수와 함께 사용 시 더욱 정확한 결과 가능
The Extend Command
1. 기능
쿼리 결과에 새 컬럼(기존 컬럼 값 기반으로 계산된 값 또는 조합된 문자열)을 추가함
extend
연산자는 데이터를 분석하거나 보고서를 만들 때 필요한 추가 정보를 유연하게 생성할 수 있게 해주는 강력한 도구입니다. 기존 데이터만으로는 부족할 때, 새로운 관점의 데이터를 만들어 분석에 활용할 수 있습니다.
2. 사용 예시
Perf
| where CounterName == "Free Megabytes"
| extend FreeGB = CounterValue / 1000
CounterValue
값을 기준으로 GB 단위를 계산하여FreeGB
라는 새로운 컬럼 생성
3. 여러 컬럼 동시에 생성
| extend FreeGB = CounterValue / 1000, FreeKB = CounterValue * 1000
복수의 새 컬럼을 한 줄에서 생성 가능
4. 컬럼 이름 변경 목적 사용
| extend FreeMB = CounterValue
기존 값 그대로 다른 이름으로 출력 가능 (원본 컬럼은 그대로 유지됨)
5. 문자열 결합
| extend ObjectCounter = strcat(ObjectName, " - ", CounterName)
strcat()
함수로 문자열 컬럼들 연결 (예:"Memory - %Available Memory"
)
6. 주의 사항
새로 생성된 컬럼은 기본적으로 출력의 맨 오른쪽에 위치
본래 컬럼은 삭제되지 않고 유지됨
The Project Command
1. project
원하는 컬럼만 선택해서 출력
SELECT column1, column2 ...
와 유사 (SQL 관점)예시:
Perf | project ObjectName, CounterName, InstanceName, CounterValue, TimeGenerated
2. project + extend
조합
먼저 필요한 컬럼만
project
, 이후extend
로 계산 컬럼 추가또는 반대로
extend
후 다시project
로 불필요 컬럼 제거Perf | extend FreeGB = CounterValue / 1000 | project ObjectName, FreeGB
3. project
내 계산도 가능
extend
없이project
내부에서 새로운 컬럼 정의 가능Perf | project FreeGB = CounterValue / 1000, FreeMB = CounterValue, FreeKB = CounterValue * 1000
4. project-away
특정 컬럼만 제외하고 나머지 모두 출력
새로운 컬럼이 나중에 추가되더라도 자동 포함됨
Perf | project-away TenantId, SourceSystem
5. project-rename
컬럼 이름 변경
Perf | project-rename myRenamedComputer = Computer
6. 요약 핵심
연산자 | 역할 |
---|---|
| 원하는 컬럼만 출력 |
| 특정 컬럼 제외하고 모두 출력 |
| 컬럼 이름 변경 |
이 연산자들은 결과를 간결하게 정리하고 불필요한 정보 제거에 매우 유용합니다.
The Distinct Command
1. 기능
지정한 컬럼 조합의 고유한 값만 출력
중복된 데이터는 제거되어 1번만 표시
2. 예시
Perf
| distinct ObjectName, CounterName
ObjectName + CounterName
조합이 동일한 값이 여러 번 존재해도 1행만 출력됨
3. 활용 예
오류 이벤트의 고유한 소스(Source) 목록 추출:
Event
| where EventLevelName == "Error"
| distinct Source
특정 이벤트가 한 번이라도 발생한 Source 목록만 반환
4. 요약 표
목적 | 사용법 예시 |
---|---|
중복 제거된 고유 조합 출력 |
|
고유한 에러 소스 목록 조회 | `Event |
distinct
는 고유한 데이터 파악, 목록 추출 등에 유용하게 쓰입니다.
The Top Command
1. 기능
결과에서 상위 N개의 행만 추출
주로 정렬 기준과 함께 사용
2. 기본 문법
Perf
| top 20 by TimeGenerated desc
TimeGenerated
기준으로 최신 데이터를 기준으로 20개 추출