Monitoring Docker: Grafana + Prometheus + cAdvisor
Monitoring Docker

Monitoring Docker: Grafana + Prometheus + cAdvisor

Table des matières

Est-ce que ça vous dirait d'avoir ceci dans 20 minutes?

Je voudrais remercier NoScah pour sa (très) grande contribution à cet article, tout le mérite te revient! 👍

Cette gentille dédicace a été écrite sans contraintes, enfin, presque, si peu.

Hier nous avons abordé le monitoring de Proxmox avec Grafana, mais comme beaucoup parmi vous font du self-hosting, il manquait un petit quelque chose...

Aujourd'hui nous allons parler de Grafana, Prometheus & cAdvisor pour monitorer Docker!

Je vais faire le tutoriel en deux temps:

  1. Dans un premier temps je vais me concentrer uniquement sur le monitoring de Docker dans Grafana, sans Proxmox, que tout le monde n'utilise pas forcément.
  2. Si par contre vous avez Proxmox sur Grafana et que vous voulez ajouter le monitoring de Docker, en fin de tutoriel je vous explique comment faire.

💾 L'installation

  1. On va créer un dossier à la racine d'où sont installées vos applications, par exemple monitoring:
sudo mkdir monitoring
  1. Rendez-vous dedans:
cd monitoring
  1. Créez votre compose.yml:
sudo nano compose.yml
  1. Collez ça dedans en prenant soin d'adapter, si nécessaire, les ports et les volumes suivant votre configuration:
version: "3.3"
services:
  grafana:
    image: grafana/grafana
    container_name: grafana
    ports:
      - 3000:3000
    restart: unless-stopped
    volumes:
      - grafana-data:/var/lib/grafana
      - grafana-conf:/etc/grafana

  cadvisor:
    image: gcr.io/cadvisor/cadvisor:v0.49.1
    container_name: cadvisor
    ports:
      - 8098:8080
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
      - /dev/disk/:/dev/disk:ro
    devices:
      - /dev/kmsg
    privileged: true
    restart: unless-stopped

  prometheus:
    image: docker.io/prom/prometheus:latest
    container_name: prometheus
    ports:
      - 9090:9090
    command: "--config.file=/etc/prometheus/prometheus.yaml"
    volumes:
      - ./prometheus.yaml:/etc/prometheus/prometheus.yaml:ro
      - prometheus-data:/prometheus
    restart: unless-stopped

volumes:
  grafana-data:
  grafana-conf:
  prometheus-data:
  1. Il va falloir créer le fichier config pour Prometheus:
sudo nano prometheus.yaml
  1. Et coller ça dedans:
global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['192.168.1.152:9090']

  - job_name: 'cadvisor'
    static_configs:
      - targets: ['cadvisor:8080']

Veillez à changer ce paramètre:

  • targets: ['192.168.1.152:9090'] => Remplacer 192.168.1.152 par votre ip, tout en conservant :9090.
  1. On va déployer les applications:
docker-compose up -d

ou avec docker-compose V2:

docker compose up -d
  1. Rendez-vous sur l'ip:port, suivant l'IP de votre serveur local et du port choisi, 3000 et 8086 par défaut:
Grafana
http://ip:3000
Prometheus
http://ip:9090
Cadvisor
http://ip:8098

ou votre domaine:

https://grafana.mondomaine.com
https://influxdb.mondomaine.com

🔑 Modification du mot de passe de Grafana

On va commencer par lancer Grafana afin de changer le mot de passe par défaut.

Lors du premier lancement de Grafana il faudra indiquer les informations du compte par défaut:

  • Email or username => admin
  • Password => admin

Cliquez sur Log in.

Choisissez un nouveau mot de passe et cliquez sur Submit:

Vous voilà sur le tableau de bord:


✅ Vérification côté Prometheus

Il est important pour que tout se déroule bien, de vérifier que Prometheus voit bien cAdvisor.

Rendez-vous donc sur Prometheus, partie Satus, ensuite cliquez sur Targets:

Vous devriez voir cAdvisor, comme ceci:

Si vous ne le voyez pas, vérifier que vous avez bien mis la bonne ip du serveur où est installé cAdvisor, dans le fichier prometheus.yml. Par la même occasion vérifiez que sont container est bien lancé.


⚙️ Configurer Grafana

Il va falloir ajouter une source de données, celle de Prometheus. Dans Grafana, partie Home, cliquez sur Data Sources:

Ensuite cliquez sur Add data source:

Cliquez sur Prometheus:

Dans la partie Connection, il suffit d'entrer l'ip:port de Prometheus

Maintenant on va sauver/tester en cliquant sur Save & test:

Ce qui doit retourner:

Retournez sur Home, et cliquez sur Dashboards:

Cliquez en haut à droite sur New, puis Import:

Indiquez 193 et cliquez sur Load:

Dans Options, Name, vous pouvez choisir le nom que vous voulez. N'oubliez pas dans le fond de sélectionnez prometheus:

Quand c'est terminé, cliquez sur Import:

Et voilàààààà:


😷 Modifier l'apparence

Je vous invite à suivre ce lien qui explique comment faire:

Monitoring Proxmox: Grafana + InfluxDB
Tutoriel pour monitorer Proxmox à l’aide de Grafana et InfluxDB.

↗️ Combiner le monitoring de Proxmox & Docker

Si vous aviez déjà suivi ce tutoriel...

Monitoring Proxmox: Grafana + InfluxDB
Tutoriel pour monitorer Proxmox à l’aide de Grafana et InfluxDB.

...vous voudriez probablement pouvoir combiner le monitoring de Proxmox & Docker.

Voici la marche à suivre:

C'est beau un bébé lama! 😻

Pour commencer, stoppez les containers de Grafana et influxDB.

Il va falloir éditer votre (docker-)compose.yml. Pour avoir plus facile, faites CTRL+K (ça supprime une ligne entière) avec votre clavier autant de fois que nécessaire pour supprimer tout le contenu et collez ça dedans:

version: "3.3"
services:
  grafana:
    image: grafana/grafana
    container_name: grafana
    ports:
      - 3000:3000
    restart: unless-stopped
    volumes:
      - grafana-data:/var/lib/grafana
      - grafana-conf:/etc/grafana

  influxdb:
    image: influxdb:2
    container_name: influxdb
    volumes:
      - influxdb-config:/etc/influxdb2
      - influxdb-data:/var/lib/influxdb2
    ports:
       - 8086:8086

  cadvisor:
    image: gcr.io/cadvisor/cadvisor:v0.49.1
    container_name: cadvisor
    ports:
      - 8098:8080
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
      - /dev/disk/:/dev/disk:ro
    devices:
      - /dev/kmsg
    privileged: true
    restart: unless-stopped

  prometheus:
    image: docker.io/prom/prometheus:latest
    container_name: prometheus
    ports:
      - 9090:9090
    command: "--config.file=/etc/prometheus/prometheus.yaml"
    volumes:
      - ./prometheus.yaml:/etc/prometheus/prometheus.yaml:ro
      - prometheus-data:/prometheus
    restart: unless-stopped

volumes:
  grafana-data:
  grafana-conf:
  influxdb-config:
  influxdb-data:
  prometheus-data:

On va déployer les applications:

docker-compose up -d

ou avec docker-compose V2:

docker compose up -d

Vous pouvez poursuivre le tutoriel actuel à partir du point 5 dans la partie Installation:

5. Il va falloir créer le fichier config pour Prometheus:

zarev

->.<-
🐧 Passionné de self-hosting, je partage ce que je connais et me nourris des connaissances des bonnes âmes qui partagent avec moi. Soutenons l'utilisation des apps open source et leurs développeurs.

Vous pourriez aussi aimer