Prometheus + Grafana + Loki + Alertmanager Stack

Full observability Docker Compose stack with Prometheus, Grafana, Loki, and Alertmanager for metrics, logs, dashboards, and alert routing.

yaml

docker-compose.yml

services:
  prometheus:
    image: prom/prometheus:v3.2.1
    restart: unless-stopped
    ports:
      - ${PROMETHEUS_PORT}:9090
    volumes:
      - prometheus_data:/prometheus
  grafana:
    image: grafana/grafana:11.6.1
    restart: unless-stopped
    environment:
      GF_SECURITY_ADMIN_USER: ${GRAFANA_ADMIN_USER}
      GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_ADMIN_PASSWORD}
    ports:
      - ${GRAFANA_PORT}:3000
    volumes:
      - grafana_data:/var/lib/grafana
  loki:
    image: grafana/loki:3.4.2
    restart: unless-stopped
    command: "-config.file=/etc/loki/local-config.yaml"
    ports:
      - ${LOKI_PORT}:3100
    volumes:
      - loki_data:/loki
  alertmanager:
    image: prom/alertmanager:v0.28.1
    restart: unless-stopped
    ports:
      - ${ALERTMANAGER_PORT}:9093
    volumes:
      - alertmanager_data:/alertmanager
volumes:
  prometheus_data:
  grafana_data:
  loki_data:
  alertmanager_data:

.ENV

.env example

PROMETHEUS_PORT=9090
GRAFANA_ADMIN_USER=admin
GRAFANA_ADMIN_PASSWORD=changeme123
GRAFANA_PORT=3000
LOKI_PORT=3100
ALERTMANAGER_PORT=9093

deployment

Quick Start

  1. Create a working directory named after the service.
  2. Copy the compose file and generated `.env` into that directory.
  3. Review the variables and replace placeholders with real values.
  4. Run `docker compose up -d`.
mkdir prometheus-grafana-loki-alertmanager-stack
cd prometheus-grafana-loki-alertmanager-stack
# create docker-compose.yml
# create .env
docker compose up -d