Salta ai contenuti

Quickwit - Foglio di aiuto del motore di ricerca cloud-native per log

Quickwit - Foglio di aiuto del motore di ricerca cloud-native per log

Quickwit è un motore di ricerca open-source basato su Rust progettato per dati append-only — log, tracce e audit event — che gira direttamente su object storage (S3, GCS, Azure). A differenza di Elasticsearch, non ha bisogno di disco locale o di macchinari di stato del cluster per gli indici, poiché l”indice vive in S3 come split immutabili. Espone un”API di ricerca compatibile con Elasticsearch ed è un backend Jaeger nativo per le tracce.

Installazione

MetodoComando
Script di installazione`curl -L https://install.quickwit.io
Dockerdocker run -p 7280:7280 quickwit/quickwit run
KubernetesHelm chart disponibile
Avvia un nodo./quickwit run
UI / APIhttp://localhost:7280

Concetti principali

TermineSignificato
IndexUn dataset denominato con un mapping di documento
SplitUn shard indicizzato e immutabile memorizzato in object storage
MetastoreTraccia indici/split (file o PostgreSQL)
SourceDove provengono i documenti (Kafka, file, API ingest)
Node rolesindexer, searcher, metastore, control plane

Creazione di un indice

# 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

Ingestione di dati

MetodoComando
Filequickwit index ingest --index app-logs --input-path logs.json
Stdin`cat logs.json
Ingest APIPOST /api/v1/app-logs/ingest
Kafka sourceDefinisci una fonte nella configurazione dell”indice
OTLPEndpoint nativo OpenTelemetry per log/tracce
curl -XPOST "http://localhost:7280/api/v1/app-logs/ingest" \
  --data-binary @logs.ndjson

Ricerca

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

# Ricerca REST
curl "http://localhost:7280/api/v1/app-logs/search?query=level:ERROR&max_hits=20"
Sintassi di queryCorrisponde a
termFull-text term nei campi predefiniti
field:valueCorrispondenza di campo esatto
a AND b, a OR b, NOT aLogica booleana
field:[10 TO 100]Intervallo
"exact phrase"Corrispondenza di frase
field:prefix*Corrispondenza prefisso

Aggregazioni e filtri temporali

# Ricerca limitata nel tempo (utilizza il campo timestamp veloce)
curl "http://localhost:7280/api/v1/app-logs/search?query=*&start_timestamp=1753400000&end_timestamp=1753486400"

Quickwit supporta aggregazioni nello stile di Elasticsearch, quindi le query e i dashboard esistenti spesso portano con poco cambiamento.

Gestione degli indici

ComandoDescrizione
quickwit index listElenca gli indici
quickwit index describe --index XMostra statistiche/split
quickwit index clear --index XElimina tutti i documenti
quickwit index delete --index XElimina l”indice
quickwit split list --index XIspeziona i split

Conservazione

retention:
  period: 90 days
  schedule: daily

Poiché i split vivono in object storage, la conservazione è solo l”eliminazione dei split vecchi — economica e veloce.

Integrazioni

TargetNota
JaegerQuickwit è un backend di archiviazione Jaeger nativo
GrafanaPlugin di origine dati per i dashboard
OpenTelemetryIngestione OTLP nativa per log e tracce
Elasticsearch APIEndpoint di ricerca compatibili semplificano la migrazione

Quickwit vs Alternative

AspettoQuickwitElasticsearchLoki
StorageSolo object storageDisco localeObject storage
Full-text indexSì (vera ricerca)Filtro basato su label, limitato
Costo in scalaMolto bassoAltoBasso
TracceBackend Jaeger nativoAdd-on APMVia Tempo
Migliore perConservazione log/traccia ricercabile economicaRicerca generaleLog nativi di Grafana

Confronta con Loki e OpenObserve; abbinato con Vector per l”ingestione.

Risorse