Prometheus est une solution de surveillance flexible en développement depuis 2012. Le logiciel stocke toutes ses données dans une base de données chronologique et propose un modèle de données multidimensionnel et un langage de requête puissant pour générer des rapports sur les ressources surveillées.

Préparer le terrain

Pour exécuter Prometheus en toute sécurité sur notre serveur, nous devons créer un utilisateur pour Prometheus sans possibilité de connexion. Pour ce faire, nous utilisons le paramètre --no-create-homequi ignore la création d'un répertoire personnel et désactivons le shell avec --shell /usr/sbin/nologin.

useradd --no-create-home --shell /usr/sbin/nologin prometheus

Créez les dossiers requis pour stocker les fichiers binaires de Prometheus et ses fichiers de configuration :

mkdir /etc/prometheus
mkdir /var/lib/prometheus

Définissez la propriété de ces répertoires pour notre utilisateur prometheus, pour vous assurer que Prometheus peut accéder à ces dossiers :

chown prometheus:prometheus /etc/prometheus
chown prometheus:prometheus /var/lib/prometheus

Téléchargement et installation de Prometheus

Téléchargez et décompressez Prometheus :

apt-get update && apt-get upgrade
wget https://github.com/prometheus/prometheus/releases/download/v2.19.0/prometheus-2.19.0.linux-amd64.tar.gz
tar xfz prometheus-*.tar.gz
cd prometheus-*

Les deux fichiers binaires suivants se trouvent dans le répertoire:

  • Prometheus - Fichier binaire principal de Prometheus
  • promtool

Les deux dossiers suivants (qui contiennent l'interface Web, des exemples de fichiers de configuration et la licence) se trouvent dans le répertoire:

  • consoles
  • bibliothèques_consoles

Copiez les fichiers binaires dans le répertoire /usr/local/bin/ :

cp ./prometheus /usr/local/bin/
cp ./promtool /usr/local/bin/

Définissez la propriété de ces fichiers pour l'utilisateur prometheus précédemment créé :

chown prometheus:prometheus /usr/local/bin/prometheus
chown prometheus:prometheus /usr/local/bin/promtool

Copiez les répertoires consoleset console_librariesdans /etc/prometheus :

cp -r ./consoles /etc/prometheus
cp -r ./console_libraries /etc/prometheus

Définissez la propriété des deux dossiers, ainsi que de tous les fichiers qu'ils contiennent, à notre utilisateur prometheus :

chown -R prometheus:prometheus /etc/prometheus/consoles
chown -R prometheus:prometheus /etc/prometheus/console_libraries

Configurer Prometheus

Avant d'utiliser Prometheus, il a besoin d'une configuration de base. Ainsi, nous devons créer un fichier de configuration nomméprometheus.yml

Remarque: Le fichier de configuration de Prometheus est écrit en YAML ce qui interdit strictement l'utilisation des onglets. Si votre fichier n'est pas formaté correctement, Prometheus ne démarre pas. Soyez prudent lorsque vous le modifiez.

Ouvrez le fichier prometheus.ymldans un éditeur de texte :

nano /etc/prometheus/prometheus.yml

Le fichier de configuration de Prométhée est divisé en trois parties: global, rule_fileset scrape_configs.

Dans la partie global, nous pouvons trouver la configuration générale de Prometheus:

scrape_intervaldéfinit la fréquence à laquelle Prometheus élimine les cibles, evaluation_intervalcontrôle la fréquence à laquelle le logiciel évaluera les règles.

Les règles sont utilisées pour créer de nouvelles séries temporelles et pour générer des alertes.

Le bloc rule_files contient des informations sur l'emplacement des règles que nous voulons que le serveur Prometheus charge.

Le dernier bloc du fichier de configuration est nommé scape_configset contient les informations sur les ressources surveillées par Prometheus.

Notre fichier devrait ressembler à cet exemple :

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']

La valeur globale scrape_intervalest définie sur 15 secondes, ce qui est suffisant pour la plupart des cas d'utilisation.

Dans la partie scrape_configs nous avons défini notre premier exportateur. C'est Prometheus qui est surveillé. Comme nous voulons avoir des informations plus précises sur l'état de notre serveur Prometheus, nous avons réduit la scrape_intervalà 5 secondes pour ce travail.

Les paramètres static_configset targets déterminent l'emplacement d'exécution des exportateurs. Dans notre cas, il s'agit du même serveur, nous utilisons donc localhostle port 9090.

Pour toutes les informations sur la configuration de Prometheus, vous pouvez consulter la documentation de configuration .

Définissez la propriété du fichier pour notre utilisateur Prometheus :

chown prometheus:prometheus /etc/prometheus/prometheus.yml

Notre serveur Prometheus est prêt à fonctionner pour la première fois.

Exécution de Prometheus

Démarrez Prometheus directement à partir de la ligne de commande avec la commande suivante, qui exécute le fichier binaire en tant qu'utilisateur Prometheus :

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 commence à afficher plusieurs messages d'état et les informations que le serveur a démarrées :

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

Ouvrez votre navigateur et tapez http://IP.OF.YOUR.SERVER:9090pour accéder à l'interface Prometheus.

Si tout fonctionne, nous terminons la tâche en appuyant sur CTRL + Csur notre clavier.

Le serveur fonctionne maintenant, mais il ne peut pas encore être lancé automatiquement au démarrage.

Pour ce faire, nous devons créer un nouveau systemdfichier de configuration qui indiquera à votre système d'exploitation quels services doit-il lancer automatiquement pendant le processus de démarrage.

nano /etc/systemd/system/prometheus.service

Copiez les informations suivantes dans le fichier et enregistrez-le, puis quittez l'éditeur :

[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

Pour utiliser le nouveau service, rechargez systemd :

systemctl daemon-reload

Nous activons le service pour qu'il soit chargé automatiquement lors du démarrage:

systemctl enable prometheus

Démarrez Prometheus :

Installer Grafana

Installez Grafana sur notre instance qui interroge notre serveur Prometheus :

wget https://dl.grafana.com/oss/release/grafana_7.0.3_amd64.deb
dpkg -i grafana_7.0.3_amd64.deb

Activez le démarrage automatique de Grafana en systemd:

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

Grafana fonctionne maintenant et nous pouvons nous y connecter à http://your.server.ip:3000.

L'utilisateur et le mot de passe par défaut sont admin/ admin.

Vous devez maintenant créer une source de données Prometheus:

  • Cliquez sur le logo Grafana pour ouvrir la barre latérale.
  • Cliquez sur «Sources de données» dans la barre latérale.
  • Choisissez «Ajouter nouveau».
  • Sélectionnez «Prometheus» comme source de données.
  • Définissez l'URL du serveur Prometheus (dans notre cas: http://localhost:9090/)
  • Cliquez sur «Ajouter» pour tester la connexion et enregistrer la nouvelle source de données.

Vos paramètres devraient ressembler à ceci :


Vous êtes maintenant prêt à créer votre premier tableau de bord à partir des informations collectées par Prometheus. Vous pouvez également importer certains tableaux de bord à partir d'une collection de tableaux de bord partagés

Voici un exemple de tableau de bord qui utilise l'utilisation d'un exporteur de données :