So überwachen Sie die Ressourcennutzung von Docker-Containern

0
520

Docker ist zwar viel leichter als herkömmliche VMs, aber zu viele Container können schnell verbrauchen die Ressourcen Ihres Hosts. So überprüfen Sie die Hardwareauslastung und überwachen die Prozesszahlen in Ihren Containern.

Der Docker Stats-Befehl

Docker’ 8217;s eingebauter Mechanismus zum Anzeigen des Ressourcenverbrauchs sind Docker-Statistiken. Mit diesem Befehl erhalten Sie eine tabellarische Ansicht Ihrer Container. Jeder Container zeigt einen Live-Feed seiner kritischen Messwerte an.

Die Ausgabe des Befehls umfasst den CPU-Verbrauch und ein Maß für die Netzwerk- und Speichernutzung jedes Containers während seiner Lebensdauer. Die Spalte Speicher zeigt die Live-Speichernutzung sowie das für den Container konfigurierte Speicherlimit an. Wenn kein Limit festgelegt ist, sehen Sie, wie viel RAM auf Ihrem Host verfügbar ist. Die letzte Spalte, PIDS, ist eine Zählung der vom Container gestarteten Prozesse.

Angehaltene Container werden standardmäßig ausgeschlossen. Sie können sie der Tabelle hinzufügen, indem Sie das Flag -a (–all) an den Befehl übergeben. Die CPU- und Arbeitsspeichernutzung ist nicht verfügbar, aber Sie können die Messwerte anzeigen, die während der Lebensdauer des Containers aggregiert wurden, z. B. die Netzwerkaktivität.

Sie können die Statistiken einzelner und mehrere Container auf dieselbe Weise wie andere gängige Docker-CLI-Befehle. Übergeben Sie eine Liste mit durch Leerzeichen getrennten Container-IDs oder -Namen. Die Ausgabe zeigt die Metriken für die angegebenen Container an und entfernt alles andere.

docker stats first-container second-container Werbung

docker stats unterstützt benutzerdefinierte Formatierungen, sodass Sie nur die benötigten Spalten auswählen können. Das Flag –format akzeptiert eine Go-Platzhalterzeichenfolge, mit der Sie benutzerdefinierte Datenvisualisierungen erstellen können.

So zeigen Sie Containernamen mit CPU- und Speichernutzungsmetriken an:

docker stats — format “Tabelle {{.Name}}t{{.CPUPerc}}t{{.MemUsage}}”

Der Tabellenformatierungstyp stellt der Ausgabe Spaltenüberschriften voran. Lassen Sie dies weg, wenn Sie die Rohdaten ohne Tabellierung wünschen. Wenn Sie dieselbe Formatierungszeichenfolge regelmäßig verwenden, sollten Sie sie für einen einfacheren Zugriff als Shell-Alias ​​hinzufügen.

Weitere Informationen abrufen

Weitere Informationen Informationen zur Ressourcennutzung eines Containers können durch Überprüfen seiner Kontrollgruppe (cgroup) abgerufen werden. Dieser Kernel-Mechanismus verfolgt den Verbrauch einer Gruppe von Prozessen und legt gesammelte Metriken in einem Pseudo-Dateisystem offen.

Es stehen zwei Versionen des cgroup-Systems zur Verfügung. v2 wird nur auf Docker 20.10 oder höher mit Linux-Kernel v4.15 unterstützt. Ältere Versionen verwenden v1. Die Dokumentation zu v2 ist noch unvollständig, daher kann die Arbeit mit v1 einfacher sein.

Um die Kontrollgruppe eines Containers zu finden, müssen Sie feststellen, welche Version aktiv ist und ob der Container voll ist ICH WÜRDE. Dies muss die vollständige Version sein, nicht die abgeschnittene Form, die in der Ausgabe von docker ps und docker stats angezeigt wird. Sie finden es, indem Sie docker ps –no-trunc ausführen.

Werbung

Kombinieren Sie die Container-ID mit dem Pfad zum Kontrollgruppenverzeichnis Ihres Systems. Pfade für v1 und v2 werden von Docker dokumentiert. Dann können Sie das Pseudo-Dateisystem untersuchen, um detaillierte Ressourcenstatistiken zu finden. Hier ist der Pfad zum Ermitteln der Speichernutzung eines Containers bei Verwendung von cgroups v1:

cat /sys/fs/cgroup/memory/docker/<full container id>/memory.stat

Die Speicherdatei bietet detaillierte Informationen zu Verbrauch, Limits, Paging und Swap-Nutzung.

Suchen von Ressourcenmetriken mit der Docker-API< /h2>

Eine einfachere Möglichkeit, auf diese Informationen zuzugreifen, ist über die Docker-API. Dies ist standardmäßig über den Unix-Socket des Docker-Daemons aktiviert. Der Endpunkt /containers/{id}/stats bietet detaillierte Details zur Ressourcennutzung. Ersetzen Sie {id} durch die ID Ihres Containers.

curl –unix-socket /var/run/docker.sock “http://localhost/v1.41/containers/{id}/stats” | jq

In diesem Beispiel verwenden wir curl. Es wird angewiesen, den Docker-Daemon-Socket über das Flag –unix-socket zu verwenden. Die Docker-API gibt Daten im JSON-Format zurück. dies wird in jq geleitet, um es im Terminal besser lesbar zu machen.

Jede API-Antwort enthält detaillierte Informationen zur aktuellen und vergangenen Ressourcennutzung des Containers. Es sind numerische Daten, die für den Verbrauch durch Werkzeugmaschinen bestimmt sind. Die Werte werden als “raw” und ist ohne weitere Verarbeitung oder Aufnahme in ein Dashboard-Tool möglicherweise nicht sofort verständlich.

Anzeigen laufender Prozesse

Ein separater Befehl, docker top, lässt Sie die aktuelle Prozessliste eines bestimmten Containers anzeigen:

docker top my-container Werbung

Er zählt den Container auf&# 8217;s Prozessliste zum Zeitpunkt der Befehlsausführung. Im Gegensatz zu Statistiken bietet es keinen Live-Datenstrom. Sie können jeden Prozess sehen’ ID, der Benutzer, der ihn gestartet hat, und der Befehl, der ausgeführt wird.

Sie können diese Informationen auch von der API abrufen. Verwenden Sie den gleichen Ansatz wie oben beschrieben, und ersetzen Sie /containers/{id}/top durch den Endpunkt /containers/{id}/stats.

Docker bietet keine integrierte Möglichkeit, Per- Ressourcenauslastung des Prozesses. Wenn Sie diese Informationen wünschen, befestigen Sie sie am besten am Container und installieren Sie top oder htop. Diese Tools geben Ihnen einen viel tieferen Einblick in die Aktivitäten des Containers.

docker exec -it my-container sh # Ersetzen Sie die Befehle Ihres Paketmanagers apt update && apt install htop -y htop

Zusammenfassung

Der Docker-Daemon sammelt und stellt Echtzeit- und historische Ressourcenverbrauchsstatistiken über Ihre Container bereit. Sie können mithilfe von Docker-Statistiken auf eine grundlegende grafische Ansicht der Daten zugreifen, aber für erweiterte Auslesungen ist die Docker-API oder die manuelle Überprüfung der Kontrollgruppe erforderlich.

Sie können auch die laufenden Prozesse eines Containers auflisten, aber die Der Befehl docker top liefert keinen Hinweis auf Ressourcenmetriken. Dies bedeutet, dass es von begrenztem Nutzen ist, wenn untersucht wird, warum ein Container übermäßig viel CPU oder Speicher enthält. Sie müssen es manuell anhängen und von innen prüfen.

Die Tools von Docker zielen auf allgemeine Überwachung und Beobachtbarkeit ab, nicht auf eine detaillierte Prüfung, um die Lösung von Problemen zu erleichtern. Meistens sind sie vollkommen ausreichend, aber gute Kenntnisse über umfassendere Linux-Überwachungstools, die in Containern arbeiten, sind bei der Lösung von Problemen effektiver.