{{indexmenu_n>25}} # 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. Cette page est un condensé de [cet excellent article](https://blog.zwindler.fr/2020/01/06/proxmox-ve-prometheus/), qui donne toutes les billes. Les opérations ci-dessous sont à réaliser sur toutes les machines où Proxmox tourne. 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](https://pve.proxmox.com/wiki/User_Management#pveum_permission_management) : ```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 [[asso:tuto:vaultwarden|vaultwarden]], sous le dossier de la machine concernée. L'utilisateur créé est un utilisateur au sens Proxmox, pas Unix. On peut vérifier que la manœuvre a bien fonctionné en se connectant sur le GUI : {{ :technique:adminsys:monitoring:metrologie:proxmox_auth_pve.png |}} Avec cet utilisateur, on ne peut rien faire depuis l'interface graphique, mais on peut vérifier que ça a bien fonctionné. ## Installation de l'exporter On va utiliser [prometheus-pve-exporter](https://github.com/prometheus-pve/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` : ```yaml default: user: pve_exporter@pve 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 ``` `9221 0.0.0.0` indique d'écouter sur le port 9221 en IPv4. Pour écouter en IPv4 et IPv6, on peut créer un [service template](https://stackoverflow.com/questions/48195340/systemd-with-multiple-execstart) 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 [[technique:adminsys:secu:firewall|bien été configuré]]. 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 : ```bash ufw allow proto tcp from to any port 9221 ufw allow proto tcp from to any port 9221 ``` ## Configuration serveur Du côté de `vmagent`, il faut ajouter une entrée dans le [[https://gitlab.utc.fr/picasoft/projets/services/monitoring/-/blob/master/vmagent-prom.yml|fichier de configuration Prometheus]]. Pour cela on va ajouter une entrée dans la section ''scrape_config'' du fichier : ```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] ``` 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](https://grafana.com/grafana/dashboards/10347). 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.