Netdata

    Fonctionnement🔗

    Netdata est notre outil de supervision interne : il collecte des métriques sur les processus qui tournent sur toutes nos machines.

    Il fonctionne en modèle client-serveur : nous avons des clients (des « exporteurs » ou « child nodes ») qui tournent dans un conteneur Docker privilégié sur chacune de nos machines, et un serveur (« parent node ») qui reçoit les données en provenance des clients, les agrège et les rend consultables en temps réel à travers une interface web.

    Historique🔗

    Nous avons choisi d’utiliser Netdata dès la mise en place de notre infrastructure V2 en avril 2022 pour avoir des statistiques et surtout un historique de la consommation de nos services.

    Nous avons dû nous en séparer pendant un an à cause d’un bug de déploiement que nous n’avons pas réussi à surmonter (lié au chiffrement des connexions entre les child nodes et la parent node), jusqu’en juillet 2023 où le bug semble avoir été résolu en version 1.41.0. Nous avons redéployé Netdata à cette date.

    Installation🔗

    Nous utilisons l’image officielle netdata/netdata avec un numéro de version explicite, que nous déclinons localement en deux variantes :

    • Pour netdata-server, nous montons trois volumes pour conserver les données du logiciel (historique de consommation, configuration des clients…) ;
    • Pour netdata-agent (le client), nous incorporons les secrets dans l’image : la configuration de l’API streaming, le certificat de netdata-server et l’identifiant unique associée à l’instance Netdata cliente. Le conteneur n’a pas besoin de volumes de données : son rôle est simplement de collecter puis de transférer les données à netdata-server.

    Le conteneur netdata-server offre ensuite une interface web qui affiche de nombreux graphiques sur la consommation de ressources sur chacune des machines.

    Sur notre installation, nous avons désactivé la télémétrie et l’intégration à « Netdata Cloud » (service payant). Nous avons également désactivé la fonctionnalité « Machine learning ».

    Enfin, nous avons configuré les alertes de Netdata pour recevoir des notifications sur Matrix en cas d’anomalie.

    Tests🔗

    Les journaux des conteneurs Netdata sont souvent très verbeux et difficiles à lire, mais restent utiles pour déboguer une installation.

    Pour vérifier si un client est bien connecté au serveur, les statistiques de la machine sur laquelle est installée le client doivent apparaître dans l’interface web du serveur Netdata et être actualisées en temps réel.

    Des statistiques supplémentaires peuvent être collectées avec les modules de Netdata, sur des usages ou logiciels spécifiques.

    Consommation de ressources🔗

    La consommation des agents Netdata est très faible : entre 20 et 50 Mo de RAM par agent, et entre 2 % et 6 % d’un cœur de vCPU constants.

    Le serveur Netdata consomme beaucoup plus : 300 Mo de RAM en moyenne, pour 4 machines supervisées (celle du serveur incluse). Cela ne pose aucun problème étant donné que le serveur Netdata est hébergé sur une machine dédiée à la supervision.

    Les volumes de données du serveur de Netdata atteignent 500 Mo de stockage disque en production, mais la taille dépend des paramètres de l’application au niveau de la conservation de l’historique de consommation des ressources.

    Par ailleurs, un guide est disponible sur leur documentation pour réduire la consommation de Netdata en modifiant la configuration.

    Précautions🔗

    Les données qui transitent entre les clients et le serveur sont sensibles : elles contiennent des métriques précises sur la consommation de chaque conteneur, le nom des réseaux et processus, ainsi que de nombreuses autres métadonnées. La communication client-serveur doit donc être chiffrée, à moins qu’elle fasse partie d’un réseau local (ce qui n’est pas notre cas).

    Quant à l’interface web du serveur Netdata, nous utilisons une Basic Authentication paramétrée sur le reverse-proxy pour éviter qu’elle soit en libre accès.

    Entretien🔗

    Netdata ne nécessite aucun entretien particulier.

    Mise à jour🔗

    Mettre à jour Netdata implique de télécharger la nouvelle version de l’image officielle sur tous les serveurs, de reconstruire l’image localement pour les clients, puis de redémarrer tous les conteneurs Netdata.

    Évolutions envisagées🔗

    Ajouter des sondes🔗

    Actuellement, seules les sondes par défaut sont activées. Il serait pertinent d’ajouter des sondes pour avoir des statistiques plus spécifiques à certains de nos services : nombre de mails reçus et envoyés sur le service Mail, métriques sur le trafic de PostgreSQL… Une partie de nos logiciels disposent déjà de routes sur lesquelles ces statistiques sont servies, il n’y a plus qu’à y connecter Netdata en utilisant ses modules.

    Utiliser Grafana🔗

    La création de tableaux de bord personnalisés est une fonctionnalité payante de Netdata, intégrée dans son « Netdata Cloud ».

    Il est toutefois possible d’utiliser Netdata comme source de données pour Grafana, et de concevoir les tableaux de bord personnalisés sur Grafana : dans cette situation, Netdata remplacerait Prometheus en consommant beaucoup moins de RAM.