OpenObserve (O2) é uma plataforma de observabilidade de código aberto para logs, métricas e traces, escrita em Rust. Sua escolha de design definidora é armazenar dados em object storage (S3, GCS, MinIO) em Parquet comprimido em vez de em discos locais caros — a base de sua reivindicação de custo de armazenamento dramaticamente mais baixo que stacks baseadas em Elasticsearch. Ela é enviada como um único binário com uma UI integrada, fala OpenTelemetry nativamente e consulta com SQL.
Instalação
| Método | Comando |
|---|
| Binário | baixar de GitHub Releases, depois ./openobserve |
| Docker | docker 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 |
| Kubernetes | Gráfico Helm disponível |
| UI | http://localhost:5080 |
| Verificar | fazer login com as credenciais raiz que você definiu |
Modos de Armazenamento
| Modo | Use |
|---|
| Disco local | Nó único, implantações dev/pequenas |
| S3 / GCS / Azure Blob | Produção, retenção de longo prazo barata |
| MinIO | Object storage auto-hospedado |
# Apontar para S3 para armazenamento de produção
export ZO_LOCAL_MODE=false
export ZO_S3_BUCKET_NAME=my-o2-bucket
export ZO_S3_REGION_NAME=us-east-1
Ingestão de Dados
| Fonte | Como |
|---|
| OpenTelemetry | Enviar OTLP para /api/{org}/v1/traces, /v1/logs, /v1/metrics |
| HTTP JSON | POST /api/{org}/{stream}/_json |
| Fluent Bit / Vector | Plugin de saída para endpoint O2 HTTP |
| Prometheus remote write | /api/{org}/prometheus/api/v1/write |
| Syslog | Listener TCP/UDP |
# Ingestão em lote de logs 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"}]'
Consultando (SQL)
-- Encontrar erros recentes para um serviço
SELECT * FROM app_logs
WHERE level = 'error' AND service = 'api'
ORDER BY _timestamp DESC
LIMIT 100;
-- Contar erros por serviço ao longo do tempo
SELECT service, count(*) AS errors
FROM app_logs
WHERE level = 'error'
GROUP BY service
ORDER BY errors DESC;
| Recurso | Nota |
|---|
| Consultas SQL | Sintaxe familiar sobre streams de log |
| Busca de texto completo | match_all('timeout') |
| Intervalo de tempo | Selecionado na UI ou via filtros _timestamp |
| Buscas salvas | Consultas reutilizáveis |
Conceitos Principais
| Termo | Significado |
|---|
| Organização | Tenant de nível superior |
| Stream | Um stream de dados nomeado (como um índice) |
| Schema | Inferido de dados ingeridos |
| Função | Transformação VRL aplicada em ingestão ou consulta |
| Alerta | Consulta programada + destino |
Alertas & Dashboards
| Capacidade | Como |
|---|
| Alerta programado | Consulta + threshold + intervalo de avaliação |
| Alerta em tempo real | Disparar em registros ingeridos correspondentes |
| Destinos | Webhook, Slack, email, PagerDuty |
| Dashboards | Construir painéis de consultas SQL |
| Templates | Formatos de mensagem de alerta reutilizáveis |
Funções em Tempo de Ingestão (VRL)
# Redactar um campo e derivar um novo em ingestão
.email = "REDACTED"
.status_class = floor(.status / 100)
Funções deixam você limpar PII ou enriquecer registros antes do armazenamento — mais barato que fazer em tempo de consulta.
OpenObserve vs Alternativas
| Aspecto | OpenObserve | Elasticsearch/ELK | Grafana Loki |
|---|
| Armazenamento | Object storage (Parquet) | Índices de disco local | Object storage (chunks) |
| Perfil de custo | Muito baixo | Alto | Baixo |
| Consulta | SQL | Query DSL / KQL | LogQL |
| Escopo | Logs + métricas + traces | Logs (+ APM) | Logs (Grafana stack para resto) |
| Setup | Binário único | Multi-componente | Multi-componente |
Combina com OpenTelemetry para instrumentação; compare com Grafana Loki e Elasticsearch.
Recursos