Comment surveiller l’utilisation des ressources des conteneurs Docker –
Bien que Docker soit beaucoup plus léger que les machines virtuelles traditionnelles, trop de conteneurs peuvent rapidement consommer les ressources de votre hôte. Voici comment vérifier l’utilisation du matériel et surveiller le nombre de processus à l’intérieur de vos conteneurs.
Sommaire
La commande Docker Stats
Le mécanisme intégré de Docker pour afficher la consommation des ressources est docker stats
. Cette commande vous donne une vue tabulée de vos conteneurs. Chaque conteneur affiche un flux en direct de ses métriques critiques.
La sortie de la commande inclut la consommation du processeur et une mesure de l’utilisation du réseau et du stockage de chaque conteneur pendant sa durée de vie. La colonne Mémoire affiche l’utilisation de la mémoire en direct ainsi que la limite de mémoire configurée sur le conteneur. Lorsqu’aucune limite n’est définie, vous verrez la quantité de RAM disponible sur votre hôte. La dernière colonne, PIDS
, est le nombre de processus démarrés par le conteneur.
Les conteneurs arrêtés sont exclus par défaut. Vous pouvez les ajouter au tableau en passant le -a
(--all
) à la commande. L’utilisation du processeur et de la mémoire ne sera pas disponible, mais vous pourrez voir les métriques agrégées tout au long de la vie du conteneur, telles que l’activité du réseau.
Vous pouvez afficher les statistiques d’un ou de plusieurs conteneurs de la même manière que d’autres docker
Commandes CLI. Transmettez une liste d’ID ou de noms de conteneurs séparés par des espaces. La sortie affichera les métriques des conteneurs spécifiés, en supprimant tout le reste.
docker stats first-container second-container
docker stats
prend en charge le formatage personnalisé afin que vous puissiez sélectionner uniquement les colonnes dont vous avez besoin. Le --format
flag accepte une chaîne d’espace réservé Go qui vous permet de créer des visualisations de données personnalisées.
Voici comment afficher les noms de conteneurs avec les métriques d’utilisation du processeur et de la mémoire :
docker stats --format "table {{.Name}}t{{.CPUPerc}}t{{.MemUsage}}"
Le table
le type de formatage ajoute les en-têtes de colonne à la sortie. Omettez ceci si vous voulez les données brutes sans tabulation. Si vous utilisez régulièrement la même chaîne de formatage, envisagez de l’ajouter en tant qu’alias shell pour en faciliter l’accès.
Obtenir plus d’informations
Des informations plus détaillées sur l’utilisation des ressources d’un conteneur peuvent être obtenues en inspectant son groupe de contrôle (cgroup). Ce mécanisme de noyau suit la consommation d’un groupe de processus, exposant les métriques collectées dans un pseudo-système de fichiers.
Deux versions du système de groupe de contrôle sont disponibles. La v2 n’est prise en charge que sur Docker 20.10 ou version ultérieure avec le noyau Linux v4.15. Les versions plus anciennes utiliseront la v1. La documentation sur la v2 est encore incomplète, donc la v1 peut être plus facile à utiliser.
Pour trouver le groupe de contrôle d’un conteneur, vous devez déterminer quelle version est active et connaître l’ID complet du conteneur. Il doit s’agir de la version complète et non de la forme tronquée indiquée dans docker ps
et docker stats
production. Vous pouvez le trouver en exécutant docker ps --no-trunc
.
Combinez l’ID du conteneur avec le chemin d’accès au répertoire des groupes de contrôle de votre système. Les chemins pour v1 et v2 sont documentés par Docker. Ensuite, vous pouvez inspecter le pseudo-système de fichiers pour trouver des statistiques détaillées sur les ressources. Voici le chemin pour trouver l’utilisation de la mémoire d’un conteneur lors de l’utilisation des groupes de contrôle v1 :
cat /sys/fs/cgroup/memory/docker/<full container id>/memory.stat
Le fichier mémoire fournit des informations détaillées sur la consommation, les limites, la pagination et l’utilisation de l’échange.
Trouver des métriques de ressources avec l’API Docker
L’API Docker est un moyen plus simple d’accéder à ces informations. Ceci est activé par défaut via le socket Unix du démon Docker. Le /containers/{id}/stats
le point de terminaison fournit des détails détaillés sur l’utilisation des ressources. Remplacer {id}
avec l’identifiant de votre conteneur.
curl --unix-socket /var/run/docker.sock "http://localhost/v1.41/containers/{id}/stats" | jq
Nous utilisons curl
dans cet exemple. Il est indiqué d’utiliser le socket du démon Docker via le --unix-socket
drapeau. L’API Docker renverra les données au format JSON ; c’est canalisé dans jq
pour le rendre plus lisible dans le terminal.
Chaque réponse d’API contient des informations détaillées sur l’utilisation actuelle et passée des ressources du conteneur. Il s’agit de données numériques destinées à être consommées par les machines-outils. Les valeurs sont présentées « brutes » et peuvent ne pas être immédiatement intelligibles sans traitement supplémentaire ou intégration dans un outil de tableau de bord.
Affichage des processus en cours
Une commande distincte, docker top
, vous permet de voir la liste des processus en cours d’un conteneur spécifié :
docker top my-container
Il énumère la liste des processus du conteneur au moment de l’exécution de la commande. contrairement à stats
, il ne fournit pas de flux de données en direct. Vous pouvez voir l’ID de chaque processus, l’utilisateur qui l’a démarré et la commande en cours d’exécution.
Vous pouvez également obtenir ces informations à partir de l’API. Utilisez la même approche que celle décrite ci-dessus, en remplaçant le /containers/{id}/stats
point final pour /containers/{id}/top
.
Docker ne fournit pas de moyen intégré de visualiser l’utilisation des ressources par processus. Si vous voulez ces informations, il est préférable de les attacher au conteneur et d’installer top
ou alors htop
. Ces outils vous donneront une vue beaucoup plus approfondie de l’activité du conteneur.
docker exec -it my-container sh # substitute your package manager's commands apt update && apt install htop -y htop
Résumé
Le démon Docker collecte et expose des statistiques de consommation de ressources en temps réel et historiques sur vos conteneurs. Vous pouvez accéder à une vue graphique de base des données en utilisant docker stats
mais pour des lectures plus avancées, l’API Docker ou l’inspection manuelle du groupe de contrôle est nécessaire.
Vous pouvez également répertorier les processus en cours d’exécution d’un conteneur, mais le docker top
La commande ne fournit aucune indication sur les métriques de ressources. Cela signifie qu’il est d’une utilité limitée lors de l’inspection Pourquoi un conteneur contient trop de CPU ou de mémoire. Vous devrez vous y attacher manuellement et inspecter de l’intérieur.
Les outils de Docker ciblent la surveillance et l’observabilité générales, et non l’inspection détaillée pour faciliter la résolution des problèmes. La plupart du temps, ils sont parfaitement adéquats mais une bonne connaissance des outils de supervision Linux plus larges qui fonctionnent à l’intérieur les conteneurs seront plus efficaces pour résoudre les problèmes.