ES|QL(Elasticsearch 쿼리 언어) 시작하기

ES|QL을 사용하여 Discover에서 직접 집계, 시각화 및 경보를 생성하여 인사이트를 얻는 시간을 단축하세요.

ES_QL_blog-720x420-07.png

ES|QL(Elasticsearch 쿼리 언어)이란 무엇일까요?

ES|QL(Elasticsearch Query Language)은 강력한 컴퓨팅 및 집계 기능을 제공하여 데이터 분석 및 조사 프로세스의 속도를 높이도록 설계된 Elastic®의 새롭고 혁신적인 파이프 쿼리 언어입니다. 

더욱 쉽고 효율적으로 진행 중인 사이버 공격을 식별하거나 생산 문제를 정확히 찾아내는 복잡한 과정을 탐색하세요. 

ES|QL은 대규모 데이터 세트의 검색, 집계 및 시각화를 단순화할 뿐만 아니라 사용자에게 Discover의 단일 화면에서 조회 및 실시간 처리와 같은 고급 기능을 제공합니다.

ES|QL은 Elastic Stack에 3가지 강력한 기능을 추가합니다.

  1. _query를 지원하는 새롭고 빠른 분산 및 전용 쿼리 엔진. 새로운 ES|QL 쿼리 엔진은 동시 처리를 통해 고급 검색 기능을 제공하여 데이터 소스 및 구조에 관계없이 속도와 효율성을 향상시킵니다. 새 엔진의 성능이 측정되고 공개됩니다. 이 공개 대시보드에서 성능 벤치마킹을 진행해 보세요.

  2. 새롭고 강력한 파이프 언어. ES|QL은 데이터 조사를 변환, 강화, 단순화하는 Elastic의 새로운 파이프 언어입니다. 설명서에서 ES|QL 언어 기능에 대해 자세히 알아보세요.

  3. 중단되지 않는 워크플로우를 제공하는 한 화면에서 집계 및 시각화를 생성하여 해결 속도를 높이는 새로운 통합 데이터 탐색/조사 경험.

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을 선택하기만 하면 됩니다. 사용자 친화적이고 간단합니다.

1 - 시작하기

이렇게 하면 Discover의 ES|QL 모드로 전환됩니다.

효율적이고 쉬운 쿼리 작성

Discover의 ES|QL은 자동 완성 및 인앱 설명서를 제공하므로 쿼리 표시줄에서 바로 강력한 쿼리를 쉽게 작성할 수 있습니다.

2 - 쿼리를 빠르게 완료하는 데 도움이 되는 쿼리 표시줄의 자동 완성
쿼리를 빠르게 완료하는 데 도움이 되는 쿼리 표시줄의 자동 완성
3 - ES|QL 배우는 데 도움이 되는 찾기 쉬운 인앱 설명서!
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 열이 포함된 위 쿼리를 막대 차트 형식으로 시각적으로 표현한 것입니다.

4 - 여러 막대 그래프

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 열이 포함된 위 쿼리를 막대 차트 형태로 시각적으로 표현한 것입니다.

5 - 컬러 그래프

Discover & Dashboard의 인라인 시각화 편집

Discover 및 Dashboard 내에서 직접 ES|QL 시각화를 편집합니다. 빠른 편집을 위해 Lens로 이동할 필요가 없습니다. 원활하게 변경할 수 있습니다. 

아래에서 전체 워크플로우에 대한 동영상을 보거나 단계별 안내서를 읽어보세요.

  1. ES|QL 쿼리 작성

  2. 쿼리의 성격에 따른 상황별 시각화

  3. 시각화 인라인 편집

  4. 대시보드에 저장

  5. 대시보드에서 시각화 편집 가능

Video thumbnail

1단계. ES|QL 쿼리 작성. 메트릭 시각화를 생성하는 쿼리 예:

from apache-logs
| stats avgbytes = avg(http.response.body.bytes)
| eval roundbytes = round(avgbytes)
| drop avgbytes

2단계. 쿼리의 성격에 따른 상황별 시각화(이 경우 메트릭 시각화) 그런 다음 연필 아이콘을 선택하여 바로 편집 모드로 들어갈 수 있습니다.

6

3단계. 인라인 편집 모드를 사용하여 시각화 편집

7

위의 경우, 시각화를 동적 색상 모드로 설정하고 싶기 때문에 “동적”으로 전환합니다.

8

또한 사용하려는 색상 범위를 정의할 수도 있습니다.

9

4단계. 대시보드에 저장

10
11

5단계. 대시보드에서 시각화 편집 가능

12 - 라운드바이트
13

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(경보 만들기)” 플라이아웃에 붙여넣어진다는 이점이 있습니다. 

14

2단계. ES|QL 경보 규칙 유형 정의를 시작합니다.

15

3단계. 경보 규칙 유형 쿼리를 테스트합니다. “Test query(쿼리 테스트)”를 클릭하면 붙여넣은 ES|QL 쿼리를 반복하고 테스트할 수 있습니다. 그러면 표로 결과를 미리 볼 수 있습니다. 

16 - 규칙 만들기
17 - 쿼리 테스트

4단계. 커넥터를 설정하고 “저장”합니다. 이제 ES|QL 경보 규칙 유형이 성공적으로 생성되었습니다!

18

다른 데이터 세트의 필드로 쿼리 데이터 세트 보강

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
20
위의 ENRICH를 사용한 쿼리의 표 형식 결과 및 시각적 표현

또한 enrich 정책을 생성하기 위한 개요와 마법사를 추가하여 사용자가 enrich 정책을 쉽게 생성할 수 있도록 했습니다. 

enrich 정책 개요를 찾으려면 Stack Management(스택 관리) ⇒ Index Management(인덱스 관리)로 이동하세요. 거기서 Enrich Policies(Enrich 정책)라는 탭을 보실 수 있습니다.

21

위 쿼리에 사용된 enrich 정책은 “servers-to-project”입니다.

22

Create enrich policy(enrich 정책 만들기)를 클릭하면 새로운 enrich 정책 생성을 쉽게 시작할 수 있습니다. 정책을 생성하고 실행하자마자 Discover의 ES|QL 쿼리에서 사용할 수 있습니다.

23 - enrich 정책 만들기

여기에서 enrich 정책에 대해 자세히 알아보시고 여기에서 ES|QL의 ENRICH 명령에 대해 자세히 알아보세요.

데이터 탐색 향상: ES|QL의 성능과 약속

ES|QL은 데이터 분석 및 탐색을 향상시키는 Elastic의 최신 혁신 기술입니다. 단지 데이터를 보여줄 뿐 아니라, 이해하기 쉽고 실행 가능하며 시각적으로 매력적으로 만드는 것이 중요합니다. 빠르고 분산된 전용 쿼리 엔진으로 구동되며, 새로운 파이프 언어로 설계되고, 통합된 데이터 탐색 경험으로 무장된 ES|QL은 사이트 안정성 엔지니어, DevOps, 위협 헌터 및 기타 유형의 분석가와 같은 사용자의 도전 과제를 충족합니다. 

ES|QL은 SRE가 시스템 비효율성을 효과적으로 해결할 수 있도록 지원하고, DevOps가 고품질 배포를 보장하도록 도우며, 위협 헌터에게 잠재적인 보안 위협을 신속하게 식별할 수 있는 도구를 제공합니다. 대시보드에 직접 통합되어 인라인 시각화 편집, 경보 기능, enrich 명령과 같은 기능을 통해 원활하고 효율적인 워크플로우를 제공합니다. ES|QL 인터페이스는 성능과 사용자 친화성을 모두 결합하여 사용자가 데이터를 심층적으로 분석할 수 있도록 하여 분석을 더욱 간단하고 인사이트 있게 만듭니다. ES|QL의 출시는 데이터 탐색 경험을 개선하고 사용자 커뮤니티의 진화하는 요구 사항을 해결하기 위한 Elastic의 여정의 연장선에 있을 뿐입니다. 

지금 ES|QL의 모든 기능을 사용해 보실 수 있습니다! 사용해 보려면, Elastic 체험판 계정에 가입하거나 공개 데모 환경에서 테스트해 보세요.

이 게시물에 설명된 기능의 릴리즈 및 시기는 Elastic의 단독 재량에 따릅니다. 현재 이용할 수 없는 기능은 정시에 또는 전혀 제공되지 않을 수 있습니다.