Première partie de la série de tutoriels consacrés au monitoring avec Prometheus, on va mettre en place la base, à savoir… bah justement Prometheus.
J’ai fait le choix de le mettre sur une VM à part. Plus tard, on trouvera son IP : IP.PROMETHEUS.
I – Installation
On télécharge,on décompresse et on copie les exécutables :
# wget https://github.com/prometheus/prometheus/releases/download/v2.11.1/prometheus-2.11.1.linux-amd64.tar.gz # tar xvf prometheus-2.11.1.linux-amd64.tar.gz # cd prometheus-2.11.1.linux-amd64/ # cp prometheus /usr/local/bin/ # cp promtool /usr/local/bin/
Ensuite, on va créer les répertoires qui vont bien et faire de la copie :
# mkdir /etc/prometheus # mkdir /var/lib/prometheus # cp -r consoles /etc/prometheus # cp -r console_libraries /etc/prometheus
Oui, c’est plus contraignant qu’un apt-get, mais c’est pas la mer à boire non plus 😉
II – Configuration
A – Prometheus
Pour configurer Prometheus, on va créer un fichier /etc/prometheus/prometheus.yml et y coller ce qui suit :
global: scrape_interval: 10s # Temps entre les releves evaluation_interval: 30s # Temps entre l'évaluation des regles (pour les alertes) alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093 rule_files: # - "rules/alert" scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'systems' static_configs: - targets: ['localhost:9100']
La configuration est assez simple à comprendre.
Le scrape_interval peut être modifié par la suite pour des jobs ou des targets précises.
Pour le moment, les alertes, on laisse de côté.
Au niveau scrap_configs, il faut comprendre qu’un job correspond à un type de relevé et pour lequel on donnes les targets concernées.
Le job « prometheus » sert pour les relevés propres au serveur Prometheus.
Le job que j’ai appelé « systems » (mais vous pourriez le nommer toto par exemple) récupère les métriques systemes fournies par Node Exporter( que l’on installera juste après)
De la lecture ici : https://github.com/prometheus/prometheus
Et pendant que j’y suis, pour les acharnés, il est bien sur possible de ne pas prendre les binaires mais de compiler soit même.
Mais bon, perso, je simplifie au maximum pour les tutos (pour laisser le temps à d’autres explications… 😉 )
B – Reverse proxy
Prometheus offre une interface web simple dont je parle plus bas. Je veux l’avoir à disposition sur une URL du genre : https://sous.mondomaine.fr/prometheus/
La configuration du reverse, dans Nginx, dans le block server sous.mondomaine.fr :
location /prometheus/ { proxy_pass http://IP.PROMETHEUS:9090/; proxy_http_version 1.1; }
Et on pensera à recharger Nginx.
III – Mise en place
A – A la mimine
Avant de mettre ça « au propre », on va tester :
# 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
Pour voir les flags disponible :
# prometheus -h
Bien sur, plus d’infos ici : https://github.com/prometheus/prometheus et la : https://prometheus.io
Maintenant, ne reste plus qu’à couper (CTRL-C) puis à faire un p’tit service pour ne pas avoir à faire de screen ou autres cochonneries.
B – En Service
On rajoute l’utilisateur dédié, puis on lui colle les droits :
# useradd --no-create-home --shell /bin/false prometheus # chown prometheus:prometheus /etc/prometheus/ -R # chown prometheus:prometheus /var/lib/prometheus/ -R # chown prometheus:prometheus /usr/local/bin/prometheus # chown prometheus:prometheus /usr/local/bin/promtool
Ensuite on va créer un fichier /etc/systemd/system/prometheus.service et y mettre :
[Unit] Description=Prometheus 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 \ --web.external-url=https://sous.mondomaine.fr/prometheus/ \ --web.enable-lifecycle \ --web.route-prefix="/" \ --storage.tsdb.retention.time 90d [Install] WantedBy=multi-user.target
Vous remarquerez que j’ajoute quatre flags :
web.enable-lifecycle permet de recharger la config de prometheus avec la commande :
# curl -X POST http://localhost:9090/-/reload
web.external-url indique quand à lui l’adresse utilisé pour accéder à l’interface depuis l’exterieur (du coup, pensez à le changer).
web.route-prefix= »/ » indique que les chemins en interne restent sur / et non pas sur /prometheus/.
storage.tsdb.retention.time 90d modifie le temps de rétention des données qui par défaut est de 15 jours.
Et pour terminer :
# systemctl daemon-reload # systemctl enable prometheus.service # service prometheus start
Et pour voir si c’est bon :
# service prometheus status
Impeccable, c’est en place très rapidement.
C – Un peu de ménage
On peut enlever ce qui peut l’être :
# cd # rm prometheus-2.11.1.linux-amd64 -r # rm prometheus-2.11.1.linux-amd64.tar.gz
III – Utilisation
Prometheus offre une interface web de base. Avant d’aller plus loin, voyons ce qu’elle propose et c’est donc sur l’adresse https://sous.mondomaine.fr/prometheus/.
Par défaut, on arrive sur l’éditeur de requêtes. Dans le champ, tapez « prom » et vous allez voir les métriques internes de Prometheus à disposition.
Par ex : prometheus_tsdb_head_chunks, puis exécutez et voyez le retour. Mais on reviendra sur les requêtes plus tard quand on installera Grafana.
Dans le menu Status puis Targets, on peut voir une sonde Ok et l’autre Down. La Down est celle de Node_Exporter, ce qui est logique vu qu’on ne l’a pas encore installé.
L’interface nous permettra aussi de voir les alertes, mais on en parlera plus tard.
IV – Conclusion
Voila, Prometheus est en place et vous le constatez, ce n’est pas compliqué.
Dans la partie suivante, nous allons mettre en place Node Explorer, le collecteur de métriques systèmes.
Envie de me soutenir et de me payer un café ? C’est sur la page Don !
Hello,
Superbe article. J’ajouterai qu’il serait intéressant d’y ajouter une authentification à Prom, afin d’éviter que n’importe qui y ait accès.
Bravo en tous les cas.
Nico
Bonjour Nico (promis, ce n’est pas moi 😉 et merci pour le compliment.
Yep, comme ce service est derrière un rev. proxy qui gère l’authentification en amont, je n’ai pas creusé plus loin l’authentification propre à Prometheus-Grafana, ce sera pour un futur nouvel article 😉
Bonjour
Merci, tout marche bien, j’aime bien suivre un tuto qui fonctionne avant de découvrir le produit plus en détail
Mais de rien 😉