Aller au contenu

OpenObserve - Guide de plateforme observabilité à l'échelle du pétaoctet

OpenObserve - Guide de plateforme observabilité à l’échelle du pétaoctet

OpenObserve (O2) est une plateforme observabilité open-source pour les logs, les métriques, et les traces, écrite en Rust. Son choix de conception définisseur est de stocker les données dans le stockage d’objets (S3, GCS, MinIO) en Parquet compressé plutôt que sur des disques locaux coûteux — la base de sa prétention de coût de stockage dramatiquement inférieur aux stacks basées sur Elasticsearch. Elle s’expédie comme un binaire unique avec une UI built-in, parle OpenTelemetry nativement, et interroge avec SQL.

Installation

MéthodeCommande
Binairetélécharger depuis GitHub Releases, puis ./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
KubernetesHelm chart disponible
UIhttp://localhost:5080
Vérifierse connecter avec les identifiants root que vous avez défini

Modes de stockage

ModeUtiliser
Disque localNœud unique, déploiements dev/petit
S3 / GCS / Azure BlobProduction, conservation long-terme pas cher
MinIOStockage d’objets auto-hébergé
# Pointer vers S3 pour le stockage de production
export ZO_LOCAL_MODE=false
export ZO_S3_BUCKET_NAME=my-o2-bucket
export ZO_S3_REGION_NAME=us-east-1

Ingérer les données

SourceComment
OpenTelemetryEnvoyer OTLP à /api/{org}/v1/traces, /v1/logs, /v1/metrics
HTTP JSONPOST /api/{org}/{stream}/_json
Fluent Bit / VectorPlugin Output vers l’endpoint O2 HTTP
Prometheus remote write/api/{org}/prometheus/api/v1/write
SyslogÉcouteur TCP/UDP
# Bulk-ingérer des 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"}]'

Interroger (SQL)

-- Trouver les erreurs récentes pour un service
SELECT * FROM app_logs
WHERE level = 'error' AND service = 'api'
ORDER BY _timestamp DESC
LIMIT 100;

-- Compter les erreurs par service dans le temps
SELECT service, count(*) AS errors
FROM app_logs
WHERE level = 'error'
GROUP BY service
ORDER BY errors DESC;
FeatureNote
Requêtes SQLSyntaxe familière sur les flux de logs
Full-text searchmatch_all('timeout')
Plage de tempsSélectionnée dans l’UI ou via les filtres _timestamp
Saved searchesRequêtes réutilisables

Concepts de base

TermeSignification
OrganisationTenant de haut niveau
StreamUn flux de données nommé (comme un index)
SchémaInféré à partir des données ingérées
FunctionTransformation VRL appliquée à l’ingest ou à la query
AlertRequête programmée + destination

Alertes & tableaux de bord

CapabilityComment
Alerte programméeRequête + seuil + intervalle d’évaluation
Alerte en temps réelDéclencher sur les enregistrements ingérés correspondants
DestinationsWebhook, Slack, email, PagerDuty
Tableaux de bordConstruire des panels à partir de requêtes SQL
ModèlesFormats de message d’alerte réutilisables

Fonctions Ingest-Time (VRL)

# Redact un champ et dériver un nouveau au ingest
.email = "REDACTED"
.status_class = floor(.status / 100)

Les fonctions vous permettent de nettoyer les PII ou d’enrichir les enregistrements avant le stockage — moins cher que de le faire au query time.

OpenObserve vs alternatives

AspectOpenObserveElasticsearch/ELKGrafana Loki
StockageStockage d’objets (Parquet)Indices de disque localStockage d’objets (chunks)
Profil de coûtTrès basÉlevéBas
QuerySQLQuery DSL / KQLLogQL
ScopeLogs + métriques + tracesLogs (+ APM)Logs (stack Grafana pour le reste)
SetupBinaire uniqueMulti-composantMulti-composant

S’associe avec OpenTelemetry pour l’instrumentation ; comparer avec Grafana Loki et Elasticsearch.

Ressources