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
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 9 (stretch)"
}
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 9 (stretch)
Les commandes intéressantes pour superviser sont les suivantes :
curl -i http://192.168.0.26:2375/nodes
curl -i http://192.168.0.26:2375/containers/json
curl -i http://192.168.0.26:2375/services
curl -i http://192.168.0.26:2375/networks
curl -i http://192.168.0.26:2375/swarm
curl -i http://192.168.0.26: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
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/).
Listons les modes disponibles.
$ /usr/lib/centreon/plugins/centreon_plugins.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.
$ /usr/lib/centreon/plugins/centreon_plugins.pl --plugin=cloud::docker::restapi::plugin --mode=node-status --hostname='192.168.0.26' --port='2375'
OK: Node '192.168.0.26' 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;
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.
docker ps -a
CONTAINER ID        IMAGE                              COMMAND                  CREATED             STATUS                    PORTS               NAMES
cffa6ca01aac        alexellis2/visualizer-arm:latest   "/usr/bin/entry.sh n…"   15 hours ago        Up 4 hours                8080/tcp            viz.1.ln4nznggse3yak2h9e93iy7xl
2267e85a2b12        ubuntu                             "/bin/bash"              18 hours ago        Exited (0) 18 hours ago                       hungry_hypatia
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
7cse8vh53n1ts8ycgf6vfyvcy *   controller          Ready               Active              Leader              18.05.0-ce
oyxc472divutxdoli9hzy82r0     p1                  Ready               Active                                  18.05.0-ce
vuskxibi9dep2nyuse4cxwl2j     p2                  Ready               Active                                  18.05.0-ce
8gugy3uzeapo4lf5s1fgengiw     p3                  Ready               Active                                  18.05.0-ce
6ymj940ashi8ycn7j5mi2y83g     p4                  Ready               Active                                  18.05.0-ce
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_plugins.pl --plugin=cloud::docker::restapi::plugin --mode=node-status --hostname='192.168.0.26' --port='2375' --verbose
OK: Node '192.168.0.26' 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.0.26' Containers Running : 1, Containers Stopped : 1, Containers Paused : 0
Node '192.168.0.26/192.168.0.25' status : ready [manager status: -]
Node '192.168.0.26/192.168.0.26' status : ready [manager status: reachable]
Node '192.168.0.26/192.168.0.29' status : ready [manager status: -]
Node '192.168.0.26/192.168.0.31' status : ready [manager status: -]
Node '192.168.0.26/192.168.0.37' 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_plugins.pl --plugin=cloud::docker::restapi::plugin --mode=node-status --hostname='192.168.0.26' --port='2375'
CRITICAL: Node '192.168.0.26/192.168.0.29' 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_plugins.pl --plugin=cloud::docker::restapi::plugin --mode=node-status --hostname='192.168.0.26' --port='2375'
CRITICAL: Node '192.168.0.26/192.168.0.29' status : down [manager status: -] - Node '192.168.0.26/192.168.0.37' status : down [manager status: -] | 'containers_running'=1;;;0; 'containers_stopped'=1;;;0; 'containers_paused'=0;;;0;
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_plugins.pl --plugin=cloud::docker::restapi::plugin --mode=node-status --hostname='192.168.0.26' --port='2375' --warning-node-status='%{status} !~ /ready/' --critical-node-status='-'
WARNING: Node '192.168.0.26/192.168.0.25' status : down [manager status: -] | 'containers_running'=1;;;0; 'containers_stopped'=1;;;0; 'containers_paused'=0;;;0;

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_plugins.pl --plugin=cloud::docker::restapi::plugin --mode=list-containers --hostname='192.168.0.26' --port='2375' --verbose
List containers:
[id = 2267e85a2b1248fd89777643669539f9c92da54fc2720039c5d74380b77dbb97] [name = '/hungry_hypatia'] [node = '192.168.0.26'] [state = 'exited']
[id = cffa6ca01aacbb66fc39f8b5d3b062fc99cd98d8842d89c1d0acde8176d80e51] [name = '/viz.1.ln4nznggse3yak2h9e93iy7xl'] [node = '192.168.0.26'] [state = 'running']
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_plugins.pl --plugin=cloud::docker::restapi::plugin --mode=container-usage --hostname='192.168.0.26' --port='2375' --container-name='/viz.1.ln4nznggse3yak2h9e93iy7xl'
OK: Container 'cffa6ca01aacbb66fc39f8b5d3b062fc99cd98d8842d89c1d0acde8176d80e51' state : running, CPU Usage : 6.60 %, memory : skipped (no value(s)), Read IOPs : 0.00, Write IOPs : 0.00 - All container traffics are ok | 'cpu'=6.60%;;;0;100 'read_iops'=0.00iops;;;0; 'write_iops'=0.00iops;;;0; 'traffic_in_cffa6ca01aacbb66fc39f8b5d3b062fc99cd98d8842d89c1d0acde8176d80e51.eth0'=21542.94b/s;;;0; 'traffic_out_cffa6ca01aacbb66fc39f8b5d3b062fc99cd98d8842d89c1d0acde8176d80e51.eth0'=10530.97b/s;;;0; 'traffic_in_cffa6ca01aacbb66fc39f8b5d3b062fc99cd98d8842d89c1d0acde8176d80e51.eth1'=95.19b/s;;;0; 'traffic_out_cffa6ca01aacbb66fc39f8b5d3b062fc99cd98d8842d89c1d0acde8176d80e51.eth1'=0.00b/s;;;0;
On récupère l'utilisation du container en cpu, mémoire et réseau.
Encore un peu de patience, bientôt d'autres informations pour superviser notre Cluster Hat.
comments powered by Disqus
 Vous êtes ici: