Monitorer sa machine avec Grafana

Suite au test pas très concluant de Munin car sa génération des graph est lourde en plus j'ai du mal à récupérer et afficher toutes les informations que je souhaite.

Grafana me permet ainsi d'avoir un aperçu visuel très rapide de la santé du système en plus de pouvoir afficher et mettre en valeur précisément les valeurs que je veux grâce à son interface très ergonomique.


Liens utiles :

Installation de telegraf

Commençons par aller chercher les données métriques d'un système tel que la température actuelle du système ou récupérer la charge actuelle. Installons-le!

apt install telegraf

Faison un backup du fichier de configuration par défaut :

mv /etc/telegraf/telegraf.conf /etc/telegraf/telegraf.conf.orig

Et ajoutons notre configuration :

vim /etc/telegraf/telegraf.conf
[tags]

# Configuration for telegraf agent
[agent]
  debug = false
  flush_buffer_when_full = true
  flush_interval = "15s"
  flush_jitter = "0s"
  hostname = "debian64"
  interval = "15s"
  round_interval = true
vim  /etc/telegraf/telegraf.d/outputs.conf
[[outputs.influxdb]]
  database = "telegraf"
  precision = "s"
  urls = [ "http://127.0.0.1:8086" ]
  username = "telegraf"
  password = "le_mot2passe"
vim /etc/telegraf/telegraf.d/inputs_system.conf
# Read metrics about CPU usage
[[inputs.cpu]]
  percpu = false
  totalcpu = true
  fieldpass = [ "usage*" ]

# Read metrics about disk usagee
[[inputs.disk]]
  fielddrop = [ "inodes*" ]
  mount_points=["/","/home"]

# Read metrics about diskio usage
[[inputs.diskio]]
  devices = ["sda2","sda3"]
  skip_serial_number = true

# Read metrics about network usage
[[inputs.net]]
  interfaces = [ "eth0" ]
  fielddrop = [ "icmp*", "ip*", "tcp*", "udp*" ]

# Read metrics about memory usage
[[inputs.mem]]

# Read metrics about swap memory usage
[[inputs.swap]]

# Read metrics about system load & uptime
[[inputs.system]]

N'oublions pas de vérifer que tout fonctionne correctement :

telegraf -test -config /etc/telegraf/telegraf.conf -config-directory /etc/telegraf/telegraf.d/

On fait comprendre au daemon qu'il y a des nouveautés :

systemctl reload telegraf.service

Voici la documentation officielle pour utiliser les inputs

Installation de influxdb

Ensuite, on a besoin d'une base qui enregistrera avec précisions les données métriques passé par telegraf.

curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
echo "deb https://repos.influxdata.com/debian jessie stable" > /etc/apt/sources.list.d/influxdb.list
apt update && apt install influxdb -y
systemctl start influxdb.service

Créons par la suite la base et l'utilisateur en passant la commande suivante :

influx
CREATE DATABASE telegraf
CREATE USER telegraf WITH PASSWORD 'telegraf'
GRANT ALL ON telegraf TO telegraf

On souhaite seulement conserver les données durant 1 mois et cela permettra également limiter la taille de la base :

CREATE RETENTION POLICY thirty_days ON telegraf DURATION 30d REPLICATION 1 DEFAULT

Bonus

Il est possible de désactiver les logs concernant les informations sur les POST en renseignant cette directive dans la section suivante :

[http]
   log-enabled = false

Si l'on souhaite questionner la base à l'aide de curl :

curl -G http://localhost:8086/query --data-urlencode "q=SHOW DATABASES"

Installation de Grafana

Après la récupération et le stockage des données, on peut maintenant s'attaquer à son affichage. Installons-le!

  • Si vous disposez d'un Raspberry PI :

Il vous suffira alors d'installer le package avec la version que vous souhaitez :

dpkg -i https://github.com/fg2it/grafana-on-raspberry/releases/download/v5.0.4/grafana_5.0.4_armhf.deb

Dans mon cas, j'ai pas eu besoin d'indépendances supplémentaires.

  • Si vous disposez d'une machines x86, 64bits, etc :
echo 'deb https://packagecloud.io/grafana/stable/debian/ jessie main' > /etc/apt/sources.list.d/grafana.list
curl https://packagecloud.io/gpg.key | sudo apt-key add -
apt update && apt install grafana -y

Indiquons que pour la gestion des comptes soient faite via une base SQLite en dé-commentant ces directives :

vim /etc/grafana/grafana.ini
type = sqlite3
path = grafana.db

On fait bien comprendre ces changements :

systemctl start grafana-server

Ainsi l'interface est disponible à cette adresse : http://localhost:3000 Les identifiants par défaut sont admin et admin comme mot de passe.

Rendre accéssible sur les internets

Grafana écoute sur le port 3000 et on voudrait que le service soit accessible via un sous-domaine. Alors on peut le faire passer par Nginx ainsi :

vim /etc/nginx/sites-enabled/grafana.conf
server {
    listen 80;
    server_name grafana.mon-domaine.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header Authorization "";
    }

    access_log off;
    error_log /var/log/nginx/monitorix-error.log;
}

Ainsi on peut y accéder avec l'URL http://grafana.mon-domaine.com

Monitorer sa bande passante

Il est possible d'ajouter facilement des scripts maison et vu que j'ai une connexion Free chez moi alors voici deux scripts qui permettent de récupérer le débit montant et descendant :

Créons d'abord un endroits pour les stoker :

mkdir /etc/telegraf/scripts
upload.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import urllib
import re
 
print re.search(".*ATM.*", urllib.urlopen("http://mafreebox.freebox.fr/pub/fbx_info.txt").read()).group().split()[4]
download.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import urllib
import re
 
print re.search(".*ATM.*", urllib.urlopen("http://mafreebox.freebox.fr/pub/fbx_info.txt").read()).group().split()[2]

Puis on informe telegraf que l'on souhaite récupérer ces mesures :

vim /etc/telegraf/telegraf.d/inputs_system.conf
[[inputs.exec]]
 commands = ["/etc/telegraf/scripts/download.py"]
 timeout = "10s"

 name_override = "download"
 data_format = "value"
 data_type = "integer"

[[inputs.exec]]
 commands = ["/etc/telegraf/scripts/upload.py"]
 timeout = "10s"

 name_override = "upload"
 data_format = "value"
 data_type = "integer"

On prend en compte ces changements :

systemctl reload telegraf.service

Concevoir ses graph

Voici une belle vidéo faite par Guillaume Leduc qui explique comment, pour commencer, faire ses premiers graph : https://vimeo.com/170656249