technique:adminsys:monitoring:collect:proxmox_metrics

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
technique:adminsys:monitoring:collect:proxmox_metrics [2022/04/29 15:45] – ↷ Page déplacée de technique:adminsys:monitoring:metrologie:collect:proxmox_metrics à technique:adminsys:monitoring:collect:proxmox_metrics qduchemitechnique:adminsys:monitoring:collect:proxmox_metrics [2022/09/23 10:19] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
 +{{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.
 +
 +<bootnote web>Cette page est un condensé de [cet excellent article](https://blog.zwindler.fr/2020/01/06/proxmox-ve-prometheus/), qui donne toutes les billes.</bootnote>
 +
 +Les opérations ci-dessous sont à réaliser sur toutes les machines où Proxmox tourne.
 +
 +<bootnote warning>Toutes les opérations sont à effectuer en tant que `root`.</bootnote>
 +
 +## 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.
 +
 +<bootnote warning>
 +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é.
 +</bootnote>
 +
 +## 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: <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
 +```
 +
 +<bootnote>
 +`9221 0.0.0.0` indique d'écouter sur le port 9221 en IPv4.
 +</bootnote>
 +
 +<bootnote>
 +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).
 +</bootnote>
 +
 +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é]].
 +
 +<bootnote critical>
 +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.
 +</bootnote>
 +
 +Ajouter la règle suivante :
 +
 +```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 [[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]
 +```
 +
 +<bootnote>
 +On peut compléter la liste si de nouvelles machines tournent sous Proxmox.
 +</bootnote>
 +
 +On redémarre ensuite `vmagent` sur la machine de monitoring. Depuis Grafana, on peut utiliser [ce dashboard](https://grafana.com/grafana/dashboards/10347).
 +
 +<bootnote warning>
 +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.</bootnote>