7.6 KiB
title: Quickwit created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, logs, observability, search-engine, full-text, rust, cloud-native, s3, tracing] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Logs, https://github.com/quickwit-oss/quickwit]
📋 Quickwit
Le moteur de recherche cloud-native écrit en Rust : recherche full-text ultra-rapide sur des pétaoctets de logs et traces, avec stockage objet S3 natif. La meilleure alternative moderne à Elasticsearch.
📋 Informations Générales
| Champ | Valeur |
|---|---|
| Site web | quickwit.io |
| GitHub | quickwit-oss/quickwit |
| License | Apache-2.0 |
| Langage | Rust |
| Étoiles GitHub | 11.3k ⭐ |
| Dernière MAJ | 2026-06-04 |
| Catégorie | [[cat-logs |
📝 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 Initiale
-
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]' -
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"}' -
Accéder à l'UI :
http://IP:7281(UI web intégrée) -
Rechercher : barre de recherche type Lucene/Kibana
-
Connecter Grafana : Data Source > Quickwit > URL
http://quickwit:7280 -
Configurer la rétention :
index_config.retention.policy(ex: 90 jours) -
Activer le stockage S3 :
s3_uri: s3://bucket/prefixdans 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ère | Quickwit | Elasticsearch | Loki | Meilisearch |
|---|---|---|---|---|
| Langage | Rust | Java (JVM) | Go | Rust |
| RAM (10 Go index) | ~500 Mo | ~4-8 Go | ~1 Go | ~1 Go |
| Stockage | S3 natif | Disque | S3 | Disque/RAM |
| Recherche full-text | Excellente | Excellente | Regex | Excellente |
| Démarrage cold | <1s | 30-60s | 5s | <1s |
| Distributed | ✅ (stateless) | ✅ (stateful) | ✅ | ❌ |
| Logs/Traces | ✅ OTLP | ✅ ECS | ✅ Logs only | ❌ |
| Setup | Simple | Complexe | Moyen | Très simple |
| License | Apache-2.0 | SSPL/Elastic | AGPL-3.0 | MIT |
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
Pages Liées
- cat-logs — Catégorie Logs
- app-loki — Alternative label-based
- app-grafana — Visualisation
- app-tempo — Traces distribuées
- app-uptime-kuma — Monitoring uptime
- securisation-home-lab — Bonnes pratiques sécurité