154 lines
4.0 KiB
YAML
154 lines
4.0 KiB
YAML
networks:
|
|
observability-network:
|
|
driver: overlay
|
|
attachable: false
|
|
internal: true
|
|
driver_opts:
|
|
encrypted: "true"
|
|
|
|
grafana-frontend-network:
|
|
driver: overlay
|
|
attachable: false
|
|
internal: true
|
|
driver_opts:
|
|
encrypted: "true"
|
|
|
|
proxy-docker-network:
|
|
external: true
|
|
|
|
secrets:
|
|
grafana-admin-user:
|
|
file: ./secrets/grafana-admin-user.txt
|
|
grafana-admin-password:
|
|
file: ./secrets/grafana-admin-password.txt
|
|
|
|
volumes:
|
|
grafana-storage: {}
|
|
prometheus-storage: {}
|
|
loki-storage: {}
|
|
|
|
configs:
|
|
prometheus-config-v1:
|
|
file: ./prometheus/prometheus-compose.yaml
|
|
|
|
services:
|
|
grafana:
|
|
image: ghcr.io/obnitram/observability/grafana:v1.0
|
|
environment:
|
|
GF_SECURITY_ADMIN_USER__FILE: /run/secrets/grafana-admin-user
|
|
GF_SECURITY_ADMIN_PASSWORD__FILE: /run/secrets/grafana-admin-password
|
|
secrets:
|
|
- grafana-admin-user
|
|
- grafana-admin-password
|
|
volumes:
|
|
- grafana-storage:/var/lib/grafana
|
|
deploy:
|
|
mode: replicated
|
|
replicas: 1
|
|
restart_policy:
|
|
condition: any
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.grafana.entrypoints=admin"
|
|
- "traefik.http.routers.grafana.rule=Host(`grafana.localhost`)"
|
|
|
|
- "traefik.http.routers.grafana.middlewares=compress-grafana"
|
|
- "traefik.http.middlewares.compress-grafana.compress=true"
|
|
- "traefik.http.middlewares.compress-grafana.compress.encodings=zstd, br, gzip"
|
|
|
|
- "traefik.http.routers.grafana.service=grafana"
|
|
- "traefik.http.services.grafana.loadbalancer.server.port=3000"
|
|
networks:
|
|
- proxy-docker-network
|
|
- grafana-frontend-network
|
|
|
|
prometheus:
|
|
image: ghcr.io/obnitram/observability/prometheus:v0.2
|
|
volumes:
|
|
- prometheus-storage:/prometheus
|
|
configs:
|
|
- source: prometheus-config-v1
|
|
target: /etc/prometheus/prometheus.yaml
|
|
deploy:
|
|
mode: replicated
|
|
replicas: 1
|
|
restart_policy:
|
|
condition: any
|
|
placement:
|
|
constraints:
|
|
- node.role == manager
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.prometheus.entrypoints=admin"
|
|
- "traefik.http.routers.prometheus.rule=Host(`prometheus.localhost`)"
|
|
|
|
- "traefik.http.routers.prometheus.middlewares=compress-prometheus"
|
|
- "traefik.http.middlewares.compress-prometheus.compress=true"
|
|
- "traefik.http.middlewares.compress-prometheus.compress.encodings=zstd, br, gzip"
|
|
|
|
- "traefik.http.routers.prometheus.service=prometheus"
|
|
- "traefik.http.services.prometheus.loadbalancer.server.port=9090"
|
|
networks:
|
|
- observability-network
|
|
- grafana-frontend-network
|
|
- proxy-docker-network
|
|
|
|
loki:
|
|
image: ghcr.io/obnitram/observability/loki:v0.1
|
|
volumes:
|
|
- loki-storage:/loki
|
|
deploy:
|
|
mode: replicated
|
|
replicas: 1
|
|
restart_policy:
|
|
condition: any
|
|
placement:
|
|
constraints:
|
|
- node.role == manager
|
|
networks:
|
|
- observability-network
|
|
- grafana-frontend-network
|
|
|
|
cadvisor:
|
|
image: gcr.io/cadvisor/cadvisor:latest
|
|
volumes:
|
|
- /:/rootfs:ro
|
|
- /run:/run:ro
|
|
- /sys:/sys:ro
|
|
- /var/lib/docker/:/var/lib/docker:ro
|
|
- /dev/disk/:/dev/disk:ro
|
|
deploy:
|
|
mode: global
|
|
endpoint_mode: dnsrr
|
|
restart_policy:
|
|
condition: any
|
|
networks:
|
|
- observability-network
|
|
|
|
node_exporter:
|
|
image: quay.io/prometheus/node-exporter:latest
|
|
hostname: "{{.Node.Hostname}}"
|
|
command:
|
|
- "--path.rootfs=/host"
|
|
volumes:
|
|
- "/:/host:ro,rslave"
|
|
deploy:
|
|
mode: global
|
|
endpoint_mode: dnsrr
|
|
restart_policy:
|
|
condition: any
|
|
networks:
|
|
- observability-network
|
|
|
|
alloy:
|
|
image: ghcr.io/obnitram/observability/alloy:v0.1
|
|
volumes:
|
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
deploy:
|
|
mode: global
|
|
endpoint_mode: dnsrr
|
|
restart_policy:
|
|
condition: any
|
|
networks:
|
|
- observability-network
|