Quickwit - Foglio di aiuto del motore di ricerca cloud-native per log
Quickwit è un motore di ricerca open-source basato su Rust progettato per dati append-only — log, tracce e audit event — che gira direttamente su object storage (S3, GCS, Azure). A differenza di Elasticsearch, non ha bisogno di disco locale o di macchinari di stato del cluster per gli indici, poiché l”indice vive in S3 come split immutabili. Espone un”API di ricerca compatibile con Elasticsearch ed è un backend Jaeger nativo per le tracce.
Installazione
| Metodo | Comando |
|---|
| Script di installazione | `curl -L https://install.quickwit.io |
| Docker | docker run -p 7280:7280 quickwit/quickwit run |
| Kubernetes | Helm chart disponibile |
| Avvia un nodo | ./quickwit run |
| UI / API | http://localhost:7280 |
Concetti principali
| Termine | Significato |
|---|
| Index | Un dataset denominato con un mapping di documento |
| Split | Un shard indicizzato e immutabile memorizzato in object storage |
| Metastore | Traccia indici/split (file o PostgreSQL) |
| Source | Dove provengono i documenti (Kafka, file, API ingest) |
| Node roles | indexer, searcher, metastore, control plane |
Creazione di un indice
# 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
Ingestione di dati
| Metodo | Comando |
|---|
| File | quickwit index ingest --index app-logs --input-path logs.json |
| Stdin | `cat logs.json |
| Ingest API | POST /api/v1/app-logs/ingest |
| Kafka source | Definisci una fonte nella configurazione dell”indice |
| OTLP | Endpoint nativo OpenTelemetry per log/tracce |
curl -XPOST "http://localhost:7280/api/v1/app-logs/ingest" \
--data-binary @logs.ndjson
Ricerca
# Ricerca CLI
quickwit index search --index app-logs --query "level:ERROR AND service:api"
# Ricerca REST
curl "http://localhost:7280/api/v1/app-logs/search?query=level:ERROR&max_hits=20"
| Sintassi di query | Corrisponde a |
|---|
term | Full-text term nei campi predefiniti |
field:value | Corrispondenza di campo esatto |
a AND b, a OR b, NOT a | Logica booleana |
field:[10 TO 100] | Intervallo |
"exact phrase" | Corrispondenza di frase |
field:prefix* | Corrispondenza prefisso |
Aggregazioni e filtri temporali
# Ricerca limitata nel tempo (utilizza il campo timestamp veloce)
curl "http://localhost:7280/api/v1/app-logs/search?query=*&start_timestamp=1753400000&end_timestamp=1753486400"
Quickwit supporta aggregazioni nello stile di Elasticsearch, quindi le query e i dashboard esistenti spesso portano con poco cambiamento.
Gestione degli indici
| Comando | Descrizione |
|---|
quickwit index list | Elenca gli indici |
quickwit index describe --index X | Mostra statistiche/split |
quickwit index clear --index X | Elimina tutti i documenti |
quickwit index delete --index X | Elimina l”indice |
quickwit split list --index X | Ispeziona i split |
Conservazione
retention:
period: 90 days
schedule: daily
Poiché i split vivono in object storage, la conservazione è solo l”eliminazione dei split vecchi — economica e veloce.
Integrazioni
| Target | Nota |
|---|
| Jaeger | Quickwit è un backend di archiviazione Jaeger nativo |
| Grafana | Plugin di origine dati per i dashboard |
| OpenTelemetry | Ingestione OTLP nativa per log e tracce |
| Elasticsearch API | Endpoint di ricerca compatibili semplificano la migrazione |
Quickwit vs Alternative
| Aspetto | Quickwit | Elasticsearch | Loki |
|---|
| Storage | Solo object storage | Disco locale | Object storage |
| Full-text index | Sì (vera ricerca) | Sì | Filtro basato su label, limitato |
| Costo in scala | Molto basso | Alto | Basso |
| Tracce | Backend Jaeger nativo | Add-on APM | Via Tempo |
| Migliore per | Conservazione log/traccia ricercabile economica | Ricerca generale | Log nativi di Grafana |
Confronta con Loki e OpenObserve; abbinato con Vector per l”ingestione.
Risorse