Netdata .onion? ()

Encore un joujou que m'a fait connaitre mon ami Pymous! NetData.

Il s'agit d'un outil de monitoring en temps réel simple d'utilisation qui se veut opérationnel dès l'installation sans plus de configuration, de dépendances ou de maintenances, offrant un rafraichissement des données par seconde (en temps réel), avec près de 300 graphiques et plus de 2000 courbes le tout interactif bien évidemment. Belles promesses.

Il est dédié aux systèmes GNU/Linux et BSD ce qui, pour un outil de monitoring, peut poser problème lorsqu'on a gérer un parc informatiques composé de différents OS.
Soit ici le problème ne se pose, il va s'agir pour nous d'adopter Netdata afin de faire du monitoring sur notre petit serveur dédié, histoire de s'assurer qu'il va bien à chaque instant.

Netdata permet entre autre le monitoring du CPU (utilisation, interruption, fréquence par cœur et total), de la RAM (swap et kernel), des disques (I/O, opérations, backlog, utilisation, etc) ainsi que le Réseau (bande passante, paquets, erreurs, drops, etc).

Pour ma part bien que l'objectif derrière tout ça est de s'affranchir un peu plus des services tiers et de s'orienter vers du self-hosted idéalisé, les besoins et les contraintes font qu'il reste plus raisonnable de conserver - par exemple - une session NewRelic. J'ai déjà pu parler de cet équilibre à conserver dans mon article précédent: Let's Encrypt renewal.

Article mis à jour en Mars 2017

Interface interactive

Le grand avantage de Netdata est son interface épurée et notamment ses graphiques interactifs qui peuvent penser à certains, à ceux rendus possibles avec Grafana.

Grâce à eux il est facile de faire le tri des données pour ,par exemple, voir quel user sollicite le plus le CPU, etc.
Il n'y a pas vraiment d'historique des statistiques, l’intérêt étant de voir d'un coup d'œil l'état de sa machine et switchant d'un graphique à l'autre via le menu sur la droite, ce sur les dernières heures.

Si vous voulez pousser plus loin en configurant par exemple votre dashboard, qu'à cela ne tienne, la configuration est très compléte.

Installation

L'installation qui suit a été réalisée sur Debian 8 Jessie avec NGinx

NetData

1 - On installe tout d'abord les dépendances

sudo apt-get update && sudo apt-get install zlib1g-dev uuid-dev libmnl-dev gcc make git autoconf autoconf-archive autogen automake pkg-config curl  

2 - Puis le script netdata-installer.sh

sudo cd /tmp  
sudo git clone https://github.com/firehol/netdata.git --depth=1  
sudo cd netdata  
sudo ./netdata-installer.sh  

Voilà, Netdata est installé.

Mise à jour

Easy peasy.

1 - Retournez dans le répertoire créé précédemment et tirez les dernières mises à jour

sudo cd /tmp/netdata/  
sudo git pull  

2 - Recompilez-le et réinstallez-le avec le script

sudo ./netdata-updater.sh  

Désinstallation

Déçu? Qu'à cela ne tienne, vous pouvez toujours désinstaller Netdata

1 - Toujours dans /tmp/netdata

sudo ./netdata-uninstaller.sh  

Utilisation

Netdata démarre dès son installation, si vous devez l'arrêter ou le relancer, rien de plus simple:

  • Démarrer - /usr/sbin/netdata
  • Arrêter - killall netdata

Netdata écoute par défaut sur toutes les ips et sur le port 19999.

Configuration

Netdata

1 - Ouvrez le fichier de configuration de netdata

sudo nano /etc/netdata/netdata.conf  

2 - Puis recherchez la ligne # bind socket to IP = * afin de la remplacer par ce qui suit:

bind socket to IP = 127.0.0.1  

Puis relancez Netdata comme expliqué précédemment.
Vous limiterez l'accès à Netdata en localhost seulement, ce qui nous sera nécessaire pour mettre en place le reverse prioxy et l'authentification avec htpasswd. Merci Gaiserik de me l'avoir rappelé en commentaire ! :)

NGinx

On va maintenant créer un reverse-proxy avec NGinx pour accéder à votre Netdata via un sous-domaine, par exemple netdata.domaine.ext.

1 - Créez le fichier netdata

sudo nano /etc/nginx/sites-available/netdata  

2 - Collez-y ce qui suit en l'adaptant à vos besoins, notamment l'IP et nom de domaine. Je pars du principe que vous utiliser l'https (avec letsencrypt?) et fais donc une redirection 301 vers le port 443 (SSL).

upstream netdata {

    server 127.0.0.1:19999;
    keepalive 64;
}

server {  
        listen 10.1.1.1:80;
        server_name netdata.domaine.ext;

        return 301 https://$server_name$request_uri;
}

server {  
    listen 10.1.1.1:443 ssl;
    server_name netdata.domaine.ext;


    ssl on;
    ssl_certificate /etc/letsencrypt/live/domaine.ext/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/domaine.ext/privkey.pem;
    ssl_session_timeout 5


    location / {
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://netdata;
        proxy_http_version 1.1;
        proxy_pass_request_headers on;
        proxy_set_header Connection "keep-alive";
        proxy_store off;
    }
}

3 _ Sauvegardez et créez un lien symbolique afin que NGinx prenne en compte votre nouvelle configuration

sudo ln -s /etc/nginx/sites-available/netdata /etc/nginx/sites-enabled/netdata  

4 - Testez votre configuration et relancez NGinx si elle est correcte.

sudo nginx -t  
sudo service nginx restart  

Authentification

Voilà, vous pouvez accéder à votre installation depuis le sous-domaine netdata.domaine.ext. Chouette?

Non pas tout à fait car tout le monde peut y accéder maintenant depuis internet, va falloir verrouiller un peu tout ça en mettant en place une authentification grâce à NGinx.

1 - Installez déjà le paquet apache2-utils qui contient l'outil htpasswd, dont nous allons nous servir afin de mettre en place une authentification simple

sudo apt-get install apache2-utils  

Si vous n'avez pas déjà un fichier d'authentification vous pouvez en créer un nouveau avec htpasswd

2 - Tapez la commande qui suit et indiquez (deux fois) le mot de passe souhaité, lors que le prompt vous le demandera

htpasswd -s -c /etc/nginx/passwd/netdata_<UTILISATEUR>  
  • -s - Utiliser l'encryption SHA pour votre mot de passe
  • -c - Créer le fichier passwd. si il existe déjà, il sera réécrit. Utilisez cette option si vous ne l'aviez pas déjà créé auparavant
  • /etc/nginx/passwd/netdata_<UTILISATEUR> - le fichier dans lequel sera conservé le couple identifiant/mot de passe

3 - et on applique les bonnes propriétés/permissions

chmod 640 /etc/nginx/passwd/*  
chown --changes www-data:www-data /etc/nginx/passwd/*  

4 - Ouvrez à nouveau votre configuration NGinx pour Netdata et ajoutez ce qui suit avant location / {

    auth_basic "Restricted";
    auth_basic_user_file "/etc/nginx/passwd/netdata_<UTILISATEUR>";

5 - Enregistrez, testez et relancez NGinx si c'est ok!

sudo nginx -t  
sudo service nginx restart  

Maintenant retournez sur netdata.domaine.ext vous deviez voir apparaître une fenêtre popup vous demandant de vous connecter. On est tout bon.

Liens & sources

Pour formater votre commentaire, vous pouvez utiliser le Markdown