Machine:
Packages:
Ports
On va commencer par créer un utilisateur pour Prometheus et pour Node exporter. Le paramètre --no-create-home permet de ne pas créer de dossier /home, et on désactive le dossier avec --shell /usr/sbin/nologin.
sudo useradd --no-create-home --shell /usr/sbin/nologin prometheus
sudo useradd --no-create-home --shell /bin/false node_exporter
On crée les dossier pour Prometheus
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
On donne les droits à l'utilisateur prometheus pour être sûr que l'utilisateur ait bien accès aux dossiers
sudo chown prometheus:prometheus /etc/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus
Node_Exporter permet de collecter les métriques de la VM et de les renvoyer vers le Prometheus
On télécharge Node_Exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz
On dézippe le tar.gz
tar xvf node_exporter-1.6.0.linux-amd64.tar.gz
On copie le fichier binaire /usr/local/bin et on donne les droits à l'utilisateur créé précédemment
sudo cp node_exporter-1.6.0.linux-amd64/node_exporter /usr/local/bin
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
On supprime les fichiers dont nous n'avons plus besoin
rm -rf node_exporter-1.6.0.linux-amd64.tar.gz node_exporter-1.6.0.linux-amd64
Pour démarrer Node_Exporter à chaque boot, nous allons créer un fichier systemd.
nano /etc/systemd/system/node_exporter.service
Copier les lignes suivantes dans le fichier et sauvegarder
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
On recharge systemd pour prendre en compte le nouveau service
sudo systemctl daemon-reload
On démarre node_exporter avec la commande suivante
sudo systemctl start node_exporter
On vérifie que le service a bien démarré
sudo systemctl status node_exporter
Vous devriez voir quelque chose comme ceci, avec active (running)
● node_exporter.service - Node Exporter
Loaded: loaded (/etc/systemd/system/node_exporter.service; disabled; vendor preset: enabled)
Active: active (running) since Mon 2018-06-25 11:47:06 UTC; 4s ago
Main PID: 1719 (node_exporter)
CGroup: /system.slice/node_exporter.service
└─1719 /usr/local/bin/node_exporter
Si tout fonctionne, on active Node_Exporter pour le démarrer à chaque boot
sudo systemctl enable node_exporter
On télécharge la dernière version de Prometheus.
sudo apt-get update && apt-get upgrade
wget https://github.com/prometheus/prometheus/releases/download/v2.44.0/prometheus-2.44.0.linux-386.tar.gz
tar xfz prometheus-*.tar.gz
cd prometheus-*
On copie les fichiers vers le dossier /usr/local/bin/:
sudo cp ./prometheus /usr/local/bin/
sudo cp ./promtool /usr/local/bin/
On donne les droits à l'utilisateur prometheus précédemment créé
sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool
On copie les dossiers consoles et console_libraries vers /etc/prometheus:
sudo cp -r ./consoles /etc/prometheus
sudo cp -r ./console_libraries /etc/prometheus
On donne les droits à l'utilisateur prometheus précédemment crée
sudo chown -R prometheus:prometheus /etc/prometheus/consoles
sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries
On supprime les fichiers dont nous n'avons plus besoin
cd .. && rm -rf prometheus-*
Avant d'utiliser Prometheus, nous avons besoin de créer une configuration. Nous allons donc créer le fichier de configuration prometheus.yml
Le ficher de configuration de Prometheus est écrit en YAML, qui interdit l'utilisation de tabulations. Si le fichier est mal formaté, Prometheus ne démarrera pas.
On édite le fichier prometheus.yml
sudo nano /etc/prometheus/prometheus.yml
Le fichier devrait ressembler à l'exemple suivant
global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files:
# - "first.rules"
# - "second.rules"
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
Dans la partie scrape_configs nous avons défini notre premier exporter, celui de Prometheus lui-même. Les paramètres static_configset targets détermine où l'exporter tourne. Le Prometheus tournant en local, on défini localhost et le port 9090.
Comme Prometheus exporte seulement ce qui est défini dans la partie scrape_configs , il faut ajouter Node_Exporter, comme nous avons fait pour Prometheus.
On ajoute la partie suivante en dessous du job Prometheus (attention aux espaces!)
- job_name: 'node_exporter'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9100']
Comme l'exporter est sur le même serveur que Prometheus, on utilise localhost avec le port par défaut de Node_Exporter: 9100.
On donne les droits à l'utilisateur prometheus
sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml
Le serveur Prometheus est prêt à démarrer !
Pour tester, on démarre Prometheus directement en ligne de commande avec la commande suivante:
sudo -u prometheus /usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/ --web.console.templates=/etc/prometheus/consoles --web.console.libraries=/etc/prometheus/console_libraries
Le serveur va vous afficher plusieurs message de status et comme quoi le serveur a bien démarré
level=info ts=2018-04-12T11:56:53.084000977Z caller=main.go:220 msg="Starting Prometheus" version="(version=2.2.1, branch=HEAD, revision=bc6058c81272a8d938c05e75607371284236aadc)"
level=info ts=2018-04-12T11:56:53.084463975Z caller=main.go:221 build_context="(go=go1.10, user=root@149e5b3f0829, date=20180314-14:15:45)"
level=info ts=2018-04-12T11:56:53.084632256Z caller=main.go:222 host_details="(Linux 4.4.127-mainline-rev1 #1 SMP Sun Apr 8 10:38:32 UTC 2018 x86_64 scw-041406 (none))"
level=info ts=2018-04-12T11:56:53.084797692Z caller=main.go:223 fd_limits="(soft=1024, hard=65536)"
level=info ts=2018-04-12T11:56:53.09190775Z caller=web.go:382 component=web msg="Start listening for connections" address=0.0.0.0:9090
level=info ts=2018-04-12T11:56:53.091908126Z caller=main.go:504 msg="Starting TSDB ..."
level=info ts=2018-04-12T11:56:53.102833743Z caller=main.go:514 msg="TSDB started"
level=info ts=2018-04-12T11:56:53.103343144Z caller=main.go:588 msg="Loading configuration file" filename=/etc/prometheus/prometheus.yml
level=info ts=2018-04-12T11:56:53.104047346Z caller=main.go:491 msg="Server is ready to receive web requests."
On ouvre le navigateur et on entre http://<ip>:9090 pour accéder à l'interface Web de Prometheus. Si tout fonctionne, on termine la tâche en pressant CTRL + C sur le serveur
Si vous obtenez une erreur lors du démarrage du serveur, vérifiez votre fichier de configuration. Le message vous dira ou est l'erreur (généralement, c'est le fichier qui est mal formaté)
Comme pour Node_Exporter, on crée un fichier systemd pour démarrer automatiquement Prometheus au boot
sudo nano /etc/systemd/system/prometheus.service
On copie les informations suivantes dans le fichier et on sauvegarde
[Unit]
Description=Prometheus Monitoring
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
On recharge systemd pour prendre en compte le nouveau service
sudo systemctl daemon-reload
On active Node_Exporter pour le démarrer à chaque boot
sudo systemctl enable prometheus
Et on démarre Prometheus !
sudo systemctl start prometheus
Le serveur Prometheus est prêt à être utilisé, et à récupérer toutes nos informations!
Pour pouvoir afficher proprement les informations récupérées par Prometheus, on va installer Grafana
1 . On installe Grafana sur le même serveur que le Prometheus
sudo apt-get install -y adduser libfontconfig1
wget https://dl.grafana.com/enterprise/release/grafana-enterprise_10.0.1_amd64.deb
sudo dpkg -i grafana-enterprise_10.0.1_amd64.deb
2 . On active le démarrage automatique de Grafana via systemd:
sudo systemctl daemon-reload && sudo systemctl enable grafana-server && sudo systemctl start grafana-server
Grafana est désormais lancé, nous pouvons y accéder via http://<ip>:3000. L'utilisateur et le mot de passe par défaut est admin / admin.
Nous allons donc créer la source de données Prometheus:

Le Grafana est désormais fonctionnel ! Nous allons voir comment exporter les informations de Proxmox et de Mikrotik
Pour exporter les informations de notre Proxmox, nous allons utiliser Pve_Exporter, disponible ici
On installe l’exporter directement sur le Proxmox
On crée d'abord un utilisateur dédié au monitoring
pveum groupadd monitoring -comment 'Monitoring group'
pveum aclmod / -group monitoring -role PVEAuditor
pveum useradd pve_exporter@pve
pveum usermod pve_exporter@pve -group monitoring
pveum passwd pve_exporter@pve
On installe l'exporter avec pip
pip install prometheus-pve-exporter
Si pip n'est pas installé sur votre Proxmox, vous pouvez l'installer avec apt-get install python3-pip
On crée le dossier Pve_Exporter et on crée le fichier de configuration
mkdir -p /usr/share/pve_exporter/
nano /usr/share/pve_exporter/pve_exporter.yml
Le fichier devrait ressembler à ceci:
default:
user: pve_exporter@pve
password: myawesomepassword
verify_ssl: false
On peut tester le fonctionnement de la configuration avec la commande suivante
/usr/local/bin/pve_exporter /usr/share/pve_exporter/pve_exporter.yml
Si tout va bien, le serveur nous affiche ceci:
root@pve1:~# /usr/local/bin/pve_exporter /usr/share/pve_exporter/pve_exporter.yml
* Running on http://localhost:9221/ (Press CTRL+C to quit)
On peut vérifier le fonctionnement via le navigateur, à l'ip suivante http://<ip-proxmox>:9221/pve?target=<ip-proxmox>
Une longue liste d'information va s'afficher, comme ceci:

Comme avec les autres exporter, nous allons créer un service systemd pour lancer l'exporter au boot
nano /etc/systemd/system/pve_exporter.service
La configuration ressemble à ceci:
[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 <ip-proxmox>
[Install]
WantedBy=multi-user.target
On active et on démarre le service:
systemctl enable pve_exporter
systemctl start pve_exporter
Ensuite, on configure le Prometheus pour récupérer les données. On ajoute donc un job à la configuration:
- job_name: 'pve'
scrape_interval: 5s
static_configs:
- targets: ['<ip.proxmox>:9221']
metrics_path: /pve
On reload systemd et on restart Prometheus
systemctl daemon-reload
systemctl restart prometheus
Pour afficher les données sur Grafana, utiliser ce dashboard