2P by GN⁺ 17시간전 | ★ favorite | 댓글과 토론
  • ES 8.18에 ES|QL의 LOOKUP JOIN 명령어가 도입되어 데이터 상관관계 및 보강이 가능해짐
  • 기존 ENRICH 기능보다 설정과 관리가 쉬우며, 데이터 조인, 보안 이벤트 상관 분석, 자산 정보 병합 등에 유용
  • JOIN을 위해 새롭게 설계된 단일 샤드 기반의 ‘lookup index’ 모드 도입 — 최대 20억 문서까지 저장 가능
  • LOOKUP JOIN다대다 조인을 쉽게 처리하며, 동적 필드 지정 및 집계 기능에도 적합
  • Kibana 또는 API를 통해 CSV로 쉽게 lookup 인덱스를 만들 수 있으며, 향후 INNER JOIN, 서브쿼리 기능도 예정됨

ES|QL에 진짜 JOIN이 생겼다: LOOKUP JOIN 기능 소개

Elasticsearch에서도 이제 SQL 스타일 JOIN 가능

  • Elasticsearch 8.18부터 ES|QL에서 LOOKUP JOIN을 지원
  • 이는 LEFT OUTER JOIN 형식이며, “우측” 데이터는 새로운 lookup 인덱스 모드를 통해 관리됨
  • 예시:
    • IP 주소에 따라 환경명(dev, QA, prod) 병합
    • 보안 이벤트에 직원 정보, 자산 정보, 위협 인텔리전스 등 추가
    • 웹 로그에서 응답 코드별 환경 분석 등

기존 ENRICH와의 차이점

  • ENRICH 방식

    • 인덱스 기반의 정책을 사전에 설정해야 함
    • 데이터가 변경될 때마다 정책을 재실행해야 함
    • 다중 매칭 시 멀티값 필드로 반환되어 후처리가 복잡함
    • 집계 및 통계 분석에는 부적합
    • **정적인 데이터(변경이 거의 없는 참조용 정보)**에 적합
  • LOOKUP JOIN 방식

    • 별도 정책 없이 즉시 사용 가능
    • 인덱스를 직접 수정할 수 있어, 변경 사항이 즉시 반영됨
    • 다중 매칭 시 행 단위로 분리되어 분석이 용이함
    • 그룹화 및 집계에 최적화되어 있음 (예: 사용자별 트래픽 합계)
    • 동적이고 자주 업데이트되는 데이터에도 유리함

사용 예시

FROM kibana_sample_data_logs   
| WHERE response.keyword != "200"   
| LOOKUP JOIN envs_lkp ON clientip   
| STATS COUNT(*) by response, environment  
  • IP별 환경 데이터를 JOIN하여 HTTP 오류 발생 위치 분석

  • 팀 소유 정보도 JOIN해서 어떤 팀이 관리하는 서버에 문제가 있는지 파악 가능

    FROM kibana_sample_data_logs   
    | WHERE response.keyword != "200"   
    | LOOKUP JOIN teams_lkp ON host   
    | STATS num = COUNT(*) by host, response.keyword, team   
    | SORT num DESC  
    

Lookup 인덱스 생성 방법

  • Kibana UI로: Stack Management → Index Management → Create index

  • REST API로:

    PUT mylookupindex  
    {  
      "settings": {  
        "index.mode": "lookup"  
      }  
    }  
    
  • 머신러닝 File Upload를 통해 CSV 업로드 후 인덱스 생성 시 lookup 모드 설정 가능

주의사항 및 팁

  • JOIN은 무거운 연산이므로 자주 쓰는 필드는 lookup 대신 ENRICH + ingest-time denormalization 고려
  • lookup index는 단일 샤드로 구성되어 있으며, 최대 20억 문서 제한
  • 일반 쿼리처럼 FROM <lookup_index> 로 직접 조회도 가능함
  • Logstash나 Elastic Agent를 통해도 데이터 입력 가능 (단, data stream은 아님)

향후 계획

  • INNER JOIN, SUBQUERY, 일반 인덱스 조인도 지원 예정
  • Kibana 내에서 직접 lookup 인덱스 생성 및 수정 UI 제공 예정
    • 예: Discover에서 CSV 드래그 앤 드롭 → 자동 인덱스 생성
    • GUI 기반 Lookup 관리 기능 제공 예정 (목업도 공개됨)

정리 및 시작하기

  • LOOKUP JOIN정식 릴리즈 전 기술 프리뷰지만, ES|QL을 새로운 수준으로 끌어올릴 수 있는 기능
  • Elastic Cloud에서 Elasticsearch 8.18 또는 9.0으로 시작 가능