L’énergie c’est tellement important que même Einstein avait décrété que la vitesse et la masse devait lui obéir. Vos serveurs, nos serveurs, consomment l'équivalent de 6,2% de l'électricité consommée en France (source : étude GreenIT.fr "Impact environnemental du numérique en France") quand il s’agit d’hébergement sur notre sol, et cette énergie est de plus en plus précieuse avec les différents contextes, mais également sa production a un coût environnemental. Dès lors, autant l’exploiter intelligemment.
Dans le but de bien maîtriser votre consommation, vous pouvez être amenés à vous demander, si vous hébergez votre propre serveur physique (type baremetal), combien ce dernier consomme et c’est pourquoi nous tenions à vous présenter un projet qui a retenu notre attention : Scaphandre.
Scaphandre

Scaphandre se compose avant tout d’un agent chargé de collecter de la data sur un serveur pour en établir des métrics, identifier qui consomme sur un serveur etc etc. Il fonctionne sur des serveurs physiques mais également sur des machines virtuelles qemu/kvm. Hélas cela ne fonctionne pas encore sur VMware.
Les métriques peuvent ensuite être exploitées sur une base Prometheus. Nous allons installer le docker-compose fourni pour avoir une base prometheus avec Grafana, et ensuite utiliser Scaphandre sur notre serveur.
Machine de collecte Grafana/Prometheus

Nous prenons une machine virtuelle innocente sous Debian 11. Elle n’a rien de particulier sinon Docker installé et un client git. Elle servira de serveur Prometheus et de serveur Grafana. Elle est installée sur un Hosted Private Cloud OVHcloud, sur un réseau privé interne.
Nous récupérons le code source de Scaphandre :
git clone https://github.com/hubblo-org/scaphandre.git
Nous copions ensuite le contenu du dossier docker-compose vers un dossier à part, histoire de modifier notre propre instance :
mkdir /opt/scaphandre cp -pPrv scaphandre/docker-compose/* /opt/scaphandre/
Nous allons éditer le fichier docker-compose.yaml afin de retirer la partie chargeant scaphandre sur notre vm. Étant sous VMware, cela ne nous sera pas utile. Par ailleurs, nous prenons ce dossier car il contient le modèle Grafana, qui nous permettra d’avoir des métriques propres "out of the box".
version: '3.2' services: grafana: build: context: ./grafana environment: GF_SECURITY_ADMIN_PASSWORD: "secret" GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH: "/var/lib/grafana/dashboards/sample/sample-dashboard.json" depends_on: - prometheus ports: - "3000:3000" networks: - scaphandre-network volumes: - type: bind source: "./dashboards/sample-dashboard.json" target: "/var/lib/grafana/dashboards/sample/sample-dashboard.json" prometheus: build: context: ./prom ports: - "9090:9090" volumes: - promdata-scaphandre:/prometheus networks: - scaphandre-network volumes: promdata-scaphandre: networks: scaphandre-network: driver: bridge ipam: config: - subnet: 192.168.33.0/24
Nous éditions ensuite la configuration de prometheus qui se situe dans `./prom/prometheus.yml`
# my global config global: scrape_interval: 10s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). # Attach these labels to any time series or alerts when communicating with # external systems (federation, remote storage, Alertmanager). external_labels: monitor: 'scaphandre-monitor' # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: # - "first.rules" # - "second.rules" # A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself. scrape_configs: # The job name is added as a label `job=` to any timeseries scraped from this config. - job_name: 'prometheus' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['localhost:9090'] - job_name: 'scaphandre' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['aaa.bb.ccc.xx:8081'] - targets: ['aaa.bb.ccc.yy:8081']
Notez qu’ici nous modifions les deux dernières lignes afin de se connecter au Prometheus exporter de deux machines distantes afin de déterminer leur consommation électriques.
Nous n’avons plus qu’à build la partie docker compose et à la lancer.
docker compose build docker compose up -d
La partie Grafana / Prometheus est prête, vous pouvez vous y connecter en allant sur http://ip_de_votre_vm:3000 , login : admin et password : secret (ou autre chose si vous l’avez changé dans le docker-compose.yaml)
Machines pour lesquelles on souhaite mesurer la consommation électrique :
Nous prendrons deux serveurs bare metal de chez ovh, identiques, pour cela. Ces serveurs sont actifs et font tourner des vms de production et de test avec de l’applicatif php ainsi que de la bdd mariadb.
Pour cela nous allons installer le paquet Debian sur ces machines (ce sont des proxmox).
wget https://github.com/barnumbirr/scaphandre-debian/releases/download/v0.4.1-1/scaphandre_0.4.1-1_amd64_bullseye.deb apt install ./scaphandre_0.4.1-1_amd64_bullseye.deb
Nous vérifions le fonctionnement de Scaphandre :
scaphandre stdout -t 30
Des mesures apparaissent pour montrer la consommation electrique du CPU.
Nous allons donc lancer Scaphandre de manière à exporter la donnée vers Prometheus sur les deux serveurs bare metal :
scaphandre prometheus -a aaa.bb.ccc.xx -p 8081
sur le second serveur :
scaphandre prometheus -a aaa.bb.ccc.yy -p 8081
A partir de là, Prometheus doit être en mesure de récupérer les données de consommation électrique. Bien entendu, vous aurez vérifié que l’instance docker de prometheus peut atteindre via le réseau le port 8081 des deux serveurs baremetal (sur les ip aaa.bb.ccc.xx et yy).
En se rendant sur l’ip de la vm prometheus ip:3000 , vous pourrez vous logguer sur Grafana (login : admin / password : secret) et avoir des résultats de cet acabit dès lors que les données commenceront à être collectée.

Vous pouvez bien entendu perfectionner cette rapide explication, notamment en automatisant le lancement de Scaphandre ou en l'exécutant dans « screen ». Je n’ai fait des mesures que sur 24h ici pour illustration, mais ce programme est prometteur car il donne une idée concrète sur l’impact de la partie compute pure d’une vm proxmox relativement sollicitée.
L'engagement sobriété énergétique d'HostMe
Chaque jour chez HostMe nous travaillons dans le sens de réduire notre impact carbonne, et Scaphandre pourrait devenir un outil pour engager une meilleure compréhension de l’utilisation de l’énergie par nos clients. Nous avons d’ailleurs privilégié le choix du Cloud Privé OVHcloud afin d’avoir une utilisation optimale de gros serveurs sous VMware avec une qualité de service haut de gamme comme on peut l’attendre d’un cloud privé.
En outre, ce choix nous permet d’avoir une dépense énergétique moindre que si nous avions dû recourir à nombre de serveurs bare metal. N’hésitez pas à nous consulter pour vos projets quel que soit le périmètre ou quel que soit votre secteur ou votre taille, nous travaillons avec bon nombre d’entreprises de différents secteurs et tachons de toujours conseiller au mieux. Parfois ça marche et certains de nos clients sont contents, si ce n’est pas quasi tous !
La route est longue pour tous, mais la prise de conscience semble petit à petit s’intensifier. Je vous encourage à tester Scaphandre pour ne serait-ce que pour constater que l’énergie part bien plus vite qu’on ne l’envisage. On n’a toujours pas de pétrole, mais on a de plus en plus d’idées.