Quickwit – Cloud-Native Search Engine for Logs Cheatsheet
Quickwit ist eine Open-Source, Rust-basierte Such-Engine für Append-Only-Daten – Logs, Traces und Audit-Events – die direkt auf Object Storage (S3, GCS, Azure) läuft. Anders als Elasticsearch braucht es keine lokale Disk oder Cluster State für Indizes, was Compute von Storage entkoppelt und Petabyte-Scale-Retention wirtschaftlich macht. Sie exponiert eine Elasticsearch-kompatible Such-API und ist ein nativer Jaeger Backend für Traces.
Installation
| Methode | Befehl |
|---|
| Installationsskript | `curl -L https://install.quickwit.io |
| Docker | docker run -p 7280:7280 quickwit/quickwit run |
| Kubernetes | Helm Chart verfügbar |
| Starten Sie einen Node | ./quickwit run |
| UI / API | http://localhost:7280 |
Kernkonzepte
| Begriff | Bedeutung |
|---|
| Index | Ein benannter Datensatz mit einer Doc-Zuordnung |
| Split | Ein unveränderlicher indexierter Shard, der im Object Storage gespeichert ist |
| Metastore | Verfolgt Indizes/Splits (Datei oder PostgreSQL) |
| Source | Woher Dokumente kommen (Kafka, Datei, Aufnahme-API) |
| Node Roles | Indexer, Searcher, Metastore, Control Plane |
Einen Index erstellen
# 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
Daten aufnehmen
| Methode | Befehl |
|---|
| Datei | quickwit index ingest --index app-logs --input-path logs.json |
| Stdin | `cat logs.json |
| Aufnahme-API | POST /api/v1/app-logs/ingest |
| Kafka-Quelle | Definieren Sie eine Quelle in der Index-Config |
| OTLP | Native OpenTelemetry Endpunkt für Logs/Traces |
curl -XPOST "http://localhost:7280/api/v1/app-logs/ingest" \
--data-binary @logs.ndjson
Suche
# CLI-Suche
quickwit index search --index app-logs --query "level:ERROR AND service:api"
# REST-Suche
curl "http://localhost:7280/api/v1/app-logs/search?query=level:ERROR&max_hits=20"
| Abfrage-Syntax | Passt |
|---|
term | Volltextbegriff in Standard-Feldern |
field:value | Genaue Feld-Übereinstimmung |
a AND b, a OR b, NOT a | Boolesche Logik |
field:[10 TO 100] | Range |
"exact phrase" | Phrase Match |
field:prefix* | Prefix Match |
Aggregationen & Zeit-Filter
# Zeit-begrenzte Suche (verwendet das schnelle Timestamp-Feld)
curl "http://localhost:7280/api/v1/app-logs/search?query=*&start_timestamp=1753400000&end_timestamp=1753486400"
Quickwit unterstützt Elasticsearch-ähnliche Aggregationen, so portieren bestehende Dashboards und Abfragen oft mit wenig Änderung über.
Indizes verwalten
| Befehl | Beschreibung |
|---|
quickwit index list | Auflistung Indizes |
quickwit index describe --index X | Zeigen Stats/Splits |
quickwit index clear --index X | Löschen Sie alle Dokumente |
quickwit index delete --index X | Löschen Sie den Index |
quickwit split list --index X | Inspizieren Sie Splits |
Retention
retention:
period: 90 days
schedule: daily
Da Splits im Object Storage leben, ist Retention einfach das Löschen von alten Splits – billig und schnell.
Integrationen
| Ziel | Notiz |
|---|
| Jaeger | Quickwit ist ein nativer Jaeger Storage Backend |
| Grafana | Data-Source Plugin für Dashboards |
| OpenTelemetry | Native OTLP-Aufnahme für Logs und Traces |
| Elasticsearch API | Kompatible Such-Endpunkte erleichtern die Migration |
Quickwit vs Alternativen
| Aspekt | Quickwit | Elasticsearch | Loki |
|---|
| Speicherung | Nur Object Storage | Lokale Disk | Object Storage |
| Volltext-Index | Ja (echte Suche) | Ja | Label-basiert, begrenzt |
| Kosten bei Scale | Sehr niedrig | Hoch | Niedrig |
| Traces | Nativer Jaeger Backend | APM Add-ons | Via Tempo |
| Am besten für | Billige durchsuchbare Log/Trace-Retention | Allgemeine Suche | Grafana-native Logs |
Vergleichen Sie mit Loki und OpenObserve; paaren Sie mit Vector für Aufnahme.
Ressourcen