[Tutoriel] Installer Prometheus/Grafana sans Docker

Posted by

Prometheus et Grafana dans Docker, quelle horreur ?

Je sais que certains d’entre vous ne sont pas super fan (euphémisme) de la technologique containers Docker (et je ne parle même pas de Kubernetes, cf Concerning Kubernetes). Pour autant, pas besoin de Docker pour avoir besoin du couple Prometheus / Grafana.

Prometheus a plein de features sympas (notamment l’auto discovery, le langage de requêtage PromQL, …). De son côté, Grafana est vraiment top pour ce qui est visualisation rapide provenant de plusieurs sources de données.

Peut être même que vous avez du Docker (ou même Kubernetes) mais que vous n’avez pas envie d’intégrer la supervision dans votre infra de compute.

Il y a plein de bonnes raisons pour ça, comme ne pas vouloir héberger la supervision sur l’infra qu’elle est censé surveillée ou encore pour des problématiques de performances, …

Avec Docker, lancer Prometheus ou Grafana se fait en une ligne de commande, c’est pour ça qu’on voit cette manière de faire partout. Sans Docker, c’est nécessairement un poil plus compliqué (mais à peine) à faire. Et c’est pourquoi je fais ce petit tuto rapide.

Prometheus

Dans ce tuto, on va partir des sources. Pour Prometheus, vous pourrez trouver un raccourci vers la dernière version sur le site officiel.

On télécharge cette version et on configure un utilisateur exécuter Prometheus

wget https://github.com/prometheus/prometheus/releases/download/v2.13.1/prometheus-2.13.1.linux-amd64.tar.gz
tar xzf prometheus-2.13.1.linux-amd64.tar.gz
sudo mv prometheus-2.13.1.linux-amd64/ /usr/share/prometheus
sudo useradd -u 3434 -d /usr/share/prometheus -s /bin/false prometheus
sudo mkdir -p /var/lib/prometheus/data
sudo chown prometheus:prometheus /var/lib/prometheus/data
sudo chown -R prometheus:prometheus /usr/share/prometheus

Une fois que c’est fait, le mieux c’est de tester que Prometheus "fonctionne" correctement en le lançant à la main pour voir si le logiciel se lance bien, avec la configuration par défaut.

/usr/share/prometheus/prometheus --config.file=/usr/share/prometheus/prometheus.yml
[...]
level=info ts=2019-09-20T14:56:18.244Z caller=main.go:768 msg="Completed loading of configuration file" filename=/usr/share/prometheus/prometheus.yml
level=info ts=2019-09-20T14:56:18.244Z caller=main.go:623 msg="Server is ready to receive web requests."

Ici tout s’est bien passé, on peut donc le couper (Ctrl-C) et créer un script SystemD pour pouvoir le démarrer automatiquement avec le serveur.

sudo vi /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network-online.target
[Service]
User=prometheus
Restart=on-failure
WorkingDirectory=/usr/share/prometheus
ExecStart=/usr/share/prometheus/prometheus --config.file=/usr/share/prometheus/prometheus.yml
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus
sudo systemctl status prometheus

Grafana

Maintenant que c’est fait, on passe à Grafana. Vous allez voir, ça va aussi vite.

Dans le cas de Grafana, la méthode mise en avant sur le site officiel est l’utilisation des packages systèmes (".deb" pour Debian ou Ubuntu, RPM pour CentOS). Par souci de cohérence dans l’article, je ne vais pas utiliser le .deb et installer le binaire précompilé pour l’installer de la même manière que Prometheus. Cependant, le .deb aurait très bien fait l’affaire (et ça ira plus vite si vous êtes pressés).

On télécharge donc la version précompilée, on positionne les bons dossiers/binaires/fichiers de config aux bons endroits.

wget https://dl.grafana.com/oss/release/grafana-6.4.4.linux-amd64.tar.gz
tar -xzf grafana-6.4.4.linux-amd64.tar.gz
sudo useradd -d /usr/share/grafana -s /bin/false grafana
sudo mkdir -p /var/lib/grafana/plugins /etc/grafana /var/log/grafana
sudo chown -R grafana:grafana /var/lib/grafana
sudo mv grafana-6.4.4/ /usr/share/grafana
sudo cp /usr/share/grafana/bin/grafana-server /usr/sbin/
sudo cp /usr/share/grafana/conf/sample.ini /etc/grafana/grafana.ini

On configure systemD puis on démarre le service.

sudo vi /etc/default/grafana-server
GRAFANA_USER=grafana
GRAFANA_GROUP=grafana
GRAFANA_HOME=/usr/share/grafana
LOG_DIR=/var/log/grafana
DATA_DIR=/var/lib/grafana
MAX_OPEN_FILES=10000
CONF_DIR=/etc/grafana
CONF_FILE=/etc/grafana/grafana.ini
RESTART_ON_UPGRADE=true
PLUGINS_DIR=/var/lib/grafana/plugins
PROVISIONING_CFG_DIR=/etc/grafana/provisioning
PID_FILE_DIR=/var/run/grafana
sudo vi /etc/systemd/system/multi-user.target.wants/grafana-server.service
[Unit]
Description=Grafana instance
Documentation=http://docs.grafana.org
Wants=network-online.target
After=network-online.target
After=postgresql.service mariadb.service mysql.service
[Service]
EnvironmentFile=/etc/default/grafana-server
User=grafana
Group=grafana
Type=simple
Restart=on-failure
WorkingDirectory=/usr/share/grafana
RuntimeDirectory=grafana
RuntimeDirectoryMode=0750
ExecStart=/usr/sbin/grafana-server                                                  \
--config=${CONF_FILE}                                   \
--pidfile=${PID_FILE_DIR}/grafana-server.pid            \
cfg:default.paths.logs=${LOG_DIR}                       \
cfg:default.paths.data=${DATA_DIR}                      \
cfg:default.paths.plugins=${PLUGINS_DIR}                \
cfg:default.paths.provisioning=${PROVISIONING_CFG_DIR}
LimitNOFILE=10000
TimeoutStopSec=20
UMask=0027
[Install]
WantedBy=multi-user.target
systemctl start grafana-server
systemctl enable grafana-server
systemctl status grafana-server
[...]
Nov 10 15:40:17 nostromo grafana-server[14606]: t=2019-11-10T15:40:17+0000 lvl=info msg="Initializing Stream Manager"
Nov 10 15:40:17 nostromo grafana-server[14606]: t=2019-11-10T15:40:17+0000 lvl=info msg="HTTP Server Listen" logger=http.server address=0.0.0.0:3000 protocol

On cable le tout ensemble

Vous avez vu, je vous avais pas menti, c’est assez simple en fait.

Maintenant que Prometheus et Grafana tournent, on va les coufigurer pour qu’ils parlent ensemble.

Tout se passe sur l’interface d’administration de Grafana, qui devrait maintenant être accessible à l’URL http://<IP_de_votre_serveur>:3000

Authentifiez vous en tant qu’administrateur. Par défaut à la première instanciation, seul un compte "admin" est créé, avec le mot de passe hautement sécurisé "admin". Heureusement on change ça tout de suite…

La dernière étape consiste à simplement se rendre dans la partie administration de Grafana, puis de créer un source de données.

Il existe de nombreuses sources de données différentes. Nous dans notre cas, c’est bien une source de type Prometheus qu’on veut créer.

Renseignez simplement l’URL d’accès à Prometheus (par défaut http://localhost:9090 dans ce tutoriel) et sauvez.

A partir de maintenant, vous avez un couple Prometheus / Grafana fonctionnel. Vous allez pouvoir commencer à créer des Dashboard.

Enjoy !


Vous aimez ce blog ? Partagez-le avec vos amis !   Twitter Facebook Linkedin email

Vous pouvez également soutenir le blog financièrement :
Tipeee

12 comments

  1. Salut,
    l’install du server se passe sans problèmes dans la version que tu utilises ici (je viens de le tenter) mais ça foire lamentablement dans la dernière version. il y a un problème de création de fichier de log dans une arborescence (qui bien sur n’est pas indiquée sinon c pas drôle :
    ActiveQueryTracker msg= »Failed to create directory for logging active queries »

    du coup je vais tenter d’utiliser cette version 2.13.1 mais j’imagine que ayant déployé l’exporter en version supérieure : 2.23.0 ça va couiner un peu… et pour ne rien arranger, j’utilise tout ça pour progresser sur linux que je ne maitrise absolument pas (mais je me soigne). Du coup je deboggage euh c’est limité limité là :)

    1. Ah ? C’est fâcheux en effet.

      J’essayerai de voir ce qui coince, mais de mémoire, j’ai updaté il y a quelques temps de 2.13 à 2.18 ou 2.19 et ça fonctionnait toujours.

    2. Je viens de tester avec la 2.23.0 qui vient de sortir, ça fonctionne chez moi.

      L’erreur « failed to create directory for logging active queries », c’est pas pour créer un log, c’est le stockage persistant de ton prom (j’avoue que le message est bof clair)

      As tu bien vérifié les permissions sur le dossier de data, soit spécifié dans /usr/share/prometheus/prometheus.yml, soit par défaut /var/lib/prometheus/data comme dans mon exemple ?

      Si tu veux débug, tu peux aussi passer l’utilisateur en /bin/bash au lieu de /bin/false, et te connecter avec un sudo su prometheus, puis faire des cd et des touchs pour voir si tu as bien les bonnes permissions ou si ça coince quelque part.

      Dans tous les cas, avoir un prom en 2.13 et un exporter en 2.23 ne devrait pas poser de problème. Tout devrait être compatible dans que tu restes en 2.x

  2. Ah merci bien j’ai laissé passé tes réponses !

    je crois que je progresse en Linux car je comprends ce que tu m’as écris comme pistes de résolutions. Tu as tout à fait raison sur la compatibilité en tout cas. L’idée c’est que pour l’instant je me focalise sur le test de Proxmox VE car on va le prendre sur mes 2 projets en cours en tant qu’hyperviseur de prod. J’ai un temps limité (et des compétences encore plus pour l’instant ;) aussi j’ai tranché dans le vif (ah oui j’ai aussi un repo de taille limité pour ma machine de test et j’ai pas risqué de garder la version qui a foiré, mybad). Quand je reprendrais sur la dernière version, je revisiterais cela afin de te dire si ça à fonctionné et ainsi donner du grain à moudre à ceux qui veulent faire avancer le schmilblik, les autres lecteurs en détresse comme moi quoi ;). Merci pour tout le taf en tout cas !

    1. oups… en relisant mon message, je me rend compte en effet que je donne plein d’instructions techniques… déformation pro ;)

      Tant mieux si tu as compris, et n’hésites pas à re-commenter si tu as besoin de plus d’infos plus tard

  3. Bonsoir,

    Cela partait bien pour une fois, pas d’erreur dans un tuto linux c’est rare :-D :-D

    Mais :
    systemctl start grafana-server
    Failed to start grafana-server.service: Unit grafana-server.service not found.

    Et comme mes compétences Linux sont ultra limité et bien je ne sais trop quoi faire

    1. Bonjour,

      Cela partait bien pour une fois, un commentaire de quelqu’un qui n’est pas à l’aise avec Linux mais qui demande poliment de l’aide.

      Mais le « pas d’erreur dans un tuto linux c’est rare :-D :-D » était de trop ;) ;)

      Je veux bien comprendre la tentative d’humour (et les smiley) pour détendre l’atmosphère. Mais il y a un vrai problème, hérité des années Microsoft avec l’open source bashing systémique des vendeurs de logiciels propriétaires. J’en parle dans mon talk « L’open source a-t-il de beaux jours devant lui« , si jamais cela vous intéresse de comprendre pourquoi ça m’ennuie.

      comme je ne suis pas rancunier, pour votre problème, le message d’erreur indique qu’il ne trouve pas le fichier grafana-server.service qui décrit le service systemd de notre Grafana. Donc à mon avis, c’est le fichier /etc/systemd/system/multi-user.target.wants/grafana-server.service qui n’existe pas sur votre système.

  4. Bonjour

    Oui oui c’était de l’humour. Je vous remercie du reste pour ce tuto.
    Alors si le fichier existe bien puisque sauf erreur de ma part on le crée juste au dessus et on ajoute les infos qui sont indiqués

    J’ai revérifier le fichier hier au soir, je me suis même demandé si les lignes avec à la fin le / ne formait pas qu’une seule ligne au final. J’ai fait la modif mais idem impossible de start Grafana.
    J’ai delete la VM Debian et je vais reprendre depuis le début du coup

    A suivre donc

    1. Bon ben idem avec une machine propre et tout fraichement installé
      Le fichier est bien présent
      Il est renseigné avec les infos du tuto

      mais toujours le meme message au moment du start de Grafana

  5. Re Bonjour
    Resultat identique en repartant d’une machine Debian vierge, le message est le même

    Le fichier est bien présent
    root@serveurtest:/home/usertest# ls /etc/systemd/system/multi-user.target.wants/
    console-setup.service grafana-server.service open-vm-tools.service remote-fs.target ssh.service
    cron.service networking.service prometheus.service rsyslog.service

    M’en vais aussi chercher sur Google du coup

    1. Et bien installation totalement différente mais Grafana et up and running en lien avec Prometheus

      apt-get install -y apt-transport-https
      apt-get install -y software-properties-common wget

      wget -q -O – https://packages.grafana.com/gpg.key | apt-key add –

      echo « deb https://packages.grafana.com/oss/deb stable main » | tee -a /etc/apt/sources.list.d/grafana.list

      apt update
      apt install grafana

      systemctl daemon-reload
      systemctl start grafana-server
      systemctl enable grafana-server

  6. Hum.
    Il n’y a aucune raison pour que ça fasse ça. Le tuto n’a pas été fait sur une debian mais cette partie de la procédure devrait être strictement identique. Je testerai pour essayer de comprendre pourquoi ça ne marche pas.

Leave a Reply

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.