OpenObserve (O2) ist eine Open-Source Observability-Plattform für Logs, Metrics und Traces, geschrieben in Rust. Seine definierende Design-Wahl ist Speicherung von Daten in Object Storage (S3, GCS, MinIO) in komprimiertem Parquet statt auf teuren lokalen Disks – die Grundlage seiner Behauptung dramatisch niedrigerer Speicherkosten als Elasticsearch-basierte Stacks. Es wird als einzige Binärdatei mit einer eingebauten UI ausgeliefert, spricht OpenTelemetry nativ und fragt mit SQL.
Installation
| Methode | Befehl |
|---|
| Binär | Download von GitHub Releases, dann ./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 | Helm Chart verfügbar |
| UI | http://localhost:5080 |
| Überprüfen | Melden Sie sich mit den Root-Anmeldedaten an, die Sie setzen |
Speichermodi
| Modus | Verwenden |
|---|
| Lokale Disk | Single-Node, Dev/Small Deployments |
| S3 / GCS / Azure Blob | Production, günstige Langzeit-Retention |
| MinIO | Self-Hosted Object Storage |
# Point zu S3 für Production-Speicherung
export ZO_LOCAL_MODE=false
export ZO_S3_BUCKET_NAME=my-o2-bucket
export ZO_S3_REGION_NAME=us-east-1
Daten aufnehmen
| Quelle | Wie |
|---|
| OpenTelemetry | Senden Sie OTLP zu /api/{org}/v1/traces, /v1/logs, /v1/metrics |
| HTTP JSON | POST /api/{org}/{stream}/_json |
| Fluent Bit / Vector | Output-Plugin zum O2 HTTP Endpunkt |
| Prometheus Remote Write | /api/{org}/prometheus/api/v1/write |
| Syslog | TCP/UDP Listener |
# Bulk-Aufnahme JSON Logs
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"}]'
Abfragen (SQL)
-- Finden Sie neuere Fehler für einen Service
SELECT * FROM app_logs
WHERE level = 'error' AND service = 'api'
ORDER BY _timestamp DESC
LIMIT 100;
-- Zählen Sie Fehler pro Service über Zeit
SELECT service, count(*) AS errors
FROM app_logs
WHERE level = 'error'
GROUP BY service
ORDER BY errors DESC;
| Feature | Notiz |
|---|
| SQL-Abfragen | Vertraute Syntax über Log-Streams |
| Full-Text Search | match_all('timeout') |
| Time Range | Ausgewählt in der UI oder via _timestamp Filter |
| Gespeicherte Suchen | Wiederverwendbare Abfragen |
Kernkonzepte
| Begriff | Bedeutung |
|---|
| Organization | Top-level Tenant |
| Stream | Ein benannter Daten-Stream (wie ein Index) |
| Schema | Abgeleitet von aufgenommenen Daten |
| Function | VRL-Transformation bei Aufnahme oder Abfrage angewendet |
| Alert | Geplante Abfrage + Destination |
Alerts & Dashboards
| Kapazität | Wie |
|---|
| Geplanter Alert | Abfrage + Schwellwert + Auswertungs-Intervall |
| Echtzeit-Alert | Trigger auf abgestimmte Records |
| Destinations | Webhook, Slack, E-Mail, PagerDuty |
| Dashboards | Erbauen Sie Panels von SQL-Abfragen |
| Templates | Wiederverwendbare Alert-Nachrichten-Formate |
Ingest-Zeit Functions (VRL)
# Redigieren Sie ein Feld und leiten Sie ein neues bei Aufnahme ab
.email = "REDACTED"
.status_class = floor(.status / 100)
Funktionen lassen Sie PII scrubben oder Records bereichern vor Speicherung – billiger als es zur Abfrage-Zeit zu tun.
OpenObserve vs Alternativen
| Aspekt | OpenObserve | Elasticsearch/ELK | Grafana Loki |
|---|
| Speicherung | Object Storage (Parquet) | Lokale Disk Indices | Object Storage (Chunks) |
| Kostenprofile | Sehr niedrig | Hoch | Niedrig |
| Abfrage | SQL | Query DSL / KQL | LogQL |
| Scope | Logs + Metrics + Traces | Logs (+ APM) | Logs (Grafana Stack für Rest) |
| Setup | Einzelne Binärdatei | Multi-Komponente | Multi-Komponente |
Paaren Sie mit OpenTelemetry für Instrumentation; vergleichen Sie mit Grafana Loki und Elasticsearch.
Ressourcen