---
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é
