Quickwit - Mecanismo de Busca Nativo em Nuvem para Logs - Guia de Referência
Quickwit é um mecanismo de busca de código aberto, baseado em Rust, projetado para dados apenas para anexar — logs, traces e eventos de auditoria — que executa diretamente em object storage (S3, GCS, Azure). Diferentemente de Elasticsearch, não precisa de disco local ou maquinaria de estado de cluster para índices, o que desacopla computação de armazenamento e torna retenção em escala petabyte econômica. Expõe uma API de busca compatível com Elasticsearch e é um backend nativo Jaeger para traces.
Instalação
| Método | Comando |
|---|
| Script de instalação | `curl -L https://install.quickwit.io |
| Docker | docker run -p 7280:7280 quickwit/quickwit run |
| Kubernetes | Gráfico Helm disponível |
| Iniciar um nó | ./quickwit run |
| UI / API | http://localhost:7280 |
Conceitos Principais
| Termo | Significado |
|---|
| Índice | Um dataset nomeado com um doc mapping |
| Split | Um shard indexado imutável armazenado em object storage |
| Metastore | Rastreia índices/splits (arquivo ou PostgreSQL) |
| Origem | De onde documentos vêm (Kafka, arquivo, API de ingestão) |
| Papéis de nó | indexer, searcher, metastore, control plane |
Criando um Índice
# 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
Ingestão de Dados
| Método | Comando |
|---|
| Arquivo | quickwit index ingest --index app-logs --input-path logs.json |
| Stdin | cat logs.json | quickwit index ingest --index app-logs |
| API de ingestão | POST /api/v1/app-logs/ingest |
| Origem Kafka | Definir uma origem na config de índice |
| OTLP | Endpoint OpenTelemetry nativo para logs/traces |
curl -XPOST "http://localhost:7280/api/v1/app-logs/ingest" \
--data-binary @logs.ndjson
Buscando
# Busca CLI
quickwit index search --index app-logs --query "level:ERROR AND service:api"
# Busca REST
curl "http://localhost:7280/api/v1/app-logs/search?query=level:ERROR&max_hits=20"
| Sintaxe de consulta | Corresponde |
|---|
term | Termo de texto completo em campos padrão |
field:value | Correspondência exata de campo |
a AND b, a OR b, NOT a | Lógica booleana |
field:[10 TO 100] | Intervalo |
"exact phrase" | Correspondência de frase |
field:prefix* | Correspondência de prefixo |
Agregações & Filtros de Tempo
# Busca limitada por tempo (usa o campo timestamp rápido)
curl "http://localhost:7280/api/v1/app-logs/search?query=*&start_timestamp=1753400000&end_timestamp=1753486400"
Quickwit suporta agregações ao estilo Elasticsearch, então consultas e dashboards existentes frequentemente portam com pouca mudança.
Gerenciando Índices
| Comando | Descrição |
|---|
quickwit index list | Listar índices |
quickwit index describe --index X | Mostrar stats/splits |
quickwit index clear --index X | Deletar todos os documentos |
quickwit index delete --index X | Deletar o índice |
quickwit split list --index X | Inspecionar splits |
Retenção
retention:
period: 90 days
schedule: daily
Porque splits vivem em object storage, retenção é apenas deletar splits antigos — barato e rápido.
Integrações
| Alvo | Nota |
|---|
| Jaeger | Quickwit é um backend nativo de armazenamento Jaeger |
| Grafana | Plugin de fonte de dados para dashboards |
| OpenTelemetry | Ingestão nativa OTLP para logs e traces |
| API Elasticsearch | Endpoints de busca compatíveis facilitam migração |
Quickwit vs Alternativas
| Aspecto | Quickwit | Elasticsearch | Loki |
|---|
| Armazenamento | Object storage apenas | Disco local | Object storage |
| Índice de texto completo | Sim (busca verdadeira) | Sim | Filtro baseado em rótulo, limitado |
| Custo em escala | Muito baixo | Alto | Baixo |
| Traces | Backend Jaeger nativo | Add-ons APM | Via Tempo |
| Melhor para | Retenção de log/trace barata e pesquisável | Busca geral | Logs nativos de Grafana |
Compare com Loki e OpenObserve; combine com Vector para ingestão.
Recursos