16/12/2024

Supervision

Installez Grafana et VictoriaMetrics pour superviser vos serveurs

I. Présentation

Dans ce tutoriel, nous allons apprendre à installer et configurer un serveur avec Grafana et VictoriaMetrics pour réaliser de la supervision de serveurs ! Dans un précédent tutoriel, je vous ai indiqué comment utiliser Grafana Cloud pour la supervision de vos serveurs. Cela étant, l'hébergement des données sont limitées aux US et la version gratuite ne permet pas de superviser plus de deux serveurs.

Toutefois, il ne faut pas oublier que ce que propose Grafana Cloud est avant tout une compilation d'outils open source tels que Prometheus, Grafana, Loki, etc. Il est donc tout à fait possible de monter son propre serveur de monitoring à l'aide de ces outils.

II. Les outils nécessaires

A. Grafana

Cet outil de visualisation n'est plus à présenter, il est en usage depuis un moment et se prête à plusieurs utilisations, allant de la supervision de flux réseau, monitoring de serveur et même suivi de la consommation de son compteur Linky ou les valeurs des cryptomonnaies !

Cet outil s'appuie sur des sources de données qui peuvent être d'autres outils open source comme InfluxDB ou encore Prometheus. Son système de requêtes intégré permet de parser les données récoltées et de les visualiser avec tout un tas de possibilités (histogrammes, courbes, camemberts, etc.) et de créer un tableau de bord avec les données importantes que nous aurons décidé d'afficher, ni plus, ni moins.

B. VictoriaMetrics

Prometheus à un défaut : le stockage de données importantes et à long terme. VictoriaMetrics vient combler ce manque. Il s'agit d'une base de données de séries temporelles de haute performance qui est conçue pour traiter de grandes quantités de données rapidement et efficacement. Elle est optimisée pour travailler avec des métriques et fournit un certain nombre de fonctionnalités qui la rendent bien adaptée au stockage et à l'analyse de données de séries temporelles.

Grâce à cela, nous allons pouvoir avoir un stockage sur une longue période, nous permettant d'analyser les données sur des plages plus longues. Le stockage est aussi optimisé, il utilise trois fois moins de place que Prometheus. Plusieurs tests indiquent aussi que les performances, notamment au niveau RAM sont meilleures, mais n'ayant jamais fait de benchmark, je ne peux l'affirmer.

La bonne nouvelle, c'est que VictoriaMetrics est compatible avec le format de Prometheus et peut donc être ajoutée en tant que source de données dans Grafana!

C. Grafana Agent

Dans le précédent tutoriel, je vous avais présenté cet outil qui permet de collecter automatiquement les métriques sur un serveur et de les envoyer à une instance Prometheus qui était hébergée dans le cloud. Nous allons réutiliser le même agent, mais cette fois-ci nous enverrons les métriques sur notre propre serveur.

III. Installation

Note : toutes les étapes qui vont suivre ont été réalisées sur Debian 11

Tout d'abord et comme d'habitude, une petite mise à jour de mon serveur tout neuf avant l'installation des paquets :

apt-get update && apt-get upgrade -y

Bien, maintenant, installons Grafana. Commençons par installer les outils nécessaires à l'ajout des dépôts :

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

Ajoutons la clé des dépôts :

wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key

Installons ensuite les dépôts :

echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | tee -a /etc/apt/sources.list.d/grafana.list

Il ne nous reste plus qu'à faire une mise à jour des paquets et à procéder à l'installation :

apt-get update && apt-get install -y grafana

Il faut maintenant démarrer le démon Grafana et faire en sorte qu'il démarre automatiquement :

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

Une fois l'installation terminée, vous devriez pouvoir vous connecter à l'interface web de Grafana à l'adresse http://ip_grafana:3000. Le mot de passe par défaut est "admin/admin" il faudra le changer à la première connexion.

Notre serveur de visualisation est maintenant prêt :

Installer un serveur Grafana

Bien, maintenant, installons VictoriaMetrics :

apt-get install -y victoria-metrics

Pour parfaire notre installation, nous allons modifier le comportement de VictoriaMetrics au démarrage. Pour cela, il faut modifier le fichier de systemd qui se trouve dans "/lib/systemd" :

nano /lib/systemd/system/victoria-metrics.service

Pour ma part, voici à quoi il ressemble :

[Unit]
Description=High-performance, cost-effective and scalable time series database, long-term remote storage for Prometheus
Documentation=https://victoriametrics.github.io/
After=network.target

[Service]
Type=simple
User=_victoria-metrics
LimitNOFILE=65536
LimitNPROC=32000
StartLimitBurst=5
StartLimitInterval=0
Restart=on-failure
RestartSec=1
EnvironmentFile=/etc/default/victoria-metrics
ExecStart=/usr/bin/victoria-metrics $ARGS

[Install]
WantedBy=multi-user.target

Je vais rajouter des arguments au lancement du programme qui vont modifier son comportement par défaut :

ExecStart=/usr/bin/victoria-metrics \
-storageDataPath=/var/lib/victoria-metrics-data \
-httpListenAddr=0.0.0.0:8428 \
-retentionPeriod=1 \
$ARGS \

Les explications :

  • ExecStart : le lieu où est stocké le fichier binaire. Ne pas le modifier sauf si vous avez installé VM via les sources
  • storageDataPath : le chemin du dossier de stockage, si vous ne l'avez pas crée à cet endroit, modifiez-le en conséquence
  • httpListenAddress : l'adresse et le port d'écoute. Comme je veux envoyer des métriques depuis un autre serveur, j'écoute depuis toute IP. Je laisse le port par défaut, bien entendu, il peut être changé.
  • retentionPeriod : comme son nom l'indique, la période de rétention des métriques. Cette valeur est donnée en mois donc ici, je conserve les données pendant 1 mois puis elles seront automatiquement supprimées, veillez donc à adapter ce nombre à votre usage. Je ne peux malheureusement pas vous donner une idée du volume à prévoir, mais 10Go me semble un minimum. Cela dépend en effet du nombre de serveurs monitorés et de ce que vous monitorez par serveur.
  • $ARGS : dans le cas où je souhaiterais lancer le service avec d'autres arguments, je laisse cette variable

Une fois les modifications apportées, enregistrez le fichier. Il faut recharger la configuration de systemd vu qu'on a modifié un fichier de lancement :

systemctl daemon-reload

Puis, relancez le programme :

systemctl restart victoria-metrics

Pour tester son bon fonctionnement, nous allons faire une requête sur le port 8424 avec cURL sur l'API, ce qui nous assurera la réception des métriques :

curl http://localhost:8428/api/v1/query -d 'query={job=~".*"}'

Si tout fonctionne bien, vous devriez avoir ceci comme résultat :

{"status":"success","data":{"resultType":"vector","result":[]}}

IV. Envoi des données

Notre "pile" est prête, il ne lui reste plus qu'à recevoir des données à ingurgiter!

Pour cela, sur chaque serveur que vous souhaitez monitorer, récupérez et installez l'agent Grafana, que vous pouvez trouver ici : GitHub - Agent Grafana

Je vais faire l’exemple sur une machine Windows, pour une Linux ce sera sensiblement la même chose, les champs devront être modifiés en conséquence.

Une fois l'agent installé, le fichier de configuration se trouve dans "C:\Program Files\Grafana Agent\agent-config.yaml". Nous allons le modifier pour nos besoins :

Tout d'abord, la dernière partie :

integrations:
   windows_exporter:
     enabled: true

C'est ici que nous allons déclarer notre serveur, il faut donc rajouter, juste après la dernière ligne : prometheus_remote_write suivi de l'URL, ce qui donne pour moi :

integrations:
  windows_exporter:
    enabled: true
  prometheus_remote_write:
  - url: http://192.168.152.129:8428/api/v1/write

Bien entendu, remplacez l'IP par celle de votre serveur.

Note : le langage utilisé ici est du YAML qui est TRÈS sensible à l'indentation. Respectez donc bien les alignements, sinon, le service ne démarrera pas!

Ensuite, nous allons dire ce que nous devons envoyer en début de fichier. Par défaut, il enverra tout ce qui est classifié en "Warning", si vous voulez un monitoring complet, il faut basculer en "info" mais attention, cela augmentera la quantité de logs!

server:
  log_level: info

Enregistrez le fichier et relancez le service Grafana Agent. Pour vérifier que cela fonctionne, relancez la commande précédente :

curl http://localhost:8428/api/v1/query -d 'query={job=~".*"}'

Le terminal devrait vous afficher tout un tas d'informations, signe que les métriques arrivent bien.

Pour un serveur Linux, le fichier de configuration est quasiment identique, pour l'exemple, voici le mien :

integrations:
  node_exporter:
    enabled: true
  prometheus_remote_write:
  - basic_auth:
  url: http://ip_serveur/api/v1/write
  windows_exporter:
    enabled: false
prometheus:
  configs:
  - name: integrations
  global:
    scrape_interval: 15s
  wal_directory: /tmp/grafana-agent-wal
server:
http_listen_port: 12345

V. Visualisation dans Grafana

Nous allons ajouter la source de données dans Grafana afin de pouvoir travailler avec les métriques. Pour cela, sur la page d'accueil, cliquez sur "Add your first data source" :

Il faut choisir le type, pour rappel, ici nous utilisons une base Prometheus. Après avoir cliqué, les champs suivants doivent être renseignés :

  • Name : le nom que vous souhaitez donner à votre source de données
  • URL : l'adresse de votre serveur VictoriaMetrics. Si comme moi, c'est sur la même machine que Grafana, alors ce sera "https://localhost:8428"

C'est tout ! Cliquez sur "Save & test" en bas de page, vous devriez avoir un message de réussite.

Note : il est possible de demander une authentification afin que la source des métriques soit vérifiée. Je ne le présente pas ici pour ne pas alourdir le tuto, je laisse le soin aux personnes désireuses de mettre cela en place de suivre la documentation.

Bien, maintenant, cliquez sur l’icône en forme de boussole à gauche (Explore), vous arriverez sur une page ressemblant à celle-ci :

Cliquez sur "Select Metrics", vous devriez voir apparaître les métriques qui ont été collectées. Pour cet essai, nous allons afficher windows_cs_hostname et le formatage en tables :

Cliquez sur le bouton "Run Query" en haut à droite de la fenêtre, vous devriez voir apparaître les données telles que le nom de votre machine et votre domaine le cas échéant.

Super, votre monitoring fonctionne !

VI. Dashboard

Grâce aux commandes de requêtes, vous pourrez construire votre propre tableau de bord. Mais rassurez-vous, si vous voulez quelque chose de directement prêt à l'emploi, j'ai ce qu'il vous faut!

En effet, les dashboards Grafana peuvent être exportés et comme nous utilisons la même configuration que Grafana Cloud ... nous pouvons y récupérer nos dashboards!

Note : Il y a tout de même un mais... En effet, sur Grafana Cloud, pour les hôtes Windows, nous utilisons en plus de Prometheus, Loki, qui permet de récupérer plus de logs, comme il n'est pas présent, nous ne pourrons pas utiliser le dashboard qui s’appelle "Windows logs".

Vous n'avez pas de compte Grafana Cloud ? Pas grave, je vous mets les dashboards à disposition :

Les fichiers sont en format JSON, vous pouvez les importer dans Grafana en cliquant sur l'icône à droite qui ressemble à ceci :

Cliquez sur "Import" puis sur "Import JSON" et sélectionnez le fichier.

Dans notre exemple, pour Windows, voici le résultat :

VI. Conclusion

Dans ce tutoriel, nous avons vu comment déployer une pile Grafana+VictoriaMetrics pour créer son serveur de monitoring auto-hébergé. Celui-ci peut évidemment se déployer sur un serveur Cloud pour un monitoring multi-site. Attention toutefois à la sécurité dans ce cas-là, car il vous faudra ouvrir un port d'entrée pour les métriques, et celles-ci transitent en clair !

Cet outil est vraiment puissant, vous pouvez voir le détail de chaque requête sur les dashboard afin de voir comment elles sont créées, à partir de là, vous pouvez construire vos propres requêtes pour un tableau de bord à votre image !

author avatar
Florian Duchemin Administrateur réseau et sécurité
Consultant indépendant, je suis spécialisé en réseau et sécurité. J'interviens pour du conseil ou de l'accompagnement. Je suis également formateur en centre et en entreprise, j'alterne donc entre utilisation et partage de mes connaissances!
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

8 commentaires sur “Installez Grafana et VictoriaMetrics pour superviser vos serveurs

  • Bonjour,

    Juste une petite remarque, éditer directement le fichier de service dans /lib/systemd n’est pas ce qu’il y a des plus propre surtout si c’est le fichier fourni par le paquet debian. En cas de mise à jour il y a un risque de le voir écraser. Systemd propose le mécanisme de drop-in qui permet de surcharger proprement un fichier de service ou autre systemd. Voir ici par exemple pour en savoir plus https://steveazz.xyz/micro/systemd-drop-in/

    Répondre
    • Bonjour Nadley,

      Merci pour cette précision, il est vrai que ce n’est pas très propre, ni très durable.

      Je vais modifier l’article en conséquence.

      Répondre
  • Bonjour,

    Malgré ma configuration identique
    serveur grafana Debian 11
    windows server 2022

    Le serveur grafana ne reçois aucune metrics (la commande curl fonctionne bien)
    les deux serveur ce ping bien

    mon agent :

    server:
    log_level: info
    metrics:
    wal_directory: C:\ProgramData\grafana-agent-wal
    global:
    scrape_interval: 1m
    configs:
    – name: integrations
    integrations:
    windows_exporter:
    enabled: true
    remote_write:
    – url: http://192.168.93.25:8428/api/v1/write

    merci bonne journée !

    Répondre
    • Bonjour nailil,

      Petite question : le trafic en port source 8428 est-il bien autorisé depuis le serveur windows?

      Bonne journée

      Répondre
  • bonjour
    mon debian ne trouve pas victoria-metrics, lorsque je fais la demande d’installation apt-get install victoria-metrics, j’ai comme message impossible de trouver le paquet victoria metrics

    Répondre
  • Hello, Merci pour ce beau tuto.
    Cepandant, je n’arrive pas à configurer l’envoi des log du client au serveur grafana.
    => la config pour linux est tronqué ?
    Car quand je copie/colle, grafana-agent ne fonctionne pas.

    Enfin, petite question d’architecture.
    C’est bien le client ( avec grafana-agent) qui envoie les données au serveur ?

    Dans ce cas, je comprend pas pourqoi dans grafana-agent il y a « http_listen_port: 12345 »
    et pourquoi le curl est censé fonctionner sur la machine « client » ?

    Bien cordialement,
    Bruno

    Répondre

Laisser un commentaire

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.