KQL(Kusto 쿼리 언어)은 데이터를 탐색하고 패턴을 발견하며, 변칙과 이상값을 식별하고, 통계 모델링을 만드는 등의 작업을 수행할 수 있는 강력한 도구입니다.
KQL은 구조화되고 반구조화되고 구조화되지 않은 데이터를 쿼리하는 단순하면서도 강력한 언어입니다. 언어는 표현적이고, 쿼리 의도를 읽고 이해하기 쉽고, 작성 환경에 최적화되어 있습니다. KQL은 텍스트 검색 및 구문 분석, 시계열 연산자 및 함수, 분석 및 집계, 지리 공간적, 벡터 유사성 검색 및 데이터 분석에 가장 적합한 언어를 제공하는 다른 많은 언어 구문을 지원하는 원격 분석, 메트릭 및 로그를 쿼리하는 데 최적입니다. 쿼리는 SQL( 데이터베이스, 테이블 및 열)과 유사한 계층 구조로 구성된 스키마 엔터티를 사용합니다.
데이터베이스 스크립팅 또는 작업에 대한 배경 지식이 있는 경우 이 문서의 많은 내용을 잘 알고 있어야 합니다. 그렇지 않더라도 언어의 직관적인 특성상, 신속하게 고유한 쿼리를 작성하고 조직을 위한 가치를 창출할 수 있으므로 걱정할 필요가 없습니다.
이 문서에서는 쿼리 언어에 대한 설명을 제공하고 쿼리 작성을 시작하기 위한 실용적인 연습을 제공합니다. 쿼리 환경에 액세스하려면 Azure Data Explorer 웹 UI사용합니다. KQL을 사용하는 방법을 알아보려면 자습서:공통 연산자 알아보기를 참조하세요.
이 문서에서는 쿼리 언어에 대한 설명을 제공하고 쿼리 작성을 시작하기 위한 실용적인 연습을 제공합니다. 쿼리 환경에 액세스하려면 KQL 쿼리 세트사용합니다. KQL을 사용하는 방법을 알아보려면 자습서:공통 연산자 알아보기를 참조하세요.
KQL은 Microsoft Sentinel에서 데이터를 사용하고 조작하는 데 사용하는 언어이기도 합니다. 작업 영역에 제공하는 로그를 분석하고 모든 데이터에 숨겨진 중요한 정보를 얻을 수 없다면 로그는 별로 가치가 없습니다. KQL에는 해당 정보를 얻을 수 있는 능력과 유연성뿐만 아니라 빠르게 시작하는 데 도움이 되는 단순성이 있습니다.
이 문서에서는 사용자가 매일 작성하는 쿼리의 75~80%를 처리해야 하는 가장 많이 사용되는 함수 및 연산자를 다루는 KQL의 기본 사항을 소개합니다. 더 깊이가 필요하거나 고급 쿼리를 실행하려면 Microsoft Sentinel용 Advanced KQL 통합 문서를 활용할 수 있습니다.
Microsoft Sentinel용 KQL을 사용하는 이유
Microsoft Sentinel은 Azure Monitor 서비스를 토대로 빌드되었으며, Azure Monitor의 Log Analytics 작업 영역을 사용하여 모든 데이터를 저장합니다. 이 데이터에는 다음이 포함됩니다.
- Microsoft Sentinel 데이터 커넥터를 사용하여 외부 원본에서 미리 정의된 테이블로 수집된 데이터
- 외부 원본에서 사용자 정의 사용자 지정 테이블로 수집된 데이터로, 사용자 지정 생성 데이터 커넥터 및 일부 유형의 기본 제공 커넥터를 사용합니다.
- Microsoft Sentinel이 만들고 수행하는 분석에서 생성된, Microsoft Sentinel 자체에서 만든 데이터(예: 경고, 인시던트, UEBA 관련 정보)
- 검색 및 분석을 지원하기 위해 Microsoft Sentinel에 업로드된 데이터(예: 위협 인텔리전스 피드, 관심 목록)
KQL은 Azure Data Explorer 서비스의 일부로 개발되었으므로 클라우드 환경에서 빅 데이터 저장소를 검색하는 데 최적화되어 있습니다. 데이터를 자세히 살펴보고 숨겨진 보물을 탐색할 수 있도록 설계되었습니다.
KQL은 Azure Monitor에서도 사용되며 Log Analytics 데이터 저장소에서 데이터를 검색, 시각화, 분석 및 구문 분석할 수 있는 추가 Azure Monitor 기능을 지원합니다. Microsoft Sentinel에서는 기존 규칙 및 통합 문서 또는 사용자 고유의 빌드에서 데이터를 시각화 및 분석하고 위협을 헌팅할 때마다 KQL을 기반으로 하는 도구를 사용합니다.
KQL은 Microsoft Sentinel에서 수행하는 거의 모든 작업의 일부이기 때문에 작동 방식을 명확하게 이해하면 SIEM에서 더 많은 것을 얻을 수 있습니다.
Kusto 쿼리란?
Kusto 쿼리는 데이터를 처리하고 결과를 반환하기 위한 읽기 전용 요청입니다. 요청은 읽기, 작성 및 자동화하기 쉬운 데이터 흐름 모델을 사용하여 일반 텍스트로 명시됩니다. Kusto 쿼리는 하나 이상의 쿼리 문으로 이루어집니다.
Kusto 쿼리는 데이터를 작성하지 않습니다. 쿼리는 SQL과 유사하게 데이터베이스, 테이블, 열의 계층 구조로 이루어진 데이터에서 작동합니다.
쿼리 문이란?
세 가지 종류의 사용자
모든 쿼리 문은 ;
(세미콜론)로 구분되며 현재 쿼리에만 영향을 줍니다.
메모
애플리케이션 쿼리 문에 대한 자세한 내용은
가장 일반적인 종류의 쿼리 문은 테이블 형식 식 문, 즉 입력 및 출력이 테이블 또는 테이블 형식 데이터 세트로 구성됩니다. 테이블 형식 문에는0개 이상의 |
(파이프)로 시퀀스됩니다. 한 연산자에서 다음 연산자로 데이터 흐름 또는 파이프됩니다. 데이터는 각 단계에서 필터링 또는 조작된 다음 다음 단계로 전달됩니다.
전체 데이터 테이블로 시작하는 깔때기형과 같습니다. 데이터가 다른 연산자를 통과할 때마다 필터링, 다시 정렬 또는 요약됩니다. 한 연산자에서 다른 연산자로 정보를 파이핑하는 것은 순차적이므로 쿼리 연산자 순서가 중요하며 결과와 성능 모두에 영향을 줄 수 있습니다. 깔때기형의 끝에는 구체화된 출력이 남아 있습니다.
예제 쿼리를 살펴보겠습니다.
쿼리 실행
StormEvents
| where StartTime between (datetime(2007-11-01) .. datetime(2007-12-01))
| where State == "FLORIDA"
| count
세다 |
---|
28 |
메모
KQL은 테이블 이름, 테이블 열 이름, 연산자, 함수 등 모든 항목에 대/소문자를 구분합니다.
키워드는 대괄호와 따옴표(['
및 ']
또는 ["
및 "]
)로 묶어 식별자로 사용할 수 있습니다. 예를 들어 ['where']
. 자세한 내용은 식별자 명명 규칙 참조하세요.
이 쿼리에는 단일 테이블 형식 식 문이 있습니다. 이 문은 StormEvents 테이블에 대한 참조로 시작하고 각각 파이프로 구분된 여러 연산자, where
및 count
포함합니다. 원본 테이블의 데이터 행은 StartTime 열의 값으로 필터링된 다음 State 열의 값으로 필터링됩니다. 마지막 줄에서 쿼리는 단일 열이 있는 테이블과 나머지 행 수를 포함하는 단일 행을 반환합니다.
Kusto 쿼리를 좀 더 사용해 보려면 자습서:Kusto 쿼리 작성을 참조하세요.
관리 명령
Kusto 쿼리와 달리 Level
Text
두 개의 열이 있는 새 Kusto 테이블을 만듭니다.
.create table Logs (Level:string, Text:string)
관리 명령에는 KQL 구문의 일부가 아닌 고유한 구문이 있지만 두 명령은 많은 개념을 공유합니다. 특히 관리 명령은 명령 텍스트의 첫 번째 문자가 점(.
) 문자(쿼리를 시작할 수 없는)가 됨으로써 쿼리와 구별됩니다.
이러한 구분은 쿼리 내에 관리 명령을 포함할 수 없으므로 다양한 종류의 보안 공격을 방지합니다.
모든 관리 명령이 데이터 또는 메타데이터를 수정하는 것은 아닙니다.
.show
시작하는 명령의 큰 클래스는 메타데이터 또는 데이터를 표시하는 데 사용됩니다. 예를 들어 .show tables
명령은 현재 데이터베이스의 모든 테이블 목록을 반환합니다.
관리 명령에 대한 자세한 내용은 Management 명령 개요참조하세요.
다른 서비스의 KQL
KQL은 다른 많은 Microsoft 서비스에서 사용됩니다. 이러한 환경에서 KQL을 사용하는 방법에 대한 자세한 내용은 다음 링크를 참조하세요.
- Azure Monitor
로그 쿼리 - Azure Resource Graph 쿼리 언어 이해
- Microsoft Defender 고급 헌팅을 사용하여 위협을 사전에 헌팅
- cmPivot 쿼리
관련 콘텐츠
- 자습서: 일반 연산자 알아보기
- 자습서: 집계 함수 사용
- KQL 빠른 참조
- SQL에서 KQL로 치트 시트
- 쿼리 모범 사례