Retour aux outils
MonitoringIntermédiaireOpen sourceAuto-hébergeable

Quickwit

**Le moteur de recherche cloud-native écrit en Rust** : recherche full-text ultra-rapide sur des pét

MAJ 2026-06-14
Quickwit
Site officiel Code source

Quickwit est un moteur de recherche distribué écrit en Rust (donc très rapide et économe en RAM), conçu pour la recherche full-text sur des volumes massifs de logs, traces et événements. Contrairement à Elasticsearch (basé sur Lucene/JVM, gourmand en mémoire), Quickwit utilise un index Tantivy optim

Description

Quickwit est un moteur de recherche distribué écrit en Rust (donc très rapide et économe en RAM), conçu pour la recherche full-text sur des volumes massifs de logs, traces et événements. Contrairement à Elasticsearch (basé sur Lucene/JVM, gourmand en mémoire), Quickwit utilise un index Tantivy optimisé pour le stockage objet S3.

L'architecture de Quickwit est cloud-native by design : stateless, découplage indexer/searcher, et stockage sur S3. Pas de cluster state, pas de ZooKeeper, pas de JVM à tuner. C'est l'outil idéal pour quiconque veut rechercher dans des téraoctets de logs sans exploser son infra.

Quickwit supporte à la fois la recherche de logs (ingestion via HTTP/gRPC/Kafka) et la recherche de traces OTLP (compatible avec OpenTelemetry). Une UI web est intégrée nativement, et une intégration Grafana est disponible.

Public cible : labos perso qui veulent un Elasticsearch-like léger, équipes qui ingèrent des téraoctets de logs/jour, SRE qui font du log analytics sur du long-terme (rétention mois/années), devs qui cherchent dans des dumps de production.

  • ✅ Écrit en Rust : performances excellentes, faible empreinte RAM
  • ✅ Recherche full-text ultra-rapide (Tantivy)
  • ✅ Stockage S3 natif : scale-to-zero, pas de disque local obligatoire
  • ✅ Architecture stateless : pas de ZooKeeper, pas de JVM
  • ✅ Support traces OTLP : ingestion directe OpenTelemetry
  • ✅ UI web intégrée : exploration des index, requêtes, stats
  • ✅ Compatible Kafka : ingestion streaming
  • ✅ Indexation incrémentale : pas de rebuild complet
  • ✅ Multi-tenancy via namespaces
  • ✅ Compression élevée (columnar + tantivy)
  • ✅ Distributed tracing : corrélation log↔trace
  • ✅ Single binary : déploiement simple

Installation

Option 1 : Docker Compose (single node)

# docker-compose.yml
version: '3.8'
services:
  quickwit:
    image: quickwit/quickwit:1.0.0
    container_name: quickwit
    restart: unless-stopped
    command: run
    environment:
      QW_CONFIG: /quickwit/config/quickwit.yaml
      QW_WORK_DIR: /quickwit/qwdata
    ports:
      - "7280:7280"   # REST API
      - "7281:7281"   # UI web
    volumes:
      - quickwit-data:/quickwit/qwdata
      - ./quickwit.yaml:/quickwit/config/quickwit.yaml:ro
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.quickwit.rule=Host(`quickwit.example.com`)"
      - "traefik.http.routers.quickwit.entrypoints=websecure"
      - "traefik.http.routers.quickwit.tls.certresolver=letsencrypt"
      - "traefik.http.services.quickwit.loadbalancer.server.port=7281"

volumes:
  quickwit-data:

Option 2 : Single binary

curl -L https://github.com/quickwit-oss/quickwit/releases/latest/download/quickwit-linux-x86_64.tar.gz | tar xz
./quickwit run

Option 3 : Kubernetes (Helm)

helm repo add quickwit https://quickwit-io.github.io/quickwit-helm
helm install quickwit quickwit/quickwit --namespace logging --create-namespace

Configuration

  1. Créer un index :

    curl -X POST http://localhost:7280/api/v1/indexes \
      -H "Content-Type: application/yaml" \
      -d 'version: 1
    index_id: my-logs
    doc_mapping:
      field_mappings:
        - name: timestamp
          type: datetime
        - name: message
          type: text
        - name: level
          type: keyword
    search_settings:
      default_search_fields: [message]'
    
  2. Ingest un log :

    curl -X POST http://localhost:7280/api/v1/my-logs/ingest \
      -H "Content-Type: application/json" \
      -d '{"timestamp":"2026-06-07T12:00:00Z","message":"hello world","level":"info"}'
    
  3. Accéder à l'UI : http://IP:7281 (UI web intégrée)

  4. Rechercher : barre de recherche type Lucene/Kibana

  5. Connecter Grafana : Data Source > Quickwit > URL http://quickwit:7280

  6. Configurer la rétention : index_config.retention.policy (ex: 90 jours)

  7. Activer le stockage S3 : s3_uri: s3://bucket/prefix dans la config index

Alternatives

Open Source

  • [[app-loki]] — Indexation par labels (pas full-text)
  • [[app-elasticsearch]] — La référence historique (JVM, lourd)
  • [[app-graylog]] — SIEM complet (SSPL)
  • [[app-parseable]] — Columnar Parquet sur S3
  • Meilisearch — Recherche full-text légère (Ruby/Rust)
  • Tantivy — Bibliothèque sous-jacente de Quickwit

Comparaison Quickwit vs autres

CritèreQuickwitElasticsearchLokiMeilisearch
LangageRustJava (JVM)GoRust
RAM (10 Go index)~500 Mo~4-8 Go~1 Go~1 Go
StockageS3 natifDisqueS3Disque/RAM
Recherche full-textExcellenteExcellenteRegexExcellente
Démarrage cold<1s30-60s5s<1s
Distributed✅ (stateless)✅ (stateful)✅❌
Logs/Traces✅ OTLP✅ ECS✅ Logs only❌
SetupSimpleComplexeMoyenTrès simple
LicenseApache-2.0SSPL/ElasticAGPL-3.0MIT

Verdict : Quickwit est le meilleur choix moderne pour remplacer Elasticsearch sur de la recherche logs/traces. Léger, rapide, S3-natif. Si vous n'avez pas besoin de full-text, [[app-loki]] reste plus simple.

Propriétaires (ce que Quickwit remplace)

  • Elastic Cloud (Elasticsearch managé, cher)
  • Algolia (search-as-a-service, cher)
  • Amazon OpenSearch Service
  • Coveo
  • Meilisearch Cloud

Sécurité

  • ⚠️ Logs = données sensibles : traces OTLP contiennent souvent PII
  • ✅ Chiffrement at-rest : LUKS/ZFS + chiffrement S3 (SSE-S3 ou SSE-KMS)
  • ✅ Chiffrement in-transit : TLS obligatoire (Traefik en reverse proxy)
  • ✅ Authentification : basic auth sur l'API, token JWT possible
  • ✅ RBAC : index_config.access_policy (allow/deny par index)
  • ⚠️ Rétention : GDPR/RGPD — configurer retention.policy (ex: 90 jours max)
  • ✅ PII filtering : ingest pipeline avec regex avant indexation
  • ✅ Audit log : logs d'accès dans ./qwdata/{index}/access.log
  • ✅ Backups chiffrés : [[app-restic]] sur le bucket S3

Ressources