Aller au contenu

Quickwit - Guide du moteur de recherche cloud-native pour logs

Quickwit - Guide du moteur de recherche cloud-native pour logs

Quickwit est un moteur de recherche open-source, Rust, conçu pour les données append-only — logs, traces, et événements d’audit — qui s’exécute directement sur le stockage d’objets (S3, GCS, Azure). Contrairement à Elasticsearch, il n’a besoin ni de disque local ni d’état de cluster pour les indices, qui découple le calcul du stockage et rend la rétention à l’échelle du pétaoctet économique. Il expose une API de recherche compatible Elasticsearch et est un backend Jaeger natif pour les traces.

Installation

MéthodeCommande
Script d’installation`curl -L https://install.quickwit.io
Dockerdocker run -p 7280:7280 quickwit/quickwit run
KubernetesHelm chart disponible
Démarrer un nœud./quickwit run
UI / APIhttp://localhost:7280

Concepts de base

TermeSignification
IndexUn dataset nommé avec un mapping de doc
SplitUn shard indexé immuable stocké dans le stockage d’objets
MetastoreSuit les indices/splits (fichier ou PostgreSQL)
SourceD’où viennent les documents (Kafka, fichier, API ingest)
Rôles de nœudindexer, searcher, metastore, control plane

Créer un 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

Ingérer les données

MéthodeCommande
Fichierquickwit index ingest --index app-logs --input-path logs.json
Stdin`cat logs.json
API ingestPOST /api/v1/app-logs/ingest
Source KafkaDéfinir une source dans la config d’index
OTLPEndpoint OpenTelemetry natif pour logs/traces
curl -XPOST "http://localhost:7280/api/v1/app-logs/ingest" \
  --data-binary @logs.ndjson

Rechercher

# 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"
Syntaxe de requêteAnalyse
termTerme full-text dans les champs par défaut
field:valueCorrespondance de champ exacte
a AND b, a OR b, NOT aLogique booléenne
field:[10 TO 100]Plage
"exact phrase"Correspondance de phrase exacte
field:prefix*Correspondance de préfixe

Agrégations & filtres de temps

# Recherche limitée par temps (utilise le champ timestamp rapide)
curl "http://localhost:7280/api/v1/app-logs/search?query=*&start_timestamp=1753400000&end_timestamp=1753486400"

Quickwit supporte les agrégations style Elasticsearch, donc les dashboards et requêtes existants se portent souvent facilement.

Gérer les indices

CommandeDescription
quickwit index listLister les indices
quickwit index describe --index XMontrer les stats/splits
quickwit index clear --index XSupprimer tous les documents
quickwit index delete --index XSupprimer l’index
quickwit split list --index XInspecter les splits

Rétention

retention:
  period: 90 days
  schedule: daily

Parce que les splits vivent dans le stockage d’objets, la rétention est juste supprimer les anciens splits — bon marché et rapide.

Intégrations

CibleNote
JaegerQuickwit est un backend de stockage Jaeger natif
GrafanaPlugin de source de données pour les dashboards
OpenTelemetryIngestion OTLP native pour logs et traces
API ElasticsearchLes endpoints de recherche compatibles facilitent la migration

Quickwit vs alternatives

AspectQuickwitElasticsearchLoki
StockageStockage d’objets uniquementDisque localStockage d’objets
Index full-textOui (vrai search)OuiBasé sur les labels, limité
Coût à l’échelleTrès basÉlevéBas
TracesBackend Jaeger natifAddons APMVia Tempo
Idéal pourRétention cheap searchable log/traceRecherche généraleLogs Grafana-natifs

Comparer avec Loki et OpenObserve ; associer à Vector pour l’ingestion.

Ressources