콘텐츠로 이동

Quickwit - 로그를 위한 클라우드 네이티브 검색 엔진 치트시트

Quickwit - 로그를 위한 클라우드 네이티브 검색 엔진 치트시트

Quickwit는 추가만 가능한 데이터를 위해 설계된 오픈소스의 Rust 기반 검색 엔진입니다. 로그, 트레이스, 감사 이벤트로, 객체 저장소 (S3, GCS, Azure)에서 직접 실행됩니다. Elasticsearch와 달리 인덱스를 위한 로컬 디스크나 클러스터 상태가 필요하지 않습니다. 인덱스가 객체 저장소에 불변으로 저장되므로 계산을 저장소에서 분리하고 페타바이트 규모 보관을 경제적으로 만듭니다. Elasticsearch 호환 검색 API를 노출하고 트레이스를 위한 네이티브 Jaeger 백엔드입니다.

설치

방법명령
설치 스크립트`curl -L https://install.quickwit.io
Dockerdocker run -p 7280:7280 quickwit/quickwit run
KubernetesHelm 차트 사용 가능
노드 시작./quickwit run
UI / APIhttp://localhost:7280

핵심 개념

용어의미
인덱스doc 매핑이 있는 명명된 데이터셋
Split객체 저장소에 저장된 불변 인덱스 샤드
Metastore인덱스/split 추적 (파일 또는 PostgreSQL)
소스문서가 어디서 나오는지 (Kafka, 파일, 수집 API)
노드 역할indexer, searcher, metastore, control plane

인덱스 생성

# index-config.yaml
version: 0.8
index_id: app-logs
doc_mapping:
  field_mappings:
    - name: timestamp
      type: datetime
      fast: true
      input_formats: [rfc3339, unix_timestamp]
    - name: level
      type: text
      tokenizer: raw
    - name: service
      type: text
      tokenizer: raw
    - name: message
      type: text
      tokenizer: default
  timestamp_field: timestamp
indexing_settings:
  commit_timeout_secs: 30
search_settings:
  default_search_fields: [message]
quickwit index create --index-config index-config.yaml

데이터 수집

방법명령
파일quickwit index ingest --index app-logs --input-path logs.json
Stdin`cat logs.json
수집 APIPOST /api/v1/app-logs/ingest
Kafka 소스인덱스 구성에서 소스 정의
OTLP로그/트레이스를 위한 네이티브 OpenTelemetry 엔드포인트
curl -XPOST "http://localhost:7280/api/v1/app-logs/ingest" \
  --data-binary @logs.ndjson

검색

# CLI 검색
quickwit index search --index app-logs --query "level:ERROR AND service:api"

# REST 검색
curl "http://localhost:7280/api/v1/app-logs/search?query=level:ERROR&max_hits=20"
쿼리 구문매칭
term기본 필드에서 전체 텍스트 용어
field:value정확한 필드 매칭
a AND b, a OR b, NOT a부울 로직
field:[10 TO 100]범위
"exact phrase"정확한 구문 매칭
field:prefix*접두사 매칭

집계 및 시간 필터

# 시간 한정 검색 (빠른 타임스탐프 필드 사용)
curl "http://localhost:7280/api/v1/app-logs/search?query=*&start_timestamp=1753400000&end_timestamp=1753486400"

Quickwit는 Elasticsearch 스타일 집계를 지원하므로 기존 대시보드와 쿼리가 거의 변경 없이 이식됩니다.

인덱스 관리

명령설명
quickwit index list인덱스 나열
quickwit index describe --index X통계/split 표시
quickwit index clear --index X모든 문서 삭제
quickwit index delete --index X인덱스 삭제
quickwit split list --index XSplit 검사

보관

retention:
  period: 90 days
  schedule: daily

Split이 객체 저장소에 존재하므로 보관은 단지 오래된 split을 삭제하는 것입니다. 저렴하고 빠릅니다.

통합

대상참고
JaegerQuickwit는 네이티브 Jaeger 저장소 백엔드
Grafana대시보드를 위한 데이터 소스 플러그인
OpenTelemetry로그 및 트레이스를 위한 네이티브 OTLP 수집
Elasticsearch API호환 검색 엔드포인트는 마이그레이션 간소화

Quickwit vs 대안

측면QuickwitElasticsearchLoki
저장소객체 저장소만로컬 디스크객체 저장소
전체 텍스트 인덱스예 (진정한 검색)레이블 기반, 제한됨
규모에서 비용매우 낮음높음낮음
트레이스네이티브 Jaeger 백엔드APM 애드온Tempo를 통해
최적 용도저렴한 검색 가능 로그/트레이스 보관일반 검색Grafana 네이티브 로그

LokiOpenObserve와 비교합니다; 수집을 위해 Vector와 쌍을 이룹니다.

리소스