RousselTMLEARNING

Article · OpenObserve: from discovery to expertise

OpenObserve in production: best practices

1. Going to production #

From a single node to a cluster.

Which mode to choose? #

SituationMode
Trial, small team, losing a few minutes is acceptableSingle node on disk
Single node, data to protectSingle node with object storage
Availability required, heavy loadHigh availability on Kubernetes

High availability is deployed with the official Helm chart, which requires object storage and PostgreSQL:

helm repo add openobserve https://charts.openobserve.ai
helm repo update
helm install o2 openobserve/openobserve -n openobserve --create-namespace -f values.yaml

2. Best practices #

What avoids bad surprises.

Data #

  • One stream per log family: the schema of a too heterogeneous stream grows fast, and ZO_COLS_PER_RECORD_LIMIT (1000 fields) rejects events beyond that.
  • Per-stream retention: keep audit long, debug logs briefly.
  • Few partitions, on few values: level or environment, never an identifier.
  • Time-bounded queries: this is the first performance lever.

Security #

  • Change the root password, and do not use it for collection.
  • Put OpenObserve behind a TLS proxy.
  • Keep SSRF protection on, allowing only necessary targets.
  • Mask sensitive data in a real-time pipeline.

Operations #

  • Back up: with local disk, the whole data folder; in HA, object storage and PostgreSQL.
  • Pin an image version rather than latest, and read the release notes.
  • Monitor OpenObserve: it exposes its metrics on /metrics.
  • Disable telemetry if your policy requires it: ZO_TELEMETRY=false.

3. Official sources #

To go further.

Documentation #

📄 OpenObserve in production: best practices →

My progress

  • ⏱ Estimated time : ≈ 3 min

Sign in to track your progress and take notes. Sign in

💬 Ask a question

Recommended Articles

OpenObserve: architecture and concepts

Understanding OpenObserve: Parquet storage, deployment modes, roles (router, ingester, querier, c...

Sending logs, metrics and traces to OpenObserve

OpenObserve receiving endpoints: JSON, bulk, OTLP with the OpenTelemetry Collector, Prometheus re...

Exploring data in OpenObserve: SQL, PromQL and VRL

Search with SQL, query metrics with PromQL, optimize a stream (indexes, partitions, retention) an...

Installing OpenObserve and ingesting your first data

Install OpenObserve with Docker Compose or the binary, configure it with its ZO_* variables, send...

Alerts and pipelines in OpenObserve

Create a template, a destination and an alert, avoid the SSRF webhook block and process data with...

Grafana Alloy: Advanced Deployment and Clustering

Learn how to manage large-scale Grafana Alloy deployments. Configure Clustering mode for high ava...

Grafana Assistant: AI at the service of observability

Discover Grafana Assistant, the artificial intelligence integrated into Grafana Cloud. Learn how ...

Grafana Alloy: The importance of Self-Monitoring

Discover why and how to configure Grafana Alloy so that it monitors itself, collecting its own lo...

Grafana Alloy vs OpenTelemetry Collector: Which One Should You Choose?

A detailed comparison between Grafana Alloy and the OpenTelemetry Collector. Discover the strengt...

Support us

♥ SUPPORT US

Support RousselTM Learning

Courses, articles, labs and certificates stay free with no intrusive ads. A voluntary contribution, of any amount you choose, pays for hosting, lab environments and new content.

Contribute with PayPal Any amount · card or PayPal accountLearn more
QR code PayPal
Or scan this QR code with your phone

Thank you, every contribution counts!