Ir al contenido

OpenObserve - Plataforma de observabilidad a escala de petabytes

OpenObserve - Plataforma de observabilidad a escala de petabytes

OpenObserve (O2) es una plataforma de observabilidad de código abierto para registros, métricas y trazas, escrita en Rust. Su elección de diseño definitoria es almacenar datos en almacenamiento de objetos (S3, GCS, MinIO) en Parquet comprimido en lugar de discos locales costosos — la base de su afirmación de costos de almacenamiento dramáticamente más bajos que pilas basadas en Elasticsearch. Se envía como un binario único con una UI integrada, habla OpenTelemetry de forma nativa, y consulta con SQL.

Instalación

MétodoComando
Binariodescarga desde GitHub Releases, luego ./openobserve
Dockerdocker run -d -p 5080:5080 -e ZO_ROOT_USER_EMAIL=a@b.c -e ZO_ROOT_USER_PASSWORD=pass public.ecr.aws/zinclabs/openobserve:latest
KubernetesGráfico Helm disponible
UIhttp://localhost:5080
Verificarinicia sesión con las credenciales raíz que establezca

Modos de almacenamiento

ModoUsar
Disco localDespliegue nodo único, dev/pequeño
S3 / GCS / Azure BlobProducción, retención a largo plazo barata
MinIOAlmacenamiento de objetos auto-alojado
# Apunta a S3 para almacenamiento de producción
export ZO_LOCAL_MODE=false
export ZO_S3_BUCKET_NAME=my-o2-bucket
export ZO_S3_REGION_NAME=us-east-1

Ingesta de datos

FuenteCómo
OpenTelemetryEnvía OTLP a /api/{org}/v1/traces, /v1/logs, /v1/metrics
JSON HTTPPOST /api/{org}/{stream}/_json
Fluent Bit / VectorComplemento de salida al punto final HTTP de O2
Escritura remota de Prometheus/api/{org}/prometheus/api/v1/write
SyslogOyente TCP/UDP
# Ingesta masiva de registros JSON
curl -u "$USER:$PASS" -X POST \
  "http://localhost:5080/api/default/app_logs/_json" \
  -H "Content-Type: application/json" \
  -d '[{"level":"error","message":"db timeout","service":"api"}]'

Consulta (SQL)

-- Encuentra errores recientes para un servicio
SELECT * FROM app_logs
WHERE level = 'error' AND service = 'api'
ORDER BY _timestamp DESC
LIMIT 100;

-- Cuenta errores por servicio en el tiempo
SELECT service, count(*) AS errors
FROM app_logs
WHERE level = 'error'
GROUP BY service
ORDER BY errors DESC;
CaracterísticaNota
Consultas SQLSintaxis familiar sobre flujos de registro
Búsqueda de texto completomatch_all('timeout')
Rango de tiempoSeleccionado en UI o vía filtros _timestamp
Búsquedas guardadasConsultas reutilizables

Conceptos principales

TérminoSignificado
OrganizaciónInquilino de nivel superior
FlujoUn flujo de datos nombrado (como un índice)
EsquemaInferido de datos ingeridos
FunciónTransformación VRL aplicada en ingesta o consulta
AlertaConsulta programada + destino

Alertas y paneles

CapacidadCómo
Alerta programadaConsulta + umbral + intervalo de evaluación
Alerta en tiempo realDesencadena en registros que coinciden ingeridos
DestinosWebhook, Slack, email, PagerDuty
PanelesConstruye paneles desde consultas SQL
PlantillasFormatos de mensaje de alerta reutilizables

Funciones de tiempo de ingesta (VRL)

# Redacta un campo y deriva uno nuevo en ingesta
.email = "REDACTED"
.status_class = floor(.status / 100)

Las funciones te permiten raspar PII o enriquecer registros antes del almacenamiento — más barato que hacerlo en tiempo de consulta.

OpenObserve vs alternativas

AspectoOpenObserveElasticsearch/ELKGrafana Loki
AlmacenamientoAlmacenamiento de objetos (Parquet)Índices de disco localAlmacenamiento de objetos (fragmentos)
Perfil de costoMuy bajoAltoBajo
ConsultaSQLQuery DSL / KQLLogQL
AlcanceRegistros + métricas + trazasRegistros (+ APM)Registros (pila Grafana para el resto)
ConfiguraciónBinario únicoMulti-componenteMulti-componente

Se empareja con OpenTelemetry para instrumentación; compara con Grafana Loki y Elasticsearch.

Recursos