<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Exporter on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/exporter/</link><description>Recent content in Exporter on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Mon, 06 Jan 2020 07:15:00 +0000</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/exporter/index.xml" rel="self" type="application/rss+xml"/><item><title>Proxmox VE + Prometheus = &lt;3</title><link>https://blog.zwindler.fr/2020/01/06/proxmox-ve-prometheus/</link><pubDate>Mon, 06 Jan 2020 07:15:00 +0000</pubDate><guid>https://blog.zwindler.fr/2020/01/06/proxmox-ve-prometheus/</guid><description>&lt;img src="https://blog.zwindler.fr/2019/11/grafana_prometheus_proxmox.webp" alt="Featured image of post Proxmox VE + Prometheus = &lt;3" /&gt;&lt;h2 id="proxmox-et-prometheus-sont-dans-un-bateau"&gt;Proxmox et Prometheus sont dans un bateau&amp;hellip;
&lt;/h2&gt;&lt;p&gt;Si vous avez suivi le précédent &lt;a class="link" href="https://blog.zwindler.fr/2019/11/12/tutoriel-installer-prometheus-grafana-sans-docker/" &gt;article sur Prometheus et Grafana&lt;/a&gt;, vous m’avez peut être vu teaser cet article.&lt;/p&gt;
&lt;p&gt;En effet, j’avais mis une capture d’écran d’un dashboard Grafana avec des métriques provenant de mon cluster Proxmox VE :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/11/grafana_prometheus_proxmox.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;On fait du LXC à fond ici !caption&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="petit-récap"&gt;Petit récap’
&lt;/h2&gt;&lt;p&gt;Pour rappel, &lt;a class="link" href="https://blog.zwindler.fr/2019/11/12/tutoriel-installer-prometheus-grafana-sans-docker/" &gt;dans le tuto précédent&lt;/a&gt;, on avait installé le couple Grafana + Prometheus sur une machine virtuelle (ou physique peu importe), et pas dans un container (comme le préconise la plupart des billets de blogs que j’ai pu lire). Maintenant vous comprenez surement mieux pourquoi ;-).&lt;/p&gt;
&lt;p&gt;Pour alimenter notre Prometheus, on va donc vouloir le donner à manger. Et quoi de mieux dans une infrastructure &lt;em&gt;non containerisée&lt;/em&gt; que les métriques de l’hyperviseur ?&lt;/p&gt;
&lt;h2 id="prometheus-pve-exporter"&gt;prometheus-pve-exporter
&lt;/h2&gt;&lt;p&gt;On est plutôt gâté avec Proxmox VE, car les métriques pertinentes sont assez nombreuses et surtout exposées par API.&lt;/p&gt;
&lt;p&gt;S’il n’existe pas d’&lt;em&gt;exporter officiel&lt;/em&gt;, il existe néanmoins des implémentations Open Source réalisées par de gentils contributeurs.&lt;/p&gt;
&lt;p&gt;La plus utilisée semble être celle de &lt;strong&gt;znerol&lt;/strong&gt;, qui a en plus l’avantage d’être la base utilisée dans un dashboard sur le site de Grafana (on y reviendra). Dans la mesure du possible, j’essaye de rester sur les implémentations les plus couramment utilisées. Sauf exception, ça permet d’éviter d’être le seul à avoir un bug. Je vous ai mis une autre implémentation dans les sources en bas d’article, que je n’ai pas testée.&lt;/p&gt;
&lt;p&gt;Les sources et la documentation sont disponibles sur Github à l’adresse suivante : &lt;a class="link" href="https://github.com/znerol/prometheus-pve-exporter" target="_blank" rel="noopener"
&gt;github.com/znerol/prometheus-pve-exporter&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="prérequis"&gt;Prérequis
&lt;/h2&gt;&lt;p&gt;Dans tous les cas, on va devoir créer un utilisateur dans Proxmox VE, a qui on va autoriser l’accès aux métriques depuis l’API. C’est cet utilisateur qu’utilisera notre &lt;em&gt;exporter&lt;/em&gt; pour se connecter à PVE, récupérer les métriques et enfin les exposer au format &lt;a class="link" href="https://openmetrics.io/" target="_blank" rel="noopener"
&gt;OpenMetrics&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Sur un des serveurs PVE du cluster :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;créer un groupe&lt;/li&gt;
&lt;li&gt;ajouter le rôle PVEAuditor au groupe&lt;/li&gt;
&lt;li&gt;créer un utilisateur&lt;/li&gt;
&lt;li&gt;lui ajouter le groupe, puis un mot de passe&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;pveum groupadd monitoring -comment &amp;#39;Monitoring group&amp;#39;
pveum aclmod / -group monitoring -role PVEAuditor
pveum useradd pve_exporter@pve
pveum usermod pve_exporter@pve -group monitoring
pveum passwd pve_exporter@pve
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="installation-de-lexporter"&gt;Installation de l’&lt;em&gt;exporter&lt;/em&gt;
&lt;/h2&gt;&lt;p&gt;A partir de là, on peut installer l’&lt;em&gt;exporter&lt;/em&gt; sur nos serveurs PVE. L’avantage du cet &lt;em&gt;exporter&lt;/em&gt; c’est qu’il sait gérer le cluster. Je veux dire par là qu’avec un seul &lt;em&gt;exporter&lt;/em&gt; vous allez pouvoir collecter l’ensemble des métriques de l’ensemble de vos machines du cluster (containers, VMs, stockage, hyperviseurs, &amp;hellip;).&lt;/p&gt;
&lt;p&gt;En théorie, il n’est donc nécessaire de l’installer que sur une machine. Pour autant, je vous conseille quand même d’installer un &lt;em&gt;exporter&lt;/em&gt; par serveur. Dans les faits, cela vous évitera de perdre toute collecte de données de supervision en cas de panne du seul serveur portant l’&lt;em&gt;exporter&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Sur vos serveurs PVE, lancer les commandes suivantes :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;apt-get install python-pip
pip install prometheus-pve-exporter
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Cette implémentation utilise le gestionnaire de paquet de Python, pip.&lt;/p&gt;
&lt;p&gt;On va ensuite créer un fichier de configuration qui va contenir les informations de connexion à notre PVE :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mkdir -p /usr/share/pve_exporter/
cat &amp;gt; /usr/share/pve_exporter/pve_exporter.yml &amp;lt;&amp;lt; EOF
default:
user: pve_exporter@pve
password: myawesomepassword
verify_ssl: false
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;Note : remplacer &lt;strong&gt;myawesomepassword&lt;/strong&gt; par un mot de passe vraiment cool.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Temporairement, vous pouvez lancer le binaire manuellement pour voir si ça fonctionne correctement :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;/usr/local/bin/pve_exporter /usr/share/pve_exporter/pve_exporter.yml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Si tout s’est bien passé, on va maintenant créer un script de démarrage &lt;em&gt;systemd&lt;/em&gt; pour que notre exporter se démarre tout seul avec l’hyperviseur :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;gt; /etc/systemd/system/pve_exporter.service &amp;lt;&amp;lt; EOF
[Unit]
Description=Proxmox VE Prometheus Exporter
After=network.target
Wants=network.target
[Service]
Restart=on-failure
WorkingDirectory=/usr/share/pve_exporter
ExecStart=/usr/local/bin/pve_exporter /usr/share/pve_exporter/pve_exporter.yml 9221 192.168.1.1
[Install]
WantedBy=multi-user.target
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;Note : remplacer 192.168.1.1 par l’adresse IP de votre serveur Proxmox VE (aussi accessible par votre serveur Prometheus)&lt;/em&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;systemctl daemon-reload
systemctl enable pve_exporter
systemctl start pve_exporter
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="la-collecte"&gt;La collecte
&lt;/h2&gt;&lt;p&gt;On a maintenant un endpoint au format OpenMetrics qui peut être collecté par Prometheus. Cool !!&lt;/p&gt;
&lt;p&gt;Le but du jeu va être maintenant d’informer Prometheus qu’il doit scrapper notre &lt;em&gt;exporter&lt;/em&gt;. On va faire ça en ajoutant la configuration suivante à notre serveur Prometheus (puis le redémarrer) :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vi /usr/share/prometheus/prometheus.yml
[...]
scrape_configs:
[...]
- job_name: &amp;#39;pve&amp;#39;
static_configs:
- targets:
- 192.168.1.1:9221 # Proxmox VE node with PVE exporter.
- 192.168.1.2:9221 # Proxmox VE node with PVE exporter.
metrics_path: /pve
params:
module: [default]
systemctl restart prometheus.service
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;Note : remplacer les IPs par les adresses IP de vos exporters sur vos serveurs PVE.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="visualiser-tout-ça"&gt;Visualiser tout ça
&lt;/h2&gt;&lt;p&gt;Dernière étape avant d’aller prendre un café, afficher tout ça dans un dashboard. Là ça aurait pu être trivial mais j’ai du bidouiller (un tout petit peu).&lt;/p&gt;
&lt;p&gt;Je l’ai dis au début de l’article, un des avantages de cet &lt;em&gt;exporter&lt;/em&gt;, c’est que quelqu’un a pris la peine de faire un dashboard dans Grafana qui affiche déjà tout sans qu’on ait besoin de faire quoique ce soit.&lt;/p&gt;
&lt;p&gt;On peut donc l’installer juste en copiant l’URL ou l’ID dans notre Grafana &lt;a class="link" href="https://grafana.com/grafana/dashboards/10347" target="_blank" rel="noopener"
&gt;10347&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/12/grafana_add_dashboard.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/12/grafana_add_dashboard2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Trivial !&lt;/p&gt;
&lt;p&gt;La seule petite difficulté, c’est que ce Dashboard gère mal le clustering. Plus particulièrement, il n’aime pas qu’un meme exporter remonte les données de plusieurs nodes, ce qui est dommage pour un cluster.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/12/grafana_add_dashboard_ko.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;J’ai donc tweaké le Dashboard en y ajoutant une variable &amp;ldquo;node&amp;rdquo;, permettant de sélectionner les métriques du node qu’on veut (uniquement).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2022/04/proxmox_grafana_variable.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Enfin, j&amp;rsquo;ai modifié les graphiques concernés en ajoutant un filtre de type &lt;code&gt;id=&amp;quot;node/$node&amp;quot;&lt;/code&gt; utilisant cette variable dans la requête PromQL.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/12/grafana_add_node_in_promql.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Vous avez maintenant un Dashboard qui remonte les métriques de vos serveurs, stockages, vms et containers dans Proxmox VE ! A vous l’observabilité !&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources
&lt;/h2&gt;&lt;p&gt;Une autre implémentation : &lt;a class="link" href="https://github.com/wakeful/pve_exporter" target="_blank" rel="noopener"
&gt;wakeful/pve_exporter&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>