OpenObserve — Operations¶
Deployment, configuration, scaling, and day-2 operations for OpenObserve.
Deployment¶
Single-Node (Docker)¶
docker run -d --name openobserve \
-p 5080:5080 \
-e ZO_ROOT_USER_EMAIL=[email protected] \
-e ZO_ROOT_USER_PASSWORD=ComplexPass#123 \
-e ZO_LOCAL_MODE=true \
-v $PWD/data:/data \
openobserve/openobserve:latest
# UI: http://localhost:5080
Kubernetes (Helm) — HA Mode¶
helm repo add openobserve https://charts.openobserve.ai
helm repo update
helm install openobserve openobserve/openobserve \
-n openobserve --create-namespace \
-f values.yaml
Kubernetes Operator¶
The OpenObserve Operator provides a declarative, GitOps-ready approach:
apiVersion: openobserve.ai/v1
kind: OpenObserve
metadata:
name: my-o2
spec:
ingester:
replicas: 3
querier:
replicas: 2
compactor:
replicas: 1
storage:
type: s3
bucket: my-o2-data
Configuration¶
Key Environment Variables¶
| Variable | Default | Description |
|---|---|---|
ZO_ROOT_USER_EMAIL |
— | Initial admin email |
ZO_ROOT_USER_PASSWORD |
— | Initial admin password |
ZO_LOCAL_MODE |
false |
Single-node local storage mode |
ZO_NODE_ROLE |
all |
Node role (router/ingester/querier/compactor/alertmanager) |
ZO_NODE_ROLE_GROUP |
default |
Workload separation group |
ZO_S3_BUCKET_NAME |
— | Object storage bucket |
ZO_S3_REGION_NAME |
— | S3 region |
ZO_META_STORE |
sqlite |
Metadata store (sqlite/postgresql) |
ZO_INGEST_FLATTEN_LEVEL |
3 |
JSON nesting depth to flatten |
ZO_WAL_MAX_FILE_SIZE |
256MB |
WAL file size before flush |
ZO_COMPACT_ENABLED |
true |
Enable background compaction |
Production Configuration (HA)¶
# values.yaml for Helm HA deployment
ingester:
replicas: 3
resources:
requests:
cpu: "2"
memory: "4Gi"
env:
ZO_NODE_ROLE: ingester
ZO_WAL_MAX_FILE_SIZE: "512MB"
querier:
replicas: 2
resources:
requests:
cpu: "4"
memory: "8Gi"
env:
ZO_NODE_ROLE: querier
ZO_DISK_CACHE_ENABLED: "true"
ZO_DISK_CACHE_MAX_SIZE: "50GB"
compactor:
replicas: 1
env:
ZO_NODE_ROLE: compactor
storage:
type: s3
s3:
bucket: openobserve-data
region: us-east-1
meta:
store: postgresql
postgresql:
host: pg.example.com
database: openobserve
Scaling¶
Horizontal Scaling¶
| Component | Scale Strategy |
|---|---|
| Ingester | Add replicas for write throughput |
| Querier | Add replicas for concurrent queries |
| Compactor | Usually 1-2 (background process) |
| Router | Add replicas behind LB |
Performance Tuning¶
| Tuning Target | Environment Variable | Guidance |
|---|---|---|
| Write throughput | ZO_WAL_MAX_FILE_SIZE |
Increase for larger batches |
| Query speed | ZO_DISK_CACHE_ENABLED |
Enable on querier nodes |
| Nested JSON | ZO_INGEST_FLATTEN_LEVEL |
Reduce for deep nesting |
| Bloom filters | Per-field config | Enable for high-cardinality fields |
Monitoring¶
# Health check
curl http://localhost:5080/healthz
# API status
curl http://localhost:5080/api/default/status
# Kubernetes pods
kubectl get pods -n openobserve
O2 CLI (Enterprise)¶
The o2 CLI is available for Enterprise edition:
# Configure profile
o2 configure --profile prod
# List organizations
o2 org list --profile prod
# Export dashboards
o2 dashboard export --org default --profile prod
# Import alerts
o2 alert import --org default --file alerts.json --profile prod
Upgrades¶
# Docker
docker pull openobserve/openobserve:latest
docker compose up -d
# Helm
helm repo update openobserve
helm upgrade openobserve openobserve/openobserve -n openobserve -f values.yaml