ES|QL(Elasticsearch 쿼리 언어) 시작하기
ES|QL을 사용하여 Discover에서 직접 집계, 시각화 및 경보를 생성하여 인사이트를 얻는 시간을 단축하세요.
ES|QL(Elasticsearch 쿼리 언어)이란 무엇일까요?
ES|QL(Elasticsearch Query Language)은 강력한 컴퓨팅 및 집계 기능을 제공하여 데이터 분석 및 조사 프로세스의 속도를 높이도록 설계된 Elastic®의 새롭고 혁신적인 파이프 쿼리 언어입니다.
더욱 쉽고 효율적으로 진행 중인 사이버 공격을 식별하거나 생산 문제를 정확히 찾아내는 복잡한 과정을 탐색하세요.
ES|QL은 대규모 데이터 세트의 검색, 집계 및 시각화를 단순화할 뿐만 아니라 사용자에게 Discover의 단일 화면에서 조회 및 실시간 처리와 같은 고급 기능을 제공합니다.
ES|QL은 Elastic Stack에 3가지 강력한 기능을 추가합니다.
_query를 지원하는 새롭고 빠른 분산 및 전용 쿼리 엔진. 새로운 ES|QL 쿼리 엔진은 동시 처리를 통해 고급 검색 기능을 제공하여 데이터 소스 및 구조에 관계없이 속도와 효율성을 향상시킵니다. 새 엔진의 성능이 측정되고 공개됩니다. 이 공개 대시보드에서 성능 벤치마킹을 진행해 보세요.
새롭고 강력한 파이프 언어. ES|QL은 데이터 조사를 변환, 강화, 단순화하는 Elastic의 새로운 파이프 언어입니다. 설명서에서 ES|QL 언어 기능에 대해 자세히 알아보세요.
중단되지 않는 워크플로우를 제공하는 한 화면에서 집계 및 시각화를 생성하여 해결 속도를 높이는 새로운 통합 데이터 탐색/조사 경험.
Elastic은 왜 ES|QL에 시간과 노력을 투자했을까요?
사용자에게는 데이터를 제공할 뿐만 아니라 데이터를 이해하는 효율적인 방법을 제공하는 민첩한 도구는 물론 실시간으로 인사이트를 바탕으로 조치를 취하고 데이터 수집 후 처리를 수행할 수 있는 기능이 필요합니다.
사용자의 데이터 탐색 경험을 향상하려는 Elastic의 노력으로 인해 ES|QL에 투자하게 되었습니다. ES|QL은 초보자도 쉽게 접근할 수 있고 전문가도 강력하게 사용할 수 있도록 설계되었습니다. ES|QL의 직관적인 인터페이스를 통해 사용자는 처음부터 배우느라 애를 쓸 필요 없이 신속하게 시작하고 데이터에 대해 자세히 알아볼 수 있습니다. 자동 완성 및 인앱 설명서를 통해 고급 쿼리 작성이 간단한 워크플로우가 됩니다.
게다가 ES|QL은 숫자를 보여줄 뿐 아니라 숫자에 생명을 불어넣습니다. Lens 추천 엔진이 제공하는 상황별 시각화는 쿼리의 성격에 자동으로 적응하여 인사이트를 명확하게 보여줍니다.
또한 대시보드 및 경보 기능에 대한 직접 통합은 응집력 있는 엔드투엔드 경험에 대한 Elastic의 비전을 반영합니다.
본질적으로 ES|QL에 대한 Elastic의 투자는 커뮤니티의 진화하는 요구에 대한 직접적인 대응이었습니다. 즉, 더욱 상호 연결되고 인사이트 있고 효율적인 워크플로우를 향한 진전이었습니다.
보안 및 Observability 사용 사례에 대해 더 자세히 알아보기
ES|QL에 대한 Elastic의 헌신은 사용자(예: 사이트 안정성 엔지니어(SRE), DevOps 및 위협 헌터)가 직면한 문제에 대한 깊은 이해에서 비롯됩니다.
SRE의 경우,Observability가 필수적입니다. 매 순간의 가동 중단 시간이나 결함은 사용자 경험에 연쇄적인 영향을 미치고 결과적으로 수익에 영향을 미칠 수 있습니다. 그 예로 ES|QL의 경보 기능이 있습니다. SRE는 개별 사건에 대한 의미 있는 추세를 강조하는 데 중점을 두어 시스템 비효율성이나 오류를 사전에 찾아내고 해결할 수 있습니다. 이렇게 하면 소음이 줄어들고 시스템 안정성에 대한 진정한 위협에 대응할 수 있어 보다 시기적절하고 효과적으로 대응할 수 있습니다.
DevOps 팀은 여러 업데이트, 패치 및 새로운 기능을 배포하면서 지속적으로 시간과 경쟁하고 있습니다. ES|QL의 새롭고 강력한 데이터 탐색 및 데이터 시각화를 통해 모든 배포의 영향을 신속하게 평가하고 시스템 상태를 모니터링하며 실시간 피드백을 받을 수 있습니다. 이는 배포 품질을 향상시킬 뿐만 아니라 필요한 경우 신속한 과정 수정을 보장합니다.
위협 헌터의 경우, 보안 환경은 끊임없이 진화하고 변화하고 있습니다. ES|QL이 변화하는 환경에서 어떻게 역량을 강화하는지 보여주는 예는 ENRICH 기능입니다. 이 기능을 사용하면 다양한 데이터 세트에서 데이터를 조회하여 보안 위협을 나타낼 수 있는 숨겨진 패턴이나 이상 징후를 밝힐 수 있습니다. 또한 상황별 시각화는 원시 데이터를 보는 것뿐만 아니라 시각적으로 제시된 실행 가능한 인사이트를 얻는 것을 의미합니다. 이를 통해 잠재적인 위협을 식별하는 데 걸리는 시간을 크게 줄여 취약점에 더 빠르게 대응할 수 있습니다.
서버 로드 급증을 파악하려는 SRE, 최신 릴리즈의 영향을 평가하는 DevOps 전문가, 잠재적 위반을 조사하는 위협 헌터 등 ES|QL은 여정을 복잡하게 만드는 것이 아니라 사용자를 보완하고 지원합니다.
블로그 게시물의 다음 섹션에서는 ES|QL을 시작하도록 도와드리며, 데이터 탐색 시 ES|QL이 얼마나 강력한지 보여주는 몇 가지 실질적인 예를 보여드릴 것입니다.
Kibana에서 ES|QL을 시작하는 방법
ES|QL 사용을 시작하려면 Discover로 이동하여 데이터 보기 선택기에서 Try ES|QL을 선택하기만 하면 됩니다. 사용자 친화적이고 간단합니다.
이렇게 하면 Discover의 ES|QL 모드로 전환됩니다.
효율적이고 쉬운 쿼리 작성
Discover의 ES|QL은 자동 완성 및 인앱 설명서를 제공하므로 쿼리 표시줄에서 바로 강력한 쿼리를 쉽게 작성할 수 있습니다.
ES|QL을 사용하여 데이터를 분석하고 시각화하는 방법
ES|QL을 사용하면 포괄적이고 강력한 데이터 탐색을 수행할 수 있습니다. 쿼리 빌더에서 직접 Discover 내에서 임시 데이터 탐색을 수행하고, 집계를 생성하고, 데이터를 변환하고, 데이터 세트를 보강하는 등의 작업을 수행할 수 있습니다. 결과는 표 형식이나 시각화로 표시되며 실행 중인 쿼리에 따라 다릅니다.
아래에서는 Observability를 위한 ES|QL 쿼리의 예와 결과가 표 형식과 시각적 표현으로 표시되는 방법을 확인할 수 있습니다.
메트릭이 포함된 ES|QL 쿼리 사용 사례:
from metrics*
| stats max_cpu = max(kubernetes.pod.cpu.usage.node.pct), max_mem = max(kubernetes.pod.memory.usage.bytes) by kubernetes.pod.name
| sort max_cpu desc
| limit 10
위 쿼리는 다음 소스 명령, 집계 함수 및 처리 명령을 활용할 수 있는 방법을 보여줍니다.
from 소스 명령(설명서)
from metrics*: 이렇게 하면 “metrics*” 패턴과 일치하는 인덱스 패턴에서 쿼리가 시작됩니다. 별표(*)는 와일드카드 역할을 합니다. 즉, 이름이 “metrics”로 시작하는 모든 인덱스 패턴에서 데이터를 선택한다는 의미입니다.
stats…by 집계(설명서)별, max (설명서) 및 by(설명서)
이 세그먼트는 특정 통계를 기반으로 데이터를 집계합니다. 다음과 같이 분류됩니다.
max_cpu=max(kubernetes.pd.cpu.usage.node.pct): 각 개별 “kubernetes.pod.name”에 대해 최대 CPU 사용률을 찾아 해당 값을 “max_cpu”라는 새 열에 저장합니다.
max_mem = max(kubernettes.pod.memory.usage.bytes): 각각의 고유한 “kubernetes.pod.name”에 대해 최대 메모리 사용량을 바이트 단위로 찾아 해당 값을 “avg_mem”이라는 새 열에 저장합니다.
처리 명령(설명서)
sort max_cpu desc: 이렇게 하면 결과 데이터 행이 "max_cpu" 열을 기준으로 내림차순으로 정렬됩니다. 즉, “max_cpu” 값이 가장 높은 행이 맨 위에 표시됩니다.
limit 10: 정렬 후 출력이 상위 10개 행으로 제한됩니다.
요약하면 쿼리는 다음과 같습니다.
- 인덱스 패턴을 사용하여 모든 메트릭 지수의 데이터를 그룹화합니다
- 데이터를 집계하여 각 Kubernetes Pod의 최대 CPU 사용량 비율과 최대 메모리 사용량을 찾습니다
- 집계된 데이터를 최대 CPU 사용량을 기준으로 내림차순으로 정렬합니다
- CPU 사용량이 가장 높은 상위 10개 행만 출력합니다
상황별 시각화: Discover에서 ES|QL 쿼리를 작성하면 Lens 제안 엔진이 제공하는 시각적 표현을 받게 됩니다. 쿼리의 성격에 따라 메트릭, 히스토그램 히트맵 등 얻을 수 있는 시각화 유형이 결정됩니다.
아래는 max_cpu, avg_mem 및 kubernetes.pod.name 열이 포함된 위 쿼리를 막대 차트 형식으로 시각적으로 표현한 것입니다.
Observability 및 시계열 데이터 사용 사례를 사용한 ES|QL 쿼리의 예:
from apache-logs |
where url.original == "/login" |
eval time_buckets = auto_bucket(@timestamp, 50, "2023-09-11T21:54:05.000Z", "2023-09-12T00:40:35.000Z") |
stats login_attempts = count(user.name) by time_buckets, user.name |
sort login_attempts desc
위 쿼리는 다음 소스 명령, 집계 함수, 처리 명령 및 함수를 활용하는 방법을 보여줍니다.
from 소스 명령(설명서)
from apache-logs: 이렇게 하면 “apache-logs”라는 인덱스에서 쿼리가 시작됩니다. 이 인덱스에는 Apache 웹 서버 트래픽과 관련된 로그 항목이 포함되어 있습니다.
where(설명서)
where url.original==”/login”: “url.original” 필드가 “/login”과 동일한 레코드만 필터링합니다. 이는 로그인 시도나 로그인 페이지 액세스와 관련된 로그 항목에만 관심이 있다는 의미입니다.
eval(설명서) 및 auto_bucket(설명서)
eval time_buckets =... : 이렇게 하면 “time_buckets”라는 새 열이 생성됩니다.
“auto_bucket” 함수는 인간 친화적인 버킷을 생성하고 해당 행이 속하는 결과 버킷에 해당하는 각 행의 날짜/시간 값을 반환합니다.
“@timestamp”는 각 로그 항목의 타임스탬프를 포함하는 필드입니다.
“50”은 버킷 수입니다.
“2023-09-11T21:54:05.000Z”: 버케팅 시작 시간
“2023-09-12T00:40:35.000Z”: 버케팅 종료 시간
즉, “2023-09-11T21:54:05.000Z”부터 “2023-09-12T00:40:35.000Z”까지의 로그 항목이 50개의 동일한 간격 간격으로 나뉘고 각 항목은 타임스탬프를 기반으로 특정 간격을 두고 연결됩니다.
목표는 목표 버킷 수를 정확히 제공하는 것이 아니라 최대 목표 버킷 수를 제공하는 편안한 범위를 선택하는 것입니다. 더 많은 버킷을 요청하면 auto_bucket은 더 작은 범위를 선택할 수 있습니다.
stats…by 집계(설명서), count(설명서) 및 by(설명서)
stats login_attempts = count(user.name) by time_buckets, user.name: 데이터를 집계하여 로그인 시도 횟수를 계산합니다. 이는 “user.name”(로그인을 시도하는 고유 사용자를 나타냄)의 발생 횟수를 계산하여 수행됩니다.
수는 “time_buckets”(우리가 생성한 시간 간격) 및 “user.name”으로 그룹화됩니다. 즉, 각 시간 버킷에 대해 각 사용자가 로그인을 시도한 횟수를 확인할 수 있습니다.
sort(설명서)
Sort login_attempts desc: 마지막으로 집계된 결과는 “login_attempts” 열을 기준으로 내림차순으로 정렬됩니다. 이는 결과 상단에 가장 많은 로그인 시도 횟수가 표시된다는 의미입니다.
요약하면 쿼리는 다음과 같습니다.
- “apache-logs” 인덱스에서 데이터를 선택합니다
- 로그인 페이지와 관련된 로그 항목에 대해 필터링합니다
- 이러한 항목을 특정 시간 간격으로 버킷화합니다
- 각 시간 간격 동안 각 사용자의 로그인 시도 횟수를 계산합니다
- 로그인 시도 횟수가 많은 순으로 정렬된 결과를 먼저 출력합니다
아래는 login_attempts, time_buckets 및 user.name 열이 포함된 위 쿼리를 막대 차트 형태로 시각적으로 표현한 것입니다.
Discover & Dashboard의 인라인 시각화 편집
Discover 및 Dashboard 내에서 직접 ES|QL 시각화를 편집합니다. 빠른 편집을 위해 Lens로 이동할 필요가 없습니다. 원활하게 변경할 수 있습니다.
아래에서 전체 워크플로우에 대한 동영상을 보거나 단계별 안내서를 읽어보세요.
ES|QL 쿼리 작성
쿼리의 성격에 따른 상황별 시각화
시각화 인라인 편집
대시보드에 저장
대시보드에서 시각화 편집 가능
1단계. ES|QL 쿼리 작성. 메트릭 시각화를 생성하는 쿼리 예:
from apache-logs
| stats avgbytes = avg(http.response.body.bytes)
| eval roundbytes = round(avgbytes)
| drop avgbytes
2단계. 쿼리의 성격에 따른 상황별 시각화(이 경우 메트릭 시각화) 그런 다음 연필 아이콘을 선택하여 바로 편집 모드로 들어갈 수 있습니다.
3단계. 인라인 편집 모드를 사용하여 시각화 편집
위의 경우, 시각화를 동적 색상 모드로 설정하고 싶기 때문에 “동적”으로 전환합니다.
또한 사용하려는 색상 범위를 정의할 수도 있습니다.
4단계. 대시보드에 저장
5단계. 대시보드에서 시각화 편집 가능
Discover에서 직접 ES|QL 경보 생성
Observability 및 보안 경보를 위해 ES|QL을 활용하고 집계된 값을 임계값으로 설정할 수 있습니다. 개별 사건에 대한 의미 있는 추세를 강조하고 오탐을 줄여 탐지 정확도를 높이고 실행 가능한 경보를 수신합니다.
아래에서는 Discover에서 ES|QL 경보 규칙 유형을 생성하는 방법에 중점을 둡니다.
새로운 경보 규칙 유형은 기존 Elasticsearch 규칙 유형에서 사용할 수 있습니다. 이 규칙 유형은 ES|QL 내에서 사용할 수 있는 모든 새로운 기능을 제공하고 새로운 경보 사용 사례를 제공합니다.
새 유형을 사용하면 사용자는 정의된 ES|QL 쿼리를 기반으로 단일 경보를 생성하고 규칙을 저장하기 전에 쿼리 결과를 미리 볼 수 있습니다. 쿼리가 빈 결과를 반환하면 경보가 생성되지 않습니다.
경보 쿼리 예시:
from metrics-pods |
stats max_cpu = max(kubernetes.pod.cpu.usage.node.pct) by kubernetes.pod.name|
sort max_cpu desc | limit 10
Discover에서 경보를 만드는 방법
1단계. "Alerts(경보)"를 클릭한 다음 "Create search threshold rule(검색 임계값 규칙 만들기)"를 클릭합니다. 쿼리 표시줄에서 ES|QL 쿼리를 정의한 후 또는 ES|QL 쿼리를 정의하기 전에 ES|QL 경보 규칙 유형 생성을 시작할 수 있습니다. 정의한 후에 이 작업을 수행하면 쿼리가 자동으로 “Create Alert(경보 만들기)” 플라이아웃에 붙여넣어진다는 이점이 있습니다.
2단계. ES|QL 경보 규칙 유형 정의를 시작합니다.
3단계. 경보 규칙 유형 쿼리를 테스트합니다. “Test query(쿼리 테스트)”를 클릭하면 붙여넣은 ES|QL 쿼리를 반복하고 테스트할 수 있습니다. 그러면 표로 결과를 미리 볼 수 있습니다.
4단계. 커넥터를 설정하고 “저장”합니다. 이제 ES|QL 경보 규칙 유형이 성공적으로 생성되었습니다!
다른 데이터 세트의 필드로 쿼리 데이터 세트 보강
enrich 명령(설명서)을 사용하여 다른 데이터 세트의 필드로 쿼리 데이터 세트를 개선하고, 선택한 정책(예: 일치하는 필드 및 강화된 열 힌트)에 대해 상황에 맞는 제안을 포함하여 완성할 수 있습니다.
ENRICH,를 사용하는 쿼리 예에서는 enrich 정책 ”servers-to-project”가 name, server_hostname 및 cost로 데이터 세트를 보강하기 위해 쿼리를 통해 활용되고 있습니다.
from projects* | limit 10 |
enrich servers-to-project on project_id with name, server_hostname, cost |
stats num_of_servers = count(server_hostname), total_cost = sum(cost) by project_id |
sort total_cost desc
또한 enrich 정책을 생성하기 위한 개요와 마법사를 추가하여 사용자가 enrich 정책을 쉽게 생성할 수 있도록 했습니다.
enrich 정책 개요를 찾으려면 Stack Management(스택 관리) ⇒ Index Management(인덱스 관리)로 이동하세요. 거기서 Enrich Policies(Enrich 정책)라는 탭을 보실 수 있습니다.
위 쿼리에 사용된 enrich 정책은 “servers-to-project”입니다.
Create enrich policy(enrich 정책 만들기)를 클릭하면 새로운 enrich 정책 생성을 쉽게 시작할 수 있습니다. 정책을 생성하고 실행하자마자 Discover의 ES|QL 쿼리에서 사용할 수 있습니다.
데이터 탐색 향상: ES|QL의 성능과 약속
ES|QL은 데이터 분석 및 탐색을 향상시키는 Elastic의 최신 혁신 기술입니다. 단지 데이터를 보여줄 뿐 아니라, 이해하기 쉽고 실행 가능하며 시각적으로 매력적으로 만드는 것이 중요합니다. 빠르고 분산된 전용 쿼리 엔진으로 구동되며, 새로운 파이프 언어로 설계되고, 통합된 데이터 탐색 경험으로 무장된 ES|QL은 사이트 안정성 엔지니어, DevOps, 위협 헌터 및 기타 유형의 분석가와 같은 사용자의 도전 과제를 충족합니다.
ES|QL은 SRE가 시스템 비효율성을 효과적으로 해결할 수 있도록 지원하고, DevOps가 고품질 배포를 보장하도록 도우며, 위협 헌터에게 잠재적인 보안 위협을 신속하게 식별할 수 있는 도구를 제공합니다. 대시보드에 직접 통합되어 인라인 시각화 편집, 경보 기능, enrich 명령과 같은 기능을 통해 원활하고 효율적인 워크플로우를 제공합니다. ES|QL 인터페이스는 성능과 사용자 친화성을 모두 결합하여 사용자가 데이터를 심층적으로 분석할 수 있도록 하여 분석을 더욱 간단하고 인사이트 있게 만듭니다. ES|QL의 출시는 데이터 탐색 경험을 개선하고 사용자 커뮤니티의 진화하는 요구 사항을 해결하기 위한 Elastic의 여정의 연장선에 있을 뿐입니다.
지금 ES|QL의 모든 기능을 사용해 보실 수 있습니다! 사용해 보려면, Elastic 체험판 계정에 가입하거나 공개 데모 환경에서 테스트해 보세요.
이 게시물에 설명된 기능의 릴리즈 및 시기는 Elastic의 단독 재량에 따릅니다. 현재 이용할 수 없는 기능은 정시에 또는 전혀 제공되지 않을 수 있습니다.