_Monitoring

Änderungsstand: 2021-09-16

Swarmpit, Swarm Dashboard und Prometheus monitoring Docker Swarm cluster (like Grafana):

Swarmpit ist ein leichtgewichtiges, mobilfreundliches Docker Swarm-Management-UI. Viele Sachen werden zwar auch im Portainer angezeigt, aber der Vorteil liegt auf der Hand. Man muss nicht den Portainer öffnen, um die Sachen angezeigt zu bekommen. Swarm Dashboard ist ein einfaches Anzeigetool, welches die Dockerverteilung auf den Nodes zeigt.

Swarmpit

  • Portainer öffnen
  • Stacks
  • + Add stackName: swarmpit
    • Web editor:
    • Folgenden Code eingeben:
version: '3.3'

services:
  app:
    image: swarmpit/swarmpit:latest
    environment:
      - SWARMPIT_DB=http://db:5984
      - SWARMPIT_INFLUXDB=http://influxdb:8086
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    ports:
      - 888:8080
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080"]
      interval: 60s
      timeout: 10s
      retries: 3
    networks:
      - net
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 1024M
        reservations:
          cpus: '0.25'
          memory: 512M
      placement:
        constraints:
          - node.role == manager

  db:
    image: couchdb:2.3.0
    volumes:
      - db-data:/opt/couchdb/data
    networks:
      - net
    deploy:
      resources:
        limits:
          cpus: '0.30'
          memory: 256M
        reservations:
          cpus: '0.15'
          memory: 128M

  influxdb:
    image: influxdb:1.7
    volumes:
      - influx-data:/var/lib/influxdb
    networks:
      - net
    deploy:
      resources:
        limits:
          cpus: '0.60'
          memory: 512M
        reservations:
          cpus: '0.30'
          memory: 128M

  agent:
    image: swarmpit/agent:latest
    environment:
      - DOCKER_API_VERSION=1.35
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - net
    deploy:
      mode: global
      labels:
        swarmpit.agent: 'true'
      resources:
        limits:
          cpus: '0.10'
          memory: 64M
        reservations:
          cpus: '0.05'
          memory: 32M

networks:
  net:
    driver: overlay

volumes:
  db-data:
    driver: local
  influx-data:
    driver: local

Actions: Deploy the stack

Da der Swarmpit-Agent „global“ ausgerollt wird, ist der Dienst automatisch auf allen Nodes vorhanden.

Aufruf im Browser: Server-IP:888

Quelle:

https://awesomeopensource.com/project/swarmpit/swarmpit

.

Swarm Dashboard

  • Portainer öffnen
  • Stacks
  • + Add stackName: svc
    • Web editor:
    • Folgenden Code eingeben:
version: "3"

services:
  dashboard:
    image: charypar/swarm-dashboard
    volumes:
    - "/var/run/docker.sock:/var/run/docker.sock"
    ports:
    - 8081:8080
    environment:
      PORT: 8080
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.role == manager

Actions: Deploy the stack

Aufruf im Browser: Server-IP:8081

Quelle:

https://awesomeopensource.com/project/charypar/swarm-dashboard

Prometheus monitoring Docker Swarm cluster

Ich orientierte mich an den Guide der Quellangabe und änderte diesen nach meinen Ansprüchen.

Am ersten Manager-Node einloggen. Dann:

sudo nano /etc/docker/daemon.json

Folgendes am Ende der Datei (die Datei kann auch vorher leer sein) eintragen:

{
  "metrics-addr" : "127.0.0.1:9323",
  "experimental" : true
}

Strg-x, y, Enter

sudo service docker restart
cd && git clone https://github.com/stefanprodan/swarmprom.git
cd && cd swarmprom
mv docker-compose.yml docker-compose.bak
cd && cd swarmprom && sudo nano docker-compose.yml

Folgendes komplett einfügen:

version: "3.3"

services:
  dockerd-exporter:
    image: stefanprodan/caddy
    networks:
      - mon_net
    environment:
      - DOCKER_GWBRIDGE_IP=172.18.0.1
    configs:
      - source: dockerd_config
        target: /etc/caddy/Caddyfile
    deploy:
      mode: global
      resources:
        limits:
          memory: 128M
        reservations:
          memory: 64M

  cadvisor:
    image: gcr.io/cadvisor/cadvisor
    networks:
      - mon_net
    command: -logtostderr -docker_only
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /:/rootfs:ro
      - /var/run:/var/run
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    deploy:
      mode: global
      resources:
        limits:
          memory: 128M
        reservations:
          memory: 64M

  grafana:
    image: stefanprodan/swarmprom-grafana:5.3.4
    networks:
      - mon_net
    environment:
      - GF_SECURITY_ADMIN_USER=${ADMIN_USER:-admin}
      - GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin}
      - GF_USERS_ALLOW_SIGN_UP=false
      #- GF_SERVER_ROOT_URL=${GF_SERVER_ROOT_URL:-localhost}
      #- GF_SMTP_ENABLED=${GF_SMTP_ENABLED:-false}
      #- GF_SMTP_FROM_ADDRESS=${GF_SMTP_FROM_ADDRESS:-grafana@test.com}
      #- GF_SMTP_FROM_NAME=${GF_SMTP_FROM_NAME:-Grafana}
      #- GF_SMTP_HOST=${GF_SMTP_HOST:-smtp:25}
      #- GF_SMTP_USER=${GF_SMTP_USER}
      #- GF_SMTP_PASSWORD=${GF_SMTP_PASSWORD}
    volumes:
      - grafana:/var/lib/grafana
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager
      resources:
        limits:
          memory: 128M
        reservations:
          memory: 64M

  alertmanager:
    image: stefanprodan/swarmprom-alertmanager:v0.14.0
    networks:
      - mon_net
    environment:
      - SLACK_URL=${SLACK_URL:-https://hooks.slack.com/services/TOKEN}
      - SLACK_CHANNEL=${SLACK_CHANNEL:-general}
      - SLACK_USER=${SLACK_USER:-alertmanager}
    command:
      - '--config.file=/etc/alertmanager/alertmanager.yml'
      - '--storage.path=/alertmanager'
    volumes:
      - alertmanager:/alertmanager
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager
      resources:
        limits:
          memory: 128M
        reservations:
          memory: 64M

  unsee:
    image: cloudflare/unsee:v0.8.0
    networks:
      - mon_net
    environment:
      - "ALERTMANAGER_URIS=default:http://alertmanager:9093"
    deploy:
      mode: replicated
      replicas: 1

  node-exporter:
    image: stefanprodan/swarmprom-node-exporter:v0.16.0
    networks:
      - mon_net
    environment:
      - NODE_ID={{.Node.ID}}
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
      - /etc/hostname:/etc/nodename
    command:
      - '--path.sysfs=/host/sys'
      - '--path.procfs=/host/proc'
      - '--collector.textfile.directory=/etc/node-exporter/'
      - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
      - '--no-collector.ipvs'
    deploy:
      mode: global
      resources:
        limits:
          memory: 128M
        reservations:
          memory: 64M

  prometheus:
    image: stefanprodan/swarmprom-prometheus:v2.5.0
    networks:
      - mon_net
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--storage.tsdb.retention=${PROMETHEUS_RETENTION:-24h}'
    volumes:
      - prometheus:/prometheus
    configs:
      - source: node_rules
        target: /etc/prometheus/swarm_node.rules.yml
      - source: task_rules
        target: /etc/prometheus/swarm_task.rules.yml
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager
      resources:
        limits:
          memory: 2048M
        reservations:
          memory: 128M

  caddy:
    image: stefanprodan/caddy
    ports:
      - "3000:3000"
      - "9090:9090"
      - "9093:9093"
      - "9094:9094"
    networks:
      - mon_net
    environment:
      - ADMIN_USER=${ADMIN_USER:-admin}
      - ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin}
    configs:
      - source: caddy_config
        target: /etc/caddy/Caddyfile
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager
      resources:
        limits:
          memory: 128M
        reservations:
          memory: 64M
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000"]
      interval: 5s
      timeout: 1s
      retries: 5

volumes:
    prometheus: {}
    grafana: {}
    alertmanager: {}

configs:
  caddy_config:
    file: ./caddy/Caddyfile
  dockerd_config:
    file: ./dockerd-exporter/Caddyfile
  node_rules:
    file: ./prometheus/rules/swarm_node.rules.yml
  task_rules:
    file: ./prometheus/rules/swarm_task.rules.yml

networks:
  mon_net:
    driver: overlay
    attachable: true

Strg-x, y, Enter

cd && cd swarmprom && ADMIN_USER=admin ADMIN_PASSWORD=admin docker stack deploy -c docker-compose.yml mon

Jetzt etwas warten, bis die Images heruntergeladen und die Dienste gestartet wurden. Kontrollieren kann man das mit:

docker service ls

Alle Ausgaben mit mon_ sind für mich nun interessant:

f4lnr0ug67yu   mon_alertmanager        replicated   1/1        stefanprodan/swarmprom-alertmanager:v0.14.0
jrnl0vw57am0   mon_caddy               replicated   1/1        stefanprodan/caddy:latest                      *:3000->3000/tcp, *:9090->9090/tcp, *:9093-9094->9093-9094/tcp
lxyq832szsd6   mon_cadvisor            global       4/4        gcr.io/cadvisor/cadvisor:latest
rn9wkp7vjz7g   mon_dockerd-exporter    global       4/4        stefanprodan/caddy:latest
grci7iaxshdv   mon_grafana             replicated   1/1        stefanprodan/swarmprom-grafana:5.3.4
j1bh4s6qnmjr   mon_node-exporter       global       4/4        stefanprodan/swarmprom-node-exporter:v0.16.0
rwwjj3ooui62   mon_prometheus          replicated   1/1        stefanprodan/swarmprom-prometheus:v2.5.0
of6zkdmualrp   mon_unsee               replicated   1/1        cloudflare/unsee:v0.8.0

Erst wenn bei allen Diensten x/x (identische Werte) angezeigt werden, wurde alles komplett geladen.

Aufruf im Browser:

Server-IP:3000

Hat man das Dashboard geöffnet, admin admin eingeben und das Passwort ändern. Dann links oben auf „Home“ und den gewünschten Dienst wählen. Die für mich wichtigste Ausgabe ist hierbei „Docker Swarm Nodes“

Docker Swarm Nodes:

.

Quelle:

https://www.fatalerrors.org/a/prometheus-monitoring-docker-swarm-cluster.html

Erstelle eine Website wie diese mit WordPress.com
Jetzt starten