Ir al contenido

Quickwit - Motor de búsqueda nativo en la nube para registros

Quickwit - Motor de búsqueda nativo en la nube para registros

Quickwit es un motor de búsqueda de código abierto basado en Rust diseñado para datos de solo-adición — registros, trazas y eventos de auditoría — que se ejecuta directamente en almacenamiento de objetos (S3, GCS, Azure). A diferencia de Elasticsearch, no necesita disco local ni maquinaria de estado de clúster para índices, que desacopla almacenamiento de cómputo y hace retención a escala de petabytes económica. Expone una API de búsqueda compatible con Elasticsearch y es un backend nativo de Jaeger para trazas.

Instalación

MétodoComando
Script de instalación`curl -L https://install.quickwit.io
Dockerdocker run -p 7280:7280 quickwit/quickwit run
KubernetesGráfico Helm disponible
Inicia un nodo./quickwit run
UI / APIhttp://localhost:7280

Conceptos principales

TérminoSignificado
ÍndiceUn conjunto de datos nombrado con asignación de documentos
DivisiónUn fragmento indexado inmutable almacenado en almacenamiento de objetos
MetatiendaRastrea índices/divisiones (archivo o PostgreSQL)
FuenteDe dónde vienen los documentos (Kafka, archivo, API de ingesta)
Roles de nodoindexador, buscador, metatienda, plano de control

Creación de un í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

Ingesta de datos

MétodoComando
Archivoquickwit index ingest --index app-logs --input-path logs.json
Stdin`cat logs.json
API de ingestaPOST /api/v1/app-logs/ingest
Fuente de KafkaDefine una fuente en la configuración de índice
OTLPPunto final nativo de OpenTelemetry para registros/trazas
curl -XPOST "http://localhost:7280/api/v1/app-logs/ingest" \
  --data-binary @logs.ndjson

Búsqueda

# Búsqueda CLI
quickwit index search --index app-logs --query "level:ERROR AND service:api"

# Búsqueda REST
curl "http://localhost:7280/api/v1/app-logs/search?query=level:ERROR&max_hits=20"
Sintaxis de consultaCoincide
termTérmino de texto completo en campos por defecto
field:valueCoincidencia exacta de campo
a AND b, a OR b, NOT aLógica booleana
field:[10 TO 100]Rango
"exact phrase"Coincidencia de frase
field:prefix*Coincidencia de prefijo

Agregaciones y filtros de tiempo

# Búsqueda acotada en tiempo (usa el campo de timestamp rápido)
curl "http://localhost:7280/api/v1/app-logs/search?query=*&start_timestamp=1753400000&end_timestamp=1753486400"

Quickwit admite agregaciones de estilo Elasticsearch, así que consultas y paneles existentes a menudo se portan con poco cambio.

Gestión de índices

ComandoDescripción
quickwit index listLista índices
quickwit index describe --index XMuestra estadísticas/divisiones
quickwit index clear --index XElimina todos los documentos
quickwit index delete --index XElimina el índice
quickwit split list --index XInspecciona divisiones

Retención

retention:
  period: 90 days
  schedule: daily

Porque las divisiones viven en almacenamiento de objetos, la retención es solo eliminar divisiones antiguas — barato y rápido.

Integraciones

ObjetivoNota
JaegerQuickwit es un backend nativo de almacenamiento de Jaeger
GrafanaComplemento de fuente de datos para paneles
OpenTelemetryIngesta nativa de OTLP para registros y trazas
API de ElasticsearchPuntos finales de búsqueda compatibles facilitan la migración

Quickwit vs alternativas

AspectoQuickwitElasticsearchLoki
AlmacenamientoSolo almacenamiento de objetosDisco localAlmacenamiento de objetos
Índice de texto completoSí (búsqueda verdadera)Basada en etiqueta, limitada
Costo a escalaMuy bajoAltoBajo
TrazasBackend nativo de JaegerComplementos APMVía Tempo
Mejor paraRetención barata y buscable de registro/trazaBúsqueda generalRegistros nativos de Grafana

Compara con Loki y OpenObserve; empareja con Vector para ingesta.

Recursos