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
- Create a working directory named after the service.
- Copy the compose file and generated `.env` into that directory.
- Review the variables and replace placeholders with real values.
- 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