Proxmox
L’API de Proxmox expose beaucoup de métriques intéressantes. Grâce aux contributions de la communauté, il existe un exporter Prometheus et un dashboard Grafana compatibles qui se basent sur l’API Proxmox.
Lien:
Cette page est un condensé de cet excellent article, qui donne toutes les billes.
Les opérations ci-dessous sont à réaliser sur toutes les machines où Proxmox tourne.
Attention:
Toutes les opérations sont à effectuer en tant que root
.
Ajout d'un utilisateur lecture seule
L’idée est de créer un utilisateur au sein d’un groupe qui n’a que des permissions de lecture. En effet, l’exporter n’a besoin que de lire les métriques, cela réduit la surface d’attaque.
Créer un groupe monitoring
avec la permission PVEAuditor :
- snippet.bash
pveum groupadd monitoring -comment "Groupe utilisé pour exporter les métriques" pveum aclmod / -group monitoring -role PVEAuditor
On crée ensuite un utilisateur appartenant à ce groupe :
pveum useradd pve_exporter@pve pveum usermod pve_exporter@pve -group monitoring pveum passwd pve_exporter@pve
Le mot de passe est à générer dans le vaultwarden, sous le dossier de la machine concernée.
Installation de l'exporter
On va utiliser prometheus-pve-exporter, bien maintenu.
python3 -m pip install prometheus-pve-exporter
On crée un fichier de configuration à l’emplacement /etc/pve_exporter/conf.yml
:
- snippet.yaml
default: user: pve_exporter@pve password: <password> verify_ssl: false
Le mot de passe est celui généré précédemment.
On crée ensuite un service systemd
pour que l’exporter démarre automatiquement à l’allumage de la machine. Dans /etc/systemd/system/pve-exporter.service
, ajouter :
[Unit] Description=Proxmox VE Prometheus Exporter After=network.target Wants=network.target [Service] Restart=on-failure ExecStart=pve_exporter /etc/pve_exporter/conf.yml 9221 0.0.0.0 [Install] WantedBy=multi-user.target
Note:
9221 0.0.0.0
indique d’écouter sur le port 9221 en IPv4.
Note:
Pour écouter en IPv4 et IPv6, on peut créer un service template et le démarrer deux fois : une fois avec 0.0.0.0
, et une fois avec ::
(équivalent pour IPv6).
Recharger la configuration de systemd
, puis activer et lancer l’exporter et vérifier que tout s’est bien passé.
systemctl daemon-reload systemctl enable --now pve-exporter systemctl status pve-exporter ● pve-exporter.service - Proxmox VE Prometheus Exporter Loaded: loaded (/etc/systemd/system/pve-exporter.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2021-01-12 23:44:46 CET; 9s ago Main PID: 3578 (pve_exporter) Tasks: 1 (limit: 4915) Memory: 14.0M CGroup: /system.slice/pve-exporter.service └─3578 /usr/bin/python3 /usr/local/bin/pve_exporter /etc/pve_exporter/conf.yml 9221 :: Jan 12 23:44:46 alice systemd[1]: Started Proxmox VE Prometheus Exporter. Jan 12 23:44:46 alice pve_exporter[3578]: * Running on http://[::]:9221/ (Press CTRL+C to quit)
On répète pour tous les hyperviseurs.
Sécurisation
Comme pour les autres métriques, on va restreindre l’accès à l’exporter à la machine de monitoring. Vérifier qu’UFW a bien été configuré.
Important:
Rajouter une règle sur un UFW non configuré bloquera entièrement l’accès au serveur ! Si la commande ufw status
(en root
) ne renvoie rien, alors UFW n’est pas configuré, il faut absolument le faire avant.
Ajouter la règle suivante :
- snippet.bash
ufw allow proto tcp from <IPv4 monitoring> to any port 9221 ufw allow proto tcp from <IPv6 monitoring> to any port 9221
Configuration serveur
Du côté de vmagent
, il faut ajouter une entrée dans le fichier de configuration Prometheus. Pour cela on va ajouter une entrée dans la section scrape_config
du fichier :
- snippet.yaml
- job_name: "proxmox" static_configs: - targets: - "alice.picasoft.net:9221" - "bob.picasoft.net:9221" - "caribou.picasoft.net:9221" metrics_path: /pve params: module: [default]
Note:
On peut compléter la liste si de nouvelles machines tournent sous Proxmox.
On redémarre ensuite vmagent
sur la machine de monitoring. Depuis Grafana, on peut utiliser ce dashboard.
Attention:
Le dashboard nécessite quelques adaptations (changer name
en storage
pour le nom des stockages, etc…), on ne détaille pas ici, c’est du détail et ça peut changer.