Grafana + Prometheus + Loki + Node Exporter Stack

Docker Compose monitoring stack with Grafana dashboards, Prometheus metrics collection, Loki log aggregation, and Node Exporter host metrics.

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
  node-exporter:
    image: prom/node-exporter:v1.8.2
    restart: unless-stopped
    ports:
      - ${NODE_EXPORTER_PORT}:9100
volumes:
  prometheus_data:
  grafana_data:
  loki_data:

.ENV

.env example

PROMETHEUS_PORT=9090
GRAFANA_ADMIN_USER=admin
GRAFANA_ADMIN_PASSWORD=changeme123
GRAFANA_PORT=3000
LOKI_PORT=3100
NODE_EXPORTER_PORT=9100

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 grafana-prometheus-loki-node-exporter-stack
cd grafana-prometheus-loki-node-exporter-stack
# create docker-compose.yml
# create .env
docker compose up -d