Skip to content

Quickwit - Cloud-Native Search Engine for Logs Cheatsheet

Quickwit - Cloud-Native Search Engine for Logs Cheatsheet

Quickwit is an open-source, Rust-based search engine designed for append-only data — logs, traces, and audit events — that runs directly on object storage (S3, GCS, Azure). Unlike Elasticsearch, it needs no local disk or cluster state for indices, which decouples compute from storage and makes petabyte-scale retention economical. It exposes an Elasticsearch-compatible search API and is a native Jaeger backend for traces.

Installation

MethodCommand
Install script`curl -L https://install.quickwit.io
Dockerdocker run -p 7280:7280 quickwit/quickwit run
KubernetesHelm chart available
Start a node./quickwit run
UI / APIhttp://localhost:7280

Core Concepts

TermMeaning
IndexA named dataset with a doc mapping
SplitAn immutable indexed shard stored in object storage
MetastoreTracks indices/splits (file or PostgreSQL)
SourceWhere documents come from (Kafka, file, ingest API)
Node rolesindexer, searcher, metastore, control plane

Creating an Index

# 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

Ingesting Data

MethodCommand
Filequickwit index ingest --index app-logs --input-path logs.json
Stdin`cat logs.json
Ingest APIPOST /api/v1/app-logs/ingest
Kafka sourceDefine a source in the index config
OTLPNative OpenTelemetry endpoint for logs/traces
curl -XPOST "http://localhost:7280/api/v1/app-logs/ingest" \
  --data-binary @logs.ndjson

Searching

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

# REST search
curl "http://localhost:7280/api/v1/app-logs/search?query=level:ERROR&max_hits=20"
Query syntaxMatches
termFull-text term in default fields
field:valueExact field match
a AND b, a OR b, NOT aBoolean logic
field:[10 TO 100]Range
"exact phrase"Phrase match
field:prefix*Prefix match

Aggregations & Time Filters

# Time-bounded search (uses the fast timestamp field)
curl "http://localhost:7280/api/v1/app-logs/search?query=*&start_timestamp=1753400000&end_timestamp=1753486400"

Quickwit supports Elasticsearch-style aggregations, so existing dashboards and queries often port over with little change.

Managing Indices

CommandDescription
quickwit index listList indices
quickwit index describe --index XShow stats/splits
quickwit index clear --index XDelete all documents
quickwit index delete --index XDelete the index
quickwit split list --index XInspect splits

Retention

retention:
  period: 90 days
  schedule: daily

Because splits live in object storage, retention is just deleting old splits — cheap and fast.

Integrations

TargetNote
JaegerQuickwit is a native Jaeger storage backend
GrafanaData source plugin for dashboards
OpenTelemetryNative OTLP ingestion for logs and traces
Elasticsearch APICompatible search endpoints ease migration

Quickwit vs Alternatives

AspectQuickwitElasticsearchLoki
StorageObject storage onlyLocal diskObject storage
Full-text indexYes (true search)YesLabel-based, limited
Cost at scaleVery lowHighLow
TracesNative Jaeger backendAPM add-onsVia Tempo
Best forCheap searchable log/trace retentionGeneral searchGrafana-native logs

Compare with Loki and OpenObserve; pair with Vector for ingestion.

Resources