20 avril 2024

Tuto monitoring Prometheus, partie I : Installation de Prometheus

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 !

4 réflexions sur « Tuto monitoring Prometheus, partie I : Installation de Prometheus »

  1. 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

    1. 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 😉

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *