--- 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](https://quickwit.io/) | | **GitHub** | [quickwit-oss/quickwit](https://github.com/quickwit-oss/quickwit) | | **License** | Apache-2.0 | | **Langage** | Rust | | **Étoiles GitHub** | 11.3k ⭐ | | **DerniĂšre MAJ** | 2026-06-04 | | **CatĂ©gorie** | [[cat-logs|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) ```yaml # 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 ```bash 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) ```bash helm repo add quickwit https://quickwit-io.github.io/quickwit-helm helm install quickwit quickwit/quickwit --namespace logging --create-namespace ``` ## ⚙ Configuration Initiale 1. **CrĂ©er un index** : ```bash 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** : ```bash 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Ăš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 - [GitHub quickwit-oss/quickwit](https://github.com/quickwit-oss/quickwit) - [Documentation officielle](https://quickwit.io/docs/) - [Quickstart tutorial](https://quickwit.io/docs/get-started/quickstart) - [Blog technique](https://quickwit.io/blog/) ## 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Ă©