176 lines
6.1 KiB
YAML
176 lines
6.1 KiB
YAML
services:
|
||
prometheus:
|
||
image: prom/prometheus:latest
|
||
container_name: prometheus
|
||
restart: unless-stopped
|
||
ports:
|
||
- "9090:9090" # keep for now
|
||
volumes:
|
||
- ./prometheus:/etc/prometheus:ro
|
||
- ./data/prometheus:/prometheus
|
||
command:
|
||
- "--config.file=/etc/prometheus/prometheus.yml"
|
||
- "--storage.tsdb.path=/prometheus"
|
||
- "--web.enable-lifecycle"
|
||
networks:
|
||
- monitoring
|
||
- web_net
|
||
labels:
|
||
- "traefik.enable=true"
|
||
- "traefik.docker.network=web_net"
|
||
- "traefik.http.routers.prometheus.rule=Host(`prometheus.home.server`)"
|
||
- "traefik.http.routers.prometheus.entrypoints=websecure"
|
||
- "traefik.http.routers.prometheus.tls=true"
|
||
- "traefik.http.routers.prometheus.service=prometheus"
|
||
- "traefik.http.routers.prometheus.middlewares=security-headers@file"
|
||
- "traefik.http.routers.prometheus-http.rule=Host(`prometheus.home.server`)"
|
||
- "traefik.http.routers.prometheus-http.entrypoints=web"
|
||
- "traefik.http.routers.prometheus-http.middlewares=redirect-to-https@file"
|
||
- "traefik.http.services.prometheus.loadbalancer.server.port=9090"
|
||
|
||
grafana:
|
||
image: grafana/grafana:latest
|
||
container_name: grafana
|
||
restart: unless-stopped
|
||
ports:
|
||
- "3000:3000"
|
||
env_file:
|
||
- .env
|
||
environment:
|
||
- GF_SMTP_ENABLED=true
|
||
- GF_SMTP_HOST=smtp.gmail.com:587
|
||
- GF_SMTP_USER=${GMAIL_SMTP_USER}
|
||
- GF_SMTP_PASSWORD=${GMAIL_APP_PASSWORD}
|
||
- GF_SMTP_FROM_ADDRESS=${GMAIL_SMTP_USER}
|
||
- GF_SMTP_FROM_NAME=Grafana Alerts
|
||
volumes:
|
||
- ./grafana/data:/var/lib/grafana
|
||
- ./grafana/provisioning/datasources:/etc/grafana/provisioning/datasources:ro
|
||
- ./grafana/provisioning/alerting:/etc/grafana/provisioning/alerting:ro
|
||
networks:
|
||
- monitoring
|
||
- web_net
|
||
labels:
|
||
- "traefik.enable=true"
|
||
- "traefik.docker.network=web_net"
|
||
- "traefik.http.routers.grafana.rule=Host(`grafana.home.server`)"
|
||
- "traefik.http.routers.grafana.entrypoints=websecure"
|
||
- "traefik.http.routers.grafana.tls=true"
|
||
- "traefik.http.routers.grafana.service=grafana"
|
||
- "traefik.http.routers.grafana.middlewares=security-headers@file"
|
||
- "traefik.http.routers.grafana-http.rule=Host(`grafana.home.server`)"
|
||
- "traefik.http.routers.grafana-http.entrypoints=web"
|
||
- "traefik.http.routers.grafana-http.middlewares=redirect-to-https@file"
|
||
- "traefik.http.services.grafana.loadbalancer.server.port=3000"
|
||
|
||
node_exporter:
|
||
image: prom/node-exporter:latest
|
||
container_name: node-exporter
|
||
restart: unless-stopped
|
||
ports:
|
||
- "9100:9100"
|
||
volumes:
|
||
- /proc:/host/proc:ro
|
||
- /sys:/host/sys:ro
|
||
- /:/rootfs:ro
|
||
networks:
|
||
- monitoring
|
||
# no Traefik labels – no web UI needed
|
||
|
||
cadvisor:
|
||
image: ghcr.io/google/cadvisor:latest
|
||
container_name: cadvisor
|
||
restart: unless-stopped
|
||
ports:
|
||
- "8080:8080" # keep for now
|
||
volumes:
|
||
- /:/rootfs:ro
|
||
- /var/run:/var/run:rw
|
||
- /sys:/sys:ro
|
||
- /var/lib/docker/:/var/lib/docker:ro
|
||
networks:
|
||
- monitoring
|
||
- web_net
|
||
labels:
|
||
- "traefik.enable=true"
|
||
- "traefik.docker.network=web_net"
|
||
- "traefik.http.routers.cadvisor.rule=Host(`cadvisor.home.server`)"
|
||
- "traefik.http.routers.cadvisor.entrypoints=websecure"
|
||
- "traefik.http.routers.cadvisor.tls=true"
|
||
- "traefik.http.routers.cadvisor.service=cadvisor"
|
||
- "traefik.http.routers.cadvisor.middlewares=security-headers@file"
|
||
- "traefik.http.routers.cadvisor-http.rule=Host(`cadvisor.home.server`)"
|
||
- "traefik.http.routers.cadvisor-http.entrypoints=web"
|
||
- "traefik.http.routers.cadvisor-http.middlewares=redirect-to-https@file"
|
||
- "traefik.http.services.cadvisor.loadbalancer.server.port=8080"
|
||
|
||
loki:
|
||
image: grafana/loki:3.7.3
|
||
container_name: loki
|
||
restart: unless-stopped
|
||
command: -config.file=/etc/loki/local-config.yaml
|
||
ports:
|
||
- "3100:3100"
|
||
volumes:
|
||
- ./loki/local-config.yaml:/etc/loki/local-config.yaml:ro
|
||
- ./data/loki:/loki
|
||
mem_limit: 400m
|
||
cpus: 1
|
||
networks:
|
||
- monitoring
|
||
- web_net
|
||
labels:
|
||
- "traefik.enable=true"
|
||
- "traefik.docker.network=web_net"
|
||
- "traefik.http.routers.loki.rule=Host(`loki.home.server`)"
|
||
- "traefik.http.routers.loki.entrypoints=websecure"
|
||
- "traefik.http.routers.loki.tls=true"
|
||
- "traefik.http.routers.loki.service=loki"
|
||
- "traefik.http.routers.loki.middlewares=security-headers@file"
|
||
- "traefik.http.routers.loki-http.rule=Host(`loki.home.server`)"
|
||
- "traefik.http.routers.loki-http.entrypoints=web"
|
||
- "traefik.http.routers.loki-http.middlewares=redirect-to-https@file"
|
||
- "traefik.http.services.loki.loadbalancer.server.port=3100"
|
||
|
||
alloy:
|
||
image: grafana/alloy:v1.17.1
|
||
container_name: alloy
|
||
restart: unless-stopped
|
||
command:
|
||
- "run"
|
||
- "--server.http.listen-addr=0.0.0.0:12345"
|
||
- "--storage.path=/var/lib/alloy/data"
|
||
- "/etc/alloy/config.alloy"
|
||
ports:
|
||
- "12345:12345"
|
||
volumes:
|
||
- ./alloy/config.alloy:/etc/alloy/config.alloy:ro
|
||
- ./alloy/k3s-token:/etc/alloy/k3s-token:ro
|
||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||
- ./data/alloy:/var/lib/alloy/data
|
||
mem_limit: 300m
|
||
cpus: 0.5
|
||
depends_on:
|
||
- loki
|
||
networks:
|
||
- monitoring
|
||
- web_net
|
||
labels:
|
||
- "traefik.enable=true"
|
||
- "traefik.docker.network=web_net"
|
||
- "traefik.http.routers.alloy.rule=Host(`alloy.home.server`)"
|
||
- "traefik.http.routers.alloy.entrypoints=websecure"
|
||
- "traefik.http.routers.alloy.tls=true"
|
||
- "traefik.http.routers.alloy.service=alloy"
|
||
- "traefik.http.routers.alloy.middlewares=security-headers@file"
|
||
- "traefik.http.routers.alloy-http.rule=Host(`alloy.home.server`)"
|
||
- "traefik.http.routers.alloy-http.entrypoints=web"
|
||
- "traefik.http.routers.alloy-http.middlewares=redirect-to-https@file"
|
||
- "traefik.http.services.alloy.loadbalancer.server.port=12345"
|
||
|
||
networks:
|
||
monitoring:
|
||
driver: bridge
|
||
web_net:
|
||
external: true
|