Back to Blog
Deployment Guide July 21, 2026 ⏱ 7 min read

Docker Compose Observability Stack: Deploy in 5 Minutes

You don't need a Kubernetes cluster to get a real observability stack running. Here's what a minimal, production-shaped Compose setup actually needs.

X
XplurData Team
Platform Engineering

The Four Pieces Every Stack Needs

A functional observability stack, regardless of vendor, needs four components talking to each other: a way to receive telemetry (the OTel Collector), somewhere to store it (an analytical database), an API layer to query it, and a UI to actually look at it. Docker Compose is a natural fit for wiring these together locally or on a single VM, since each component is just a container with a defined port and a shared network.

A Minimal docker-compose.yml Shape

docker-compose.yml
version: "3.8"
services:
  otel-collector:
    image: otel/opentelemetry-collector-contrib:latest
    volumes:
      - ./otel-config.yaml:/etc/otelcol/config.yaml
    ports:
      - "4317:4317"
      - "4318:4318"
    networks: [otel-net]

  storage:
    image: your-analytics-db:latest
    volumes:
      - db-data:/var/lib/storage
    networks: [otel-net]

  api:
    image: your-observability-api:latest
    depends_on: [storage]
    ports:
      - "8000:8000"
    networks: [otel-net]

  frontend:
    image: your-observability-frontend:latest
    depends_on: [api]
    ports:
      - "3000:3000"
    networks: [otel-net]

networks:
  otel-net:

volumes:
  db-data:

The key structural point is the shared otel-net network — every component needs to reach the others by service name, and the Collector specifically needs its config mounted in so you can adjust receivers and exporters without rebuilding the image. See our Collector configuration guide for what goes in that file.

Why One-Command Installers Matter

Hand-writing this file from scratch is a reasonable learning exercise, but for actually getting a stack running, a maintained installer script that generates the Compose file, pulls the right image versions, and starts everything in the correct dependency order saves real time — and avoids subtle version mismatches between components that are easy to introduce by hand.

bash
bash -c "$(curl -fsSL \
  https://raw.githubusercontent.com/xplurdata/oss-stack/main/install.sh)"

What Changes Moving to Production

A local Compose setup is fine for evaluation, but a few things typically change for a real deployment: persistent volumes need to live on properly backed-up storage, the storage tier often moves to a multi-node cluster rather than a single container, and the Collector configuration usually gains batching, sampling, and retry policies tuned to actual traffic rather than defaults. None of this changes the Compose file's basic shape — it's still the same four pieces, just sized and configured for production load.

Conclusion

Docker Compose is a legitimate way to run observability infrastructure, not just a toy for local development — plenty of small and mid-size teams run their entire stack this way indefinitely. Start with the four-component shape above, and grow individual pieces (storage, mainly) as your telemetry volume demands it.

Deploy the Full Stack in One Command

XplurData's installer configures Doris, the OTel Collector, and the app server automatically.

Deploy XplurData
XD

XplurData Engineering Team

Building the next generation open-source observability platform.

The XplurData Engineering Team focuses on scalable observability, OpenTelemetry, Apache Doris, distributed systems and high-performance analytics.