Mise en place de la récupération de statistiques sur serveurs distants, et les afficher dans Grafana

Durant un projet, il a été nécessaire que je récupère des données de statistique sur un serveur distant, et de les afficher dans un tableau de bord dans mon Grafana.

Au lieu de stocker des informations système, tel que l’utilisation processeur ou le réseau, il m’est nécessaire de stocker et afficher des résultats de requête SQL dans une base PostgreSQL. C’est pourquoi ce tutoriel indique comment faire des requêtes SQL

Je pars du principe que Grafana est déjà installé, et fonctionnel.

Si tel n’est pas le cas, la procédure d’installation se trouve sur dans la documentation de Grafana
Cette installation est réalisée sous Debian 12, sur d’autres distrib les commandes sont à adapter en fonction du gestionnaire de daemon et du package manager.

Installation de InfluxDB

Le stockage des données sera géré par un serveur InfluxDB, installé sur le même serveur que Grafana. Si un serveur est dédié pour cette instance, il faudra simplement adapter la source de données dans Grafana.

Récupérer la clé pour ajouter le repos d’InfluxDB

wget -q https://repos.influxdata.com/influxdata-archive_compat.key

echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null

echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list

Mettre à jour le cache des repos et lancer l’installation

sudo apt-get update && sudo apt-get install influxdb

Démarrer le service InfluxDB

sudo service influxdb start

Configuration de la base de données

Maintenant que le service est installé, il ne reste plus qu’à le configurer

Vous êtes libre de nommer la base de données comme vous le souhaitez, il faudra juste adapter les commandes en fonction de vos choix

Se connecter à la ligne de commande de InfluxDB

influx

Créer la base de données qui accueillera les données

CREATE DATABASE telegraf

Et c’est tout

Si le serveur se trouve hors du réseau, il faudra configurer une redirection de port sur le port 8086 en TCP

Activer HTTPS et l’authentification sur InfluxDB

Si le serveur est publiquement accessible, il est mieux de le sécuriser en effectuant une communication par HTTPS.

Si vous n’en n’avez pas, vous pouvez utiliser un certificat Let’s Encrypt

sudo apt install certbot
sudo certbot certonly --standalone -d monserver.test.local
Si un certificat Let’s Encrypt est utilisé, il faut faire une copie dans un autre répertoire, car l’utilisateur InfluxDB ne peut pas y accéder
sudo mkdir /etc/influxdb/ssl

sudo cp /etc/letsencrypt/live/monserver.test.local/cert.pem /etc/influxdb/ssl/

sudo cp /etc/letsencrypt/live/monserver.test.local/privkey.pem /etc/influxdb/ssl/

sudo chown influxdb:influxdb /etc/influxdb/ssl/cert.pem /etc/influxdb/ssl/privkey.pem

editer ensuite le fichier /etc/influxdb/influxdb.conf, et décommenter et modifier en fonction les lignes ci-dessous

  enabled = true
  bind-address = ":8086"
  auth-enabled = false
  https-enabled = true
  https-certificate = "/chemin/au/certificat/influxdb.crt"
  https-private-key = "/chemin/au/certificat/influxdb.key"

redémarrer le service pour prendre en charge les certificats

sudo systemctl restart influxdb

Se connecter à la ligne de commande influx

influx -ssl
ajouter -unsafeSsl dans le cas ou le certificat est autosigné, ou que la connexion est faîte via localhost

Créer un compte administrateur

CREATE USER admin WITH PASSWORD 'superMotDePasse' WITH ALL PRIVILEGES

Créer un compte pour l’envoi de données depuis Telegraf

CREATE USER userTelegraf WITH PASSWORD 'autrePassword'
GRANT WRITE ON telegraf TO userTelegraf 

Créer un autre compte pour Grafana

Ce n’est pas obligatoire, mais vivement conseillé de séparer les logins
CREATE USER grafana WITH PASSWORD 'your_grafana_password'
GRANT READ ON telegraf TO grafana

Se déconnecter de la base de données et modifier la ligne ci-dessous dans le fichier de configuration /etc/influxdb/influxdb.conf:

auth-enabled = false
en
auth-enabled = true

Redémarrer ensuite le service

sudo systemctl restart influxdb
Pour se connecter, il faudra maintenant ajouter avec -username, et -password

Installation de Telegraf

Maintenant que la partie InfluxDB est configurée, il est maintenant temps de configurer du côté du serveur distant.

Installer le package Telegraf

curl -s https://repos.influxdata.com/influxdata-archive_compat.key > influxdata-archive_compat.key

echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null

echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list

sudo apt-get update && sudo apt-get install telegraf

Modifier le fichier /etc/telegraf/telegraf.conf, et ajouter (ou décommenter) les lignes ci-dessous:

[[outputs.influxdb]]
  urls = ["https://serveurtest.test.local:8086"]
  database = "telegraf"
  retention_policy = ""
  write_consistency = "any"
  timeout = "5s"
  username = "telegraf"
  password = "monSuperPassword"
  insecure_skip_verify = true
La dernière ligne n’est uniquement nécessaire dans le cas d’un certificat généré autosigné.

Ajouter le bloc de code ci-dessous pour connecter la base PostgreSQL, et exécuter les requêtes souhaitées

[[inputs.postgresql_extensible]]
  address = "host=localhost user=postgres dbname=database1"
  [[inputs.postgresql_extensible.query]]
    script="/etc/telegraf/db_stats.sql"

Créer le fichier SQL qui contiendra les requêtes SQL

sudo nano /etc/telegraf/db_stats.sql
Il est important de saisir des AS dans les requêtes SQL, sinon il y a trop de données qui remontent, et des noms de colonnes indigestes.
Ne saisir qu’une seule requête SQL par fichier, c’est une limitation du client PostgreSQL

Enfin, redémarrer le service Telegraf

sudo systemctl restart telegraf.service
Si des erreurs sont présente, il est possible de lancer la commande telegraf -debug pour obtenir les logs

Configurer la source de données dans Grafana

Se connecter à Grafana et ajouter une nouvelle source de données

Choisir « InfluxDB »

Saisir les informations pour se connecter à la base de données

Ne pas oublier de cocher « Skip TLS Verify » dans le cas d’un certificat autosigné

Si la connexion est fonctionnelle, le message ci-dessous s’affiche

Il ne reste plus qu’à ajouter les données collectées sur un dashboard