monitoring-de-serveur-avec-collectd-influxdb-et-grafana

Parmis les nombreuses solutions de monitoring serveur je me suis penché il y a quelques mois sur une stack que j’utilise désormais : collectd + influxdb + grafana. Dans la suite de cet article je vous expliquerai l’utilité de chacune de ces briques, comment les installer et configurer, et bien entendu les lier ensemble pour obtenir un tableau de bord clair et précis de monitoring serveur.

Toutes les commandes ci-dessous ont été réalisées sous Debian 8 mais peuvent être adaptées pour la distribution de votre choix, les configurations des applicatifs entre eux ne devraient pas bouger.

1. Collectd

Collectd est un service Linux qui permet de collecter, transférer et sauvegarder des données de performance concernant un ordinateur et son équipement réseau.

C’est donc lui qui va récupérer toutes les données que l’on souhaite utiliser et visualiser graphiquement.

Son installation est simple :

sudo apt-get install collectd

Ensuite il faut le configurer : modifier le fichier /etc/collectd/collectd.conf pour activer ou désactiver les plugins souhaités . Pour cela il suffit de commenter ou décommenter les lignes « LoadPlugin xxxxx ». Dans mon cas par exemple j’ai activé nginx, cpu, df, disk, memory, mysql, memcached.

Il est également nécessaire d’activer le plugin « network » puisqu’il permettra la communication entre collectd et influxdb. Ainsi dans ce même fichier /etc/collectd/collectd.conf il faut insérer les lignes suivantes pour indiquer que InfluxDB est sur la même machine et écoute sur le port 25826 :

<Plugin network>
  Server "127.0.0.1" "25826"
</Plugin>

De la même manière vous pouvez vous aider de la documentation de Collectd pour configurer les autres plugins dont vous avez besoin.

Il faut alors ensuite redémarrer collectd pour prendre en compte ces modifications :

sudo service collectd restart

2. InfluxDB

InfluxDB est une base de données open source écrit en Go spécifiquement pour gérer des séries de données chronologiques. Ses points forts sont la haute disponibilité et la haute performance. C’est InfluxDB qui va sauvegarder les données de collectd pour ensuite être utilisées par Grafana.

Il est à noter que le fait qu’InfluxDB soit écrit en Go peut être une contrainte sur certains systèmes (compiler Go sur raspberry pi par exemple peut être très long).

Dans un premier temps il faut télécharger le package debian et l’installer :

wget https://s3.amazonaws.com/influxdb/influxdb_0.9.6_amd64.deb
sudo dpkg -i influxdb_0.9.6_amd64.deb

La configuration se retrouve alors dans /etc/influxdb/influxdb.conf, il faut la modifier pour activer l’écoute de collectd :

[collectd]
  enabled = true
  bind-address = ":25826"
  database = "collectd_db"
  typesdb = "/usr/share/collectd/types.db"

Par défaut une interface d’administration est activée sur le port 8083. Vous pouvez l’utiliser pour faire des tests et vérifier le bon fonctionnement de InfluxDB mais par sécurité je préfère la désactiver :

[admin]
  enabled = false
  bind-address = ":8083"
  https-enabled = false
  https-certificate = "/etc/ssl/influxdb.pem"

Il vous faut vérifier également que la configuration [http] est bien active sur le port 8086. Après redémarrage de InfluxDB (service influxdb restart) vous pouvez vous assurer du bon fonctionnement du service avec cette commande par exemple :

curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=collectd_db" --data-urlencode "q=SELECT value FROM disk_read"

Si vous recevez bien une réponse au format JSON avec des données alors c’est tout bon 😉

3. Grafana

Grafana est un « joli » tableau de bord permettant de visualiser différentes données via un navigateur web. Il est simple à utiliser, permet l’actualisation en temps réel ainsi que le déplacement dans le temps pour visualiser ses informations par dates (hier, aujourd’hui, les 6 dernières heures, etc).

3.1 Installation

Il est possible d’installer Grafana sous debian soit via package debian soit via dépôt APT (voir documentation). Je recommande fortement la version dépôt pour des questions de facilité et de maintenabilité :

  1. Ajouter la ligne suivante dans le fichier /etc/apt/sources.list :
deb https://packagecloud.io/grafana/stable/debian/ wheezy main

(mettre exactement cette ligne même si vous êtes sur une version de debian ou de ubuntu différente)

  1. Ajouter la clé afin de pouvoir installer des package signés :
curl https://packagecloud.io/gpg.key | sudo apt-key add -
  1. Mettre à jour les dépôts et installer Grafana :
sudo apt-get update
sudo apt-get install grafana

La configuration de Grafana se trouve alors dans /etc/grafana/grafana.ini. Le service se lance alors sur le port 3000 avec la commande  :

service grafana-server start

Il reste alors à configurer Grafana : ajouter des sources, créer des requêtes pour mettre en place des graphiques de supervision.

3.2 Configuration

Il est nécessaire dans un premier temps de définir notre base de données collectd_db dans InfluxDB comme une source de données dans Grafana, remplissez alors le formulaire de création de la sorte :

grafana-ajouter-data-source

Ensuite vous pouvez alors créer votre premier tableau de bord (dashboard) qui contiendra des lignes dans lesquelles vous pourrez mettre en place des graphiques (ce qu’on appelle des requêtes) pour visualiser vos données.

4. Exemples de requêtes

Vous trouverez ci-dessous des exemples de requêtes qui vous permettent de vous lancer dans vos premiers graphiques.

Sur chacune de vos requêtes pensez à mettre « Group by time interval » à >10s pour correspondre à la fréquence par défaut de Collectd.

De plus vérifiez bien à ce que votre « Panel data source » soit sélectionné sur votre base de données InfluxDB ajoutée précédemment comme data source de Grafana.

4.1 Disk

grafana-recette-disk

Penser dans l’onglet « Axes » de définir l’unité en « bytes » sur l’axe Y.

4.2 CPU

grafana-recette-CPU

4.3 Memory

grafana-recette-memory

Attention : il faut bien penser dans l’onglet « Axes » de définir l’unité en « bytes » sur l’axe Y.

4.4 Network

grafana-recette-network

N’oubliez pas dans l’onglet « Axes » de modifier l’unité en bytes/sec sur l’axe Y.

Et voilà, à vous de jouer maintenant ! Voici un bout de mon dashboard de supervision par exemple :

grafana-dashboard-example

Source

Commentaires