Vous êtes ici:

Menu


Stacks Image 969879
Notre cluster étant opérationnel, nous allons découvrir les mécanismes et les outils pour réaliser une supervision de notre installation. En premier lieu, nous allons découvrir le moyen d'interroger à distance le Docker Swarm. Puis dans un deuxième temps, nous allons utiliser les outils proposés par Centreon.

Docker Remote API

Pour communiquer à distance avec notre cluster, nous allons activer la fonction Docker Remote API. Il existe deux méthodes de connexion avec ou sans certificats. La première, que nous allons décrire, n'est pas à utiliser dans un environnement de production.

Configuration du Remote API

Modifiez le fichier systemd de notre Controller (machine Raspberry). Editez le fichier docker.service :
sudo vi /lib/systemd/system/docker.service
Modifiez la ligne suivante
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock
Rechargez la configuration
sudo systemctl daemon-reload
Redémarrez Docker
sudo systemctl restart docker

Vérification de l'accès Remote API

Nous pouvons vérifier l'accès à l'API REST avec une commande curl sur notre raspberry
curl -i http://localhost:2375/info
nous obtiendrons les informations suivantes
Stacks Image 969562
Les informations sont au format JSON. En utilisant un navigateur compatible, vous pouvez obtenir un affichage plus lisible.
Stacks Image 969851
En installant l'utilitaire JQ, nous pouvons récupérer plus facilement certaines informations. Installons le paquet.
sudo apt-get install jq
En installant l'utilitaire JQ, nous pouvons récupérer plus facilement certaines informations. Installons le paquet. Lancez cette ligne de commande pour récupérer le nom de l'OS installé.
curl -s http://localhost:2375/info | jq -r ' {OS: .OperatingSystem } '
{
  "OS": "Raspbian GNU/Linux 10 (buster)"
}
Pour obtenir seulement le résultat, il faudra rajouter une commande précédée d'un pipe.
curl -s http://localhost:2375/info | jq -r ' {OS: .OperatingSystem } | .OS '
Raspbian GNU/Linux 10 (buster)
Les commandes intéressantes pour superviser sont les suivantes :
curl -i http://192.168.1.70:2375/nodes
curl -i http://192.168.1.70:2375/containers/json
curl -i http://192.168.1.70:2375/services
curl -i http://192.168.1.70:2375/networks
curl -i http://192.168.1.70:2375/swarm
curl -i http://192.168.1.70:2375/volumes
Mais il existe de nombreuses commandes pour créer, modifier et supprimer votre configuration docker. Voir le lien suivant sur les commandes Remote API. Cliquez ensuite sur la bonne version de votre docker.

Supervision de notre Cluster Hat

Maintenant que nous avons notre moyen de nous connecter à distance, nous allons utiliser les outils Centreon pour superviser notre Raspberry. Nous partons du principe que vous avez installé les plugins Centreon.
Pour l'instant, nous utiliserons la ligne de commande. Connectez-vous sur votre serveur Centreon. Identifiez-vous en utilisateur centreon-engine, c'est une bonne pratique pour les fichiers temporaires créés dans le dossier /var/lib/centreon/centplugins.
su - centreon-engine
Avec les plugins récupérés à partir du GitHub, Recherchons le plugin correspondant à Docker.
$ /usr/lib/centreon/plugins/centreon_plugins.pl --list-plugin | grep docker
PLUGIN: cloud::docker::restapi::plugin
    (https://docs.docker.com/reference/api/docker_remote_api/).
Sinon avec les plugins Fatpacked, le binaire correspondant se nomme /usr/lib/centreon/plugins/centreon_docker_restapi.pl. Nous l'utiliserons par défaut.
Listons les modes disponibles.
$ /usr/lib/centreon/plugins/centreon_docker_restapi.pl --plugin=cloud::docker::restapi::plugin --list-mode

Plugin Description:
    Check Docker and containers through its HTTPS Remote API
    (https://docs.docker.com/reference/api/docker_remote_api/).
    Requirements: Docker 1.12.0+ and Docker API 1.24+

Global Options:
    --mode  Choose a mode.

    --dyn-mode
            Specify a mode with the path (separated by '::').

    --list-mode
            List available modes.

    --mode-version
            Check minimal version of mode. If not, unknown error.

    --version
            Display plugin version.

    --custommode
            Choose a custom mode.

    --list-custommode
            List available custom modes.

    --multiple
            Multiple custom mode objects (some mode needs it).

Modes Available:
   container-usage
   list-containers
   node-status
Nous avons trois modes. commençons par le mode node-status en affichant les options avec l'option help. Voici les options propres à ce mode.
Mode:
    Check node status.

    --warning-node-status
            Set warning threshold for status (Default: -) Can used special
            variables like: %{display}, %{status}, %{manager_status}.

    --critical-node-status
            Set critical threshold for status (Default: '%{status} !~
            /ready/ || %{manager_status} !~ /reachable|-/'). Can used
            special variables like: %{display}, %{status},
            %{manager_status}.

    --warning-*
            Threshold warning. Can be: 'containers-running',
            'containers-paused', 'containers-stopped'.

    --critical-*
            Threshold critical. Can be: 'containers-running',
            'containers-paused', 'containers-stopped'.,
Nous commençons par cette ligne de commande pour tester le plugin. Nous utiliserons le plugins FatPacked par convention.
/usr/lib/centreon/plugins/centreon_docker_restapi.pl --plugin=cloud::docker::restapi::plugin --mode=node-status --hostname=192.168.1.70 --port='2375'
OK: Node '192.168.1.70' Containers Running : 4, Containers Stopped : 0, Containers Paused : 0 | 'containers_running'=4;;;0; 'containers_stopped'=0;;;0; 'containers_paused'=0;;;0;
On peut éventuellement paramétrer des seuils critique et warning.
/usr/lib/centreon/plugins/centreon_docker_restapi.pl --plugin=cloud::docker::restapi::plugin --mode=node-status --hostname=192.168.1.70 --port='2375' --warning-containers-stopped=8 --critical-containers-stopped=10
OK: Node '192.168.1.70' Containers Running : 4, Containers Stopped : 0, Containers Paused : 0 | 'containers_running'=4;;;0; 'containers_stopped'=0;0:8;0:10;0; 'containers_paused'=0;;;0;
Le plugin retourne l'adresse IP du serveur Controller. Il indique le nombre de container en cours, arrêté et suspendu. Dans notre cas, il indique le container du visualisateur tournant sur le Controller et un container arrêté. On peut vérifier sur le raspberry en lançant cette commande.
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
5cb18107494f        restapi             "./getnbhost.sh"         3 hours ago         Up 3 hours                                 restapi
b936237f9591        worker2             "./rollon.sh"            3 hours ago         Up 3 hours                                 worker2
7f05c438b2c6        worker1             "./rollon.sh"            3 hours ago         Up 3 hours                                 worker1
c8843256524d        serverweb           "nginx -g 'daemon of…"   4 hours ago         Up 4 hours          0.0.0.0:8080->80/tcp   site
Par contre, les containers créés en service sur les workers (PI Zéro) ne sont pas supervisés. La commande suivante sur le Controller affiche plus d'informations.
pi@controller:~ $ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
3zqj6io9py3o3iusmncjnn0ed *   cbridge             Ready               Active              Leader              19.03.2
f4v1zechz4dj39n5azne107ki     p1                  Ready               Active                                  19.03.2
m0bvprgj8xdf17571q4gf7mcu     p2                  Ready               Active                                  19.03.2
u81dy22keqyneegy6i95dyfeb     p3                  Ready               Active                                  19.03.2
0zdphfuuxrgc38puen0wenjif     p4                  Ready               Active                                  19.03.2
Néanmoins, avec la commande verbose, on obtient un peu plus d'information. Juste une information erronée, le Controller est en status Leader, le plugin Centreon indique reachable.
/usr/lib/centreon/plugins/centreon_docker_restapi.pl --plugin=cloud::docker::restapi::plugin --mode=node-status --hostname=192.168.1.70 --port='2375' --verbose
OK: Node '192.168.1.70' Containers Running : 1, Containers Stopped : 1, Containers Paused : 0 - All node status are ok | 'containers_running'=1;;;0; 'containers_stopped'=1;;;0; 'containers_paused'=0;;;0;
Node '192.168.1.70' Containers Running : 1, Containers Stopped : 1, Containers Paused : 0
Node '192.168.1.70/192.168.1.70' status : ready [manager status: reachable]
Node '192.168.1.70/192.168.1.71' status : ready [manager status: -]
Node '192.168.1.70/192.168.1.72' status : ready [manager status: -]
Node '192.168.1.70/192.168.1.73' status : ready [manager status: -]
Node '192.168.1.70/192.168.1.74' status : ready [manager status: -]
Arrêtons maintenant un worker sur le ClusterHat.
pi@controller:~ $ clusterhat off p3
Au bout de quelques secondes, lançons la commande.
/usr/lib/centreon/plugins/centreon_docker_restapi.pl --plugin=cloud::docker::restapi::plugin --mode=node-status --hostname='192.168.1.70' --port='2375'
CRITICAL: Node '192.168.1.70/192.168.1.71' status : down [manager status: -] | 'containers_running'=1;;;0; 'containers_stopped'=1;;;0; 'containers_paused'=0;;;0;
Le plugin détecte l'arrêt d'un worker en indiquant l'adresse IP du worker et son statut de manager sans plus de précision. Avec le clusterHat, le statut manager pour les workers n'est pas utile. Les PI Zéro ne sont pas prévus pour cette fonction. Pour obtenir plus d'informations, utilisons l'option —verbose (l'exemple ci dessous a deux workers arrêtés).
/usr/lib/centreon/plugins/centreon_docker_restapi.pl --plugin=cloud::docker::restapi::plugin --mode=node-status --hostname='192.168.1.70' --port='2375' --verbose
CRITICAL: Node '192.168.1.70/192.168.1.71' status : down [manager status: -] - Node '192.168.1.70/192.168.1.73' status : down [manager status: -] | 'containers_running'=1;;;0; 'containers_stopped'=1;;;0; 'containers_paused'=0;;;0;
Node '192.168.1.70' Containers Running : 1, Containers Stopped : 1, Containers Paused : 0
Node '192.168.1.70/192.168.1.70' status : ready [manager status: reachable]
Node '192.168.1.70/192.168.1.71' status : down [manager status: -]
Node '192.168.1.70/192.168.1.72' status : ready [manager status: -]
Node '192.168.1.70/192.168.1.73' status : down [manager status: -]
Node '192.168.1.70/192.168.1.74' status : ready [manager status: -]
Le plugin affiche les deux workers arrêtés.

Réglage des seuils

On peut modifier l'état des seuils, par exemple au lieu d'avoir un état critical pour un worker arrêté mais un état warning. Nous ne vérifions que la donnée status.
$ /usr/lib/centreon/plugins/centreon_docker_restapi.pl --mode=node-status --hostname='192.168.1.70' --port='2375' --warning-node-status='%{status} !~ /ready/' --critical-node-status='-'
WARNING: Node '192.168.1.70/192.168.1.71' status : down [manager status: -] - Node '192.168.1.70/192.168.1.73' status : down [manager status: -] | 'containers_running'=1;;;0; 'containers_stopped'=1;;;0; 'containers_paused'=0;;;0;
centreon-engine@raspberrypi:~$

Les autres modes

Les deux autres modes sont seulement intéressant pour les containers sur le Controller. Le mode list-containers nous servira à retrouver les bonnes informations de container. exemple :
$ /usr/lib/centreon/plugins/centreon_docker_restapi.pl --plugin=cloud::docker::restapi::plugin --mode=list-containers --hostname='192.168.1.70' --port='2375' --verbose
List containers:
[id = 22a8a7a34d570f3442a4c8d2dd9cefe1286cb3fb287447553e43f3f5a473ca5d] [name = '/viz.1.t79v5pkqaq1io9vkcspixlwkg'] [node = '192.168.1.70'] [state = 'running']
[id = 58e1454e028a0bfee66c68d0e7006c7a3ee2db59658e22232c8fd6e4551e310d] [name = '/web1'] [node = '192.168.1.70'] [state = 'created']
Seul le deuxième peut servir car le premier container est arrêté. On utilise le champ name pour utiliser le mode container-usage
$ /usr/lib/centreon/plugins/centreon_docker_restapi.pl --plugin=cloud::docker::restapi::plugin --mode=container-usage --hostname='192.168.1.70' --port='2375' --container-name='/viz.1.t79v5pkqaq1io9vkcspixlwkg'
OK: Container '22a8a7a34d570f3442a4c8d2dd9cefe1286cb3fb287447553e43f3f5a473ca5d' state : running, CPU Usage : 4.89 %, Memory Total: 926.08 MB Used: 37.61 MB (4.06%) Free: 888.47 MB (95.94%), Read IOPs : 0.00, Write IOPs : 0.00 - All container traffics are ok | 'cpu'=4.89%;;;0;100 'memory_used'=39436288B;;;0;971063296 'read_iops'=0.00iops;;;0; 'write_iops'=0.00iops;;;0; 'traffic_in_22a8a7a34d570f3442a4c8d2dd9cefe1286cb3fb287447553e43f3f5a473ca5d.eth0'=12016.00b/s;;;0; 'traffic_out_22a8a7a34d570f3442a4c8d2dd9cefe1286cb3fb287447553e43f3f5a473ca5d.eth0'=6224.00b/s;;;0; 'traffic_in_22a8a7a34d570f3442a4c8d2dd9cefe1286cb3fb287447553e43f3f5a473ca5d.eth1'=0.00b/s;;;0; 'traffic_out_22a8a7a34d570f3442a4c8d2dd9cefe1286cb3fb287447553e43f3f5a473ca5d.eth1'=0.00b/s;;;0;
On récupère l'utilisation du container en cpu, mémoire et réseau. Comme vous le constatez, certaines métriques et l'affichage du output affiche l'id du container. Ce qui n'est pas du tout pratique. Pour éviter cela, on utilise l'option use-name.
$ /usr/lib/centreon/plugins/centreon_docker_restapi.pl --plugin=cloud::docker::restapi::plugin --mode=container-usage --hostname='192.168.1.70' --port='2375' --container-name='/viz.1.t79v5pkqaq1io9vkcspixlwkg' --use-name
OK: Container '/viz.1.t79v5pkqaq1io9vkcspixlwkg' state : running, CPU Usage : 3.91 %, Memory Total: 926.08 MB Used: 42.64 MB (4.60%) Free: 883.44 MB (95.40%), Read IOPs : 0.00, Write IOPs : 0.00 - All container traffics are ok | 'cpu'=3.91%;;;0;100 'memory_used'=44711936B;;;0;971063296 'read_iops'=0.00iops;;;0; 'write_iops'=0.00iops;;;0;
On peut aussi utiliser filtre-name pour éviter le slash et filter-counter pour indiquer juste les métriques concernées pour le counter.
$ /usr/lib/centreon/plugins/centreon_docker_restapi.pl --plugin=cloud::docker::restapi::plugin --mode=container-usage --hostname='192.168.1.70' --port='2375' --filter-name='viz' --use-name --filter-counters='cpu'
OK: Container '/viz.1.t79v5pkqaq1io9vkcspixlwkg' CPU Usage : 3.40 % | 'cpu'=3.40%;;;0;100
Autre article sur le clusterhat, le déploiement par Ansible.
comments powered by Disqus
comments powered by Disqus
 Vous êtes ici: