Pour monitorer mon blog hébergé sur un serveur Linux ou VPS chez OVH sur un containeur Docker (Ghost + MySQL), j'utilise le projet Dockprom de Stefan Prodan. Voici le schéma de l'infrastructure en place :

Migration d'une version précédente du conteneur vers la version 5.1 ou ultérieure

Seulement le souci est apparu au moment où j'ai souhaité effectuer une MAJ de Dockprom via le docker-compose.yml. Avant l'upgrade j'étais sur des versions peu récentes de Prometheus, Grafana, Cadvisor etc...

Après avoir copié-collé les fichiers récents et effectué les modifications nécessaires, le fichier docker-compose.yml ressemble à ceci :

version: '2.1'

networks:
  monitor-net:
    driver: bridge

volumes:
    prometheus_data: {}
    grafana_data: {}

services:

  prometheus:
    image: prom/prometheus:v2.5.0
    container_name: prometheus
    volumes:
      - ./prometheus/:/etc/prometheus/
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/etc/prometheus/console_libraries'
      - '--web.console.templates=/etc/prometheus/consoles'
      - '--storage.tsdb.retention=200h'
      - '--web.enable-lifecycle'
    restart: unless-stopped
    expose:
      - 9090
    networks:
      - monitor-net
    labels:
      org.label-schema.group: "monitoring"

  alertmanager:
    image: prom/alertmanager:v0.15.2
    container_name: alertmanager
    volumes: 
      - ./alertmanager/:/etc/alertmanager/
    command:
      - '--config.file=/etc/alertmanager/config.yml'
      - '--storage.path=/alertmanager'
    restart: unless-stopped
    expose:
      - 9093
    networks:
      - monitor-net
    labels:
      org.label-schema.group: "monitoring"

  nodeexporter:
    image: prom/node-exporter:v0.16.0
    container_name: nodeexporter
    user: root
    privileged: true
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
    restart: unless-stopped
    expose:
      - 9100
    networks:
      - monitor-net
    labels:
      org.label-schema.group: "monitoring"

  cadvisor:
    image: google/cadvisor:v0.31.0
    container_name: cadvisor
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
      #- /cgroup:/cgroup:ro #doesn't work on MacOS only for Linux
    restart: unless-stopped
    expose:
      - 8080
    networks:
      - monitor-net
    labels:
      org.label-schema.group: "monitoring"

  grafana:
    image: grafana/grafana:5.3.2
    container_name: grafana
    volumes:
      - grafana_data:/var/lib/grafana
      - ./grafana/datasources:/etc/grafana/datasources
      - ./grafana/dashboards:/etc/grafana/dashboards
      - ./grafana/setup.sh:/setup.sh
    entrypoint: /setup.sh
    environment:
      - GF_SECURITY_ADMIN_USER=${ADMIN_USER:-admin}
      - GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin}
      - GF_USERS_ALLOW_SIGN_UP=false
    restart: unless-stopped
    expose:
      - 3000
    networks:
      - monitor-net
    labels:
      org.label-schema.group: "monitoring"

  pushgateway:
    image: prom/pushgateway
    container_name: pushgateway
    restart: unless-stopped
    expose:
      - 9091
    networks:
      - monitor-net
    labels:
      org.label-schema.group: "monitoring"

  caddy:
    image: stefanprodan/caddy
    container_name: caddy
    ports:
      - "3000:3000"
      - "9090:9090"
      - "9093:9093"
      - "9091:9091"
    volumes:
      - ./caddy/:/etc/caddy/
    environment:
      - ADMIN_USER=${ADMIN_USER:-admin}
      - ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin}
    restart: unless-stopped
    networks:
      - monitor-net
    labels:
      org.label-schema.group: "monitoring"

Et après avoir lancé la commande :

docker-compose up -d

Seul Grafana se met en erreur :

root@vps473745:~/dockprom# docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS                        PORTS                                                                              NAMES
ba87b76094c2        grafana/grafana:5.2.4        "/setup.sh"              58 seconds ago      Restarting (0) 1 second ago

Et le port 3000 ne répond pas en web avec l'affichage "502 Bad Gateway error", ce qui est bien ennuyeux, tous les autres containeurs sont fonctionnels mais pas Grafana.

Le souci est remonté dans cette issue :

https://github.com/stefanprodan/dockprom/issues/92

J'ai donc modifié le fichier docker-compose.yml en ajoutant user: "104" aux caractéristiques de Grafana comme ceci :

  grafana:
    image: grafana/grafana:5.3.2
    container_name: grafana
    volumes:
      - grafana_data:/var/lib/grafana
      - ./grafana/datasources:/etc/grafana/datasources
      - ./grafana/dashboards:/etc/grafana/dashboards
      - ./grafana/setup.sh:/setup.sh
    entrypoint: /setup.sh
    environment:
      - GF_SECURITY_ADMIN_USER=${ADMIN_USER:-admin}
      - GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin}
      - GF_USERS_ALLOW_SIGN_UP=false
    restart: unless-stopped
    expose:
      - 3000
    user : "104"
    networks:
      - monitor-net
    labels:
      org.label-schema.group: "monitoring"

Ce qui permet après avoir relancé le docker-compose up -d :

root@vps473745:~/dockprom# ADMIN_USER=admin ADMIN_PASSWORD=admin docker-compose up -d
alertmanager is up-to-date
caddy is up-to-date
nodeexporter is up-to-date
cadvisor is up-to-date
prometheus is up-to-date
pushgateway is up-to-date
Recreating grafana ...
Recreating grafana ... done

D'obtenir à nouveau Grafana fonctionnel et à jour :

Bon travail !