GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Überwachung von Docker-Containern:Vorteile, Best Practices und unverzichtbare Tools

Vor acht Jahren waren Container eine bekannte Technologie, aber mit geringer öffentlicher Akzeptanz. Dann entwickelte Solomon Hykes Docker, eine Container-Technologie, die die Verwendung von Containern viel einfacher macht. Heute beherrschen Container die IT-Welt. Gartner prognostiziert, dass 70 % der Unternehmen bis 2023 containerisierte Anwendungen ausführen werden.

Wieso den? Organisationen erkennen die Vorteile einer einfacheren Konfiguration, einer schnelleren Bereitstellung und der Möglichkeit, mehr Workloads auf derselben Hardware mit containerisierten Anwendungen auszuführen.

Um Container optimal zu nutzen, ist die Überwachung von Docker-Containern ein Muss. Ohne Containerüberwachung fahren Sie im Dunkeln. Sie können buchstäblich nicht sehen, wie gut Ihre Container funktionieren, was sie tun oder wie gut sie ihre Arbeit erledigen.

Außerdem können Sie ohne Docker-Containerüberwachung nicht wissen, wie die auf Containern aufgebauten Microservices und Anwendungen funktionieren. Durch die Containerüberwachung wissen Sie, was mit den Containern selbst und mit Ihren größeren, benutzerorientierten Programmen los ist.

Docker-Container-Überwachung:Die Grundlagen

Ein Hauptgrund für die Beliebtheit von Containern ist, dass sie sich für Continuous Integration/Continuous Deployment (CI/CD) eignen. Dies ist eine DevOps-Methodik, die es Programmierern ermöglichen soll, ihren Code frühzeitig und häufig in ein gemeinsam genutztes Repository zu integrieren. Dort angekommen, werden containerisierte Programme schnell und effizient bereitgestellt.

Docker ermöglicht es Entwicklern auch, jede Anwendung als leichten, tragbaren, autarken Container zu verpacken, zu versenden und auszuführen, der praktisch überall ausgeführt werden kann. Container bieten Ihnen sofortige Anwendungsübertragbarkeit.

Container tun dies, indem sie es Entwicklern ermöglichen, Code in einem einzigen Container zu isolieren, wodurch es effizienter wird, das Programm zu ändern und zu aktualisieren. Es ermöglicht Unternehmen, große Entwicklungsprojekte mithilfe von CI/CD-Pipelines auf mehrere kleinere Agile-Teams aufzuteilen, um die Bereitstellung von neuem und aktualisiertem Code über Container zu automatisieren.

Schließlich, und vielleicht der wichtigste Punkt für Unternehmen, ermöglichen Container es Unternehmen, Hardware- und Cloud-Ressourcen zu maximieren. Wie James Bottomley, ehemaliger CTO für Servervirtualisierung bei Parallels und führender Linux-Kernel-Entwickler, erklärte:„VM-Hypervisoren wie Hyper-V, KVM und Xen basieren alle auf der Emulation virtueller Hardware. Das bedeutet, dass sie in Bezug auf die Systemanforderungen fett sind."

Container verwenden jedoch gemeinsam genutzte Betriebssysteme, sodass sie in Bezug auf Systemressourcen viel dünner sind als Hypervisoren. Anstatt Hardware zu virtualisieren, ruhen Container auf einer einzigen Linux-Instanz. Das bedeutet, dass Sie „den zu 99,9 Prozent nutzlosen VM-Müll hinter sich lassen und eine kleine, ordentliche Kapsel mit Ihrer Anwendung zurücklassen können“, wie Bottomley sagt. Mit anderen Worten, mit einem gut abgestimmten Containersystem können Sie bis zu vier bis sechs Container auf einem System ausführen, das in der Vergangenheit nur eine einzige Instanz hätte ausführen können.

Heute gibt es viele Arten von Containerplattformen. Während Docker am bekanntesten ist, gibt es auch LXC, runC, containerd und Podman. Sie alle führen ähnliche Funktionen aus und können weitgehend mit den gleichen Tools verwaltet werden.

Was ist Docker?

Also, was ist Docker speziell? Docker baut auf LXC auf. Wie bei jedem anderen Container hat jedes Programm, das auf Docker ausgeführt wird, ein eigenes Dateisystem, einen eigenen Speicher, eine eigene CPU und einen eigenen RAM. Der Hauptunterschied zwischen Containern und VMs besteht darin, dass der Hypervisor ein ganzes Gerät abstrahiert, Container jedoch nur den Kernel des Betriebssystems abstrahieren. Alle Vorteile von Docker ergeben sich allein aus diesem einfachen Mechanismus.

Warum war es erfolgreich, wenn seine Vorgänger wie FreeBSD Jails, Oracle Solaris Zones und OpenVZ es Containern ermöglichten, gut und sicher zu funktionieren, aber wenig Markterfolg hatten? Container waren teilweise erfolgreich, aber unsichtbar. Beispielsweise nutzte Google über ein Jahrzehnt lang sein eigenes Open-Source-Containerprogramm lmctfy (Let Me Contain That For You). Jedes Mal, wenn Sie Google-Funktionen verwendet haben, z. B. Suche, Gmail, Google Docs, wurden diese in einem unsichtbaren Container ausgeführt.

Was Docker auf den Tisch bringt, ist, dass es Container sicherer und effizienter in der Bereitstellung und Verwendung macht als frühere Ansätze. Darüber hinaus bringt die Partnerschaft von Docker mit den anderen Container-Mächten, darunter Canonical, Google, Red Hat und Parallels, bei seiner Schlüssel-Open-Source-Komponente libcontainer die dringend benötigte Standardisierung für Container.

Docker spendet das Containerformat libcontainers und seine Laufzeit sowie die zugehörigen Spezifikationen an das Open Container Project der Linux Foundation. Insbesondere umfasst dies den gesamten Inhalt des libcontainer-Projekts, einschließlich nsinit, und alle Änderungen, die erforderlich sind, damit es unabhängig von Docker läuft.

Docker arbeitet weiterhin an anderen Container-Standardisierungsbemühungen. Beispielsweise spendete Docker containerd, seine Open-Source-Container-Laufzeitumgebung, an die Cloud Native Computing Foundation (CNCF). Standardisierung spielt eine große Rolle beim Erfolg von Docker.

Anders als andere Container-Technologien unterstützt Docker auch Software-Defined Networking (SDN). Dadurch können DevOps-Teams Netzwerke für Container definieren, ohne sich Gedanken über Hardware-Switches machen zu müssen. Stattdessen bauen sie komplexe Netzwerktopologien auf und definieren Netzwerke über Konfigurationsdateien.

Gleichzeitig ermöglichen SDN und Docker die Nutzung von Microservices. Zusammen machen sie es effizienter, Anwendungen aus lose gekoppelten Diensten zu erstellen, die über bekannte Protokolle wie HTTP und TCP zusammenarbeiten.

Schließlich ist der Erfolg von Docker zu einem großen Teil darauf zurückzuführen, dass es einfach die richtige offene Technologie zur richtigen Zeit ist, um Benutzern zu helfen, die Vorteile der Cloud-Computing-Revolution zu nutzen.

Was ist Containerüberwachung?

Ein häufiges Szenario für Unternehmen ist, dass sie Docker verwenden und über Hunderte bis Hunderttausende von Containern verfügen, auf denen Anwendungen ausgeführt werden, die für Ihr Unternehmen von entscheidender Bedeutung sind. Um sie zu orchestrieren, verwenden sie wahrscheinlich Kubernetes. Wie CNCF CTO Chris Aniszczyk sagt, gibt es eine wachsende Lücke im Verständnis, dass Kubernetes und Container im Wesentlichen ein Pauschalangebot sind. Es gibt andere Container-Orchestrierungsprogramme, aber Kubernetes ist der überwältigende Marktführer. Von diesen berichtet Datadog, dass fast 90 % der Kubernetes-Benutzer Cloud-verwaltete Dienste nutzen, gegenüber fast 70 % im Jahr 2020.

Das ist großartig, soweit es geht. Aber Kubernetes steuert, implementiert und skaliert Container. Es überwacht sie nicht.

Die Überwachung ist kompliziert. Container sind vergänglich. Sie drehen sich in wenigen Minuten auf und ab. Der durchschnittliche Kubernetes-Container reicht für einen einzigen Tag. Die Tools, mit denen Sie traditionelle Anwendungen überwachen, die auf virtuellen Servern oder Bare-Metal-Servern ausgeführt werden, sind dieser Aufgabe nicht gewachsen. Zu dem Zeitpunkt, an dem Ihr Überwachungsprogramm einen Bericht anfordert, ist der Container möglicherweise aus dem Blickfeld verschwunden und hat alle darin enthaltenen Protokolle mitgenommen.

Die Vorteile der Containerüberwachung

Obwohl es komplex ist, ist die Containerüberwachung von entscheidender Bedeutung. Wie Systemadministrator Gary Williams es ausdrückt:„Man kann nicht zu viel Überwachung haben.“ Gary hat recht.

Zu den Vorteilen der Containerüberwachung gehören:

  • Probleme proaktiv identifizieren, um Systemausfälle zu vermeiden.
  • Überwachung von Zeitreihendaten, damit Anwendungen besser laufen.
  • Ressourcenzuweisung optimieren.
  • Erkennen von Problemen so früh wie möglich, um Probleme schnell zu lösen.

Die Überwachung von Containern ist ebenfalls von entscheidender Bedeutung, da containerbasierte Anwendungen ständig von Ransomware- und Kryptowährungsangriffen angegriffen werden. Kurz gesagt, sowohl für die Sicherheit als auch für die Leistung ist die Überwachung Ihrer Container ein Muss. Dies sind die gleichen Gründe, warum Sie alle Ihre Systeme überwachen, und Container sind nicht anders.

Überwachungsprogramme stehen vor anderen Herausforderungen beim Sammeln von Beobachtbarkeitsdaten aus Containern. Es gibt mehrere Methoden der Datenerhebung. Dazu gehören:

  • Bereitstellen eines dedizierten Überwachungsagenten als Hostanwendung oder Container.
  • Bereitstellen eines Protokollrouters zum automatischen Sammeln von Protokollen, die von Containern generiert werden.
  • Verwenden des Docker-Protokollierungstreibers zum Speichern von Containerprotokollen auf dem Host.
  • Erfassen von Metriken über Docker-Statistiken, die Kubernetes-Metrikpipeline oder eine ähnliche API.

Die Containerüberwachung deckt grundlegende Metriken wie Speicherauslastung, CPU-Auslastung, CPU-Limit und Speicherlimit ab. Ihre Überwachungsprogramme sollten auch Echtzeit-Streaming-Protokolle, Nachverfolgung und Beobachtbarkeit bieten.

Auf einer höheren Ebene müssen Sie neben dem Sammeln und Zentralisieren von Überwachungsdaten von Containern und ihren Hosts die Daten der gesamten Anwendung statt einzelner Container sammeln und analysieren.

Wie Minh Dao von LogDNA es ausdrückte:„Stellen Sie sich vor, Sie haben eine dreischichtige Webanwendung, wobei jede Schicht als separater Container ausgeführt wird. Stellen Sie sich nun vor, dass Ihre Backend-Ebene plötzlich anfängt, Fehler zu generieren, und Container als Folge davon abstürzen. Das Abrufen von Protokollen und Metriken aus einzelnen Containern hilft bei der Ursachenanalyse, aber das hilft Ihnen nicht, den Fehler im Kontext der gesamten Anwendung zu sehen. Das Problem kann containerspezifisch sein oder auf ein allgemeineres, anwendungsweites Problem hindeuten.“

Setzen Sie alles zusammen und es gibt keine Frage. Sie müssen Ihre Container überwachen.

Die fünf besten Tools zur Containerüberwachung

Viele der besten Container-Überwachungsprogramme sind Open-Source-Programme. Linode bietet die Grundlagen für den Einstieg in den Stack Elasticsearch, Logstash und Kibana (ELK) mit Filebeat und Metricbeat mit Kibana und Zeitreihenanalyse mit Graphite und einem Grafana Dashboard. Mit etwas Aufwand können Sie Ihr eigenes Container-Überwachungssystem aufbauen.

Die Programme in der folgenden Liste sind in alphabetischer Reihenfolge, nicht in der Reihenfolge vom Besten zum Schlechtesten. Das liegt daran, dass Sie sie nicht fair einordnen können. Sie alle haben ihre eigenen Stärken und Schwächen und messen oft unterschiedliche Metriken. Wenn Sie Ihre Container also ernsthaft im Auge behalten möchten, müssen Sie wahrscheinlich mehrere dieser Programme verwenden.

Container-Berater (cAdvisor)

Googles Container Advisor (cAdvisor) ist ein Open-Source-Überwachungsprogramm. Es wird als Daemon ausgeführt, der Ressourcennutzungs- und Leistungsdaten von Zielcontainern sammelt, aggregiert und exportiert. Es verfolgt die Ressourcenisolationsparameter jedes Containers, die historische Ressourcennutzung, Histogramme der vollständigen historischen Ressourcennutzung und Netzwerkstatistiken. Diese Daten werden container- und maschinenweit exportiert.

Das Programm wird mit nativer Unterstützung für Docker-Container geliefert und ist so konzipiert, dass es so ziemlich alle anderen Containertypen sofort unterstützt. Es legt auch Prometheus-Metriken offen. Mit anderen Worten, cAdvisor sammelt die Daten, während Prometheus sie kratzt. Die Container-Abstraktion von CAdvisor basiert auf der von lmctfy, sodass Container von Natur aus hierarchisch verschachtelt sind.

Sie können cAdvisor-Builds als Images auf Ihren Docker-Hosts installieren. Das Programm bietet außerdem sowohl eine Web-Benutzeroberfläche (UI) als auch eine REST-Anwendungsprogrammierschnittstelle (API). Damit können Sie sowohl Ihre Docker-Container direkt überwachen als auch Metriken über Webservice-Endpunkte in eine externe Anwendung integrieren.

Datenhund

Datadog wird von Docker aus gutem Grund empfohlen. Es bietet zahlreiche Überwachungstools, die Container-, Infrastruktur- und anwendungsbezogene Metriken verfolgen.

Die Benutzeroberfläche und das Dashboard sind ebenfalls sehr praktisch. Mit seinen Echtzeitdaten können Sie verschiedene Visualisierungen einrichten, einschließlich Zeitreihen, Abfragewert, Top-Liste, Tabelle, Heatmap, Baumkarte, Kreisdiagramm, Hostkarte, Protokollstream, Liste, Alarmwert, Servicekarte und mehr . Es korreliert automatisch Daten und visualisiert ungewöhnliches Verhalten.

Das Herz von Datadog ist proprietär, aber der Datadog-Agent und alle anderen Programme, die auf Ihren Computern und Clouds ausgeführt werden, sind Open Source.

Die Überwachung ist über Trace-Anforderungen verfügbar, die ihre grafischen Visualisierungen und Warnungen speisen. Das Programm sammelt Daten zu Diensten, Anwendungen und Plattformen über detaillierte Protokolldaten.

Das Programm ist ein Monitoring-Ökosystem. Neben Ihren Containern überwacht es so ziemlich alles. Dies geschieht teilweise durch die Unterstützung der meisten Telemetrieprogramme und -protokolle wie StatsD, OpenMetrics und OpenTelemetry.

Obwohl es hauptsächlich als Software-as-a-Service (SaaS) verkauft wird, kann es auch vor Ort bereitgestellt werden.

Elasticsearch und Kibana

Elasticsearch ist eine Java-basierte Open-Source-Suchmaschine, die von der Apache Lucene-Bibliothek abgeleitet ist. Es bietet eine verteilte, mandantenfähige Volltextsuchmaschine mit HTTP-Webinterface und schemafreien JSON-Dokumenten. Es ist das Herzstück des ELK-Stacks.

Das Partnerprogramm Kibana ist eine kostenlose, offene Benutzeroberfläche zur Visualisierung Ihrer Elasticsearch-Daten und zur Navigation im ELK-Stack. Sie können Abfragelasten verfolgen, um zu sehen, wie Anfragen damit durch Ihre Apps fließen. Kibana wird mit den üblichen UI-Dashboard-Klassikern geliefert:Histogramme, Liniendiagramme, Tortendiagramme, Sunbursts und mehr. Und natürlich können Sie alle Ihre Dokumente durchsuchen.

Für Containerüberwachungszwecke verwenden Sie Filebeat und Metricbeat, um Containerdaten automatisch zu erfassen. Filebeat findet automatisch Container und speichert ihre Protokolle in Elasticsearch. Sie stellen Metricbeat automatisch in Ihren Containern bereit. Dort erfasst es CPU-Auslastung, Arbeitsspeicher, Dateisystem, Festplatten-E/A und Netzwerk-E/A-Statistiken auf Systemebene. Seine in Go geschriebenen Module können auch Programme innerhalb der Container wie Apache, NGINX, MongoDB, MySQL, PostgreSQL und Prometheus im Auge behalten. Auf all diese Daten kann dann über Kibana zugegriffen werden.

Es ist sehr flexibel. Sie müssen viel Zeit aufwenden, um zu lernen, wie man es konfiguriert und verwendet, aber es lohnt sich.

Prometheus und Grafana

Wie Elasticsearch und Kibana sind Prometheus und Grafana Open-Source-Programme, mit denen Sie Ihre eigenen Überwachungssysteme erstellen können. Es ist komplex, aber die Arbeit lohnt sich.

Prometheus speichert Daten als Zeitreihen. In Zeitreihen werden Daten als Streams von Werten mit Zeitstempel für denselben Messwert und denselben Satz beschrifteter Dimensionen aufbewahrt.

Prometheus, ein CNCF-Projekt, kratzt Metriken direkt aus Containern oder über ein Push-Gateway. Die geschabten Proben werden lokal gespeichert und Regeln werden auf ihre Daten angewendet, um neue Zeitreihen zu aggregieren und zu generieren oder benutzerdefinierte Warnungen zu generieren.

Das Hauptaugenmerk von Prometheus liegt eher auf Zuverlässigkeit als auf Genauigkeit. Das Programm tut dies, indem es jeden Prometheus-Server mit einem lokalen Zeitreihen-Datenbankspeicher eigenständig macht, um die Abhängigkeit von Remote-Diensten zu vermeiden. Dieses Design macht Prometheus zu einem idealen Tool, auf das man sich verlassen kann, um Probleme schnell zu identifizieren und Echtzeit-Feedback zu erhalten. Daher wird es normalerweise in hochdynamischen Systemen wie containerbasierten Mikrodiensten verwendet, die in einer Cloud ausgeführt werden.

Prometheus hat ein eigenes Web-Dashboard, oder Sie können mit seiner API Daten daraus extrahieren. Als Standardschnittstelle wird Grafana verwendet.

Sysdig

Sysdig ist eine kommerzielle Cloud-Überwachungsplattform, die Hand in Hand mit Prometheus arbeitet. Dadurch erhalten Sie Zugriff auf Zeitreihendaten, ohne Ihr eigenes Prometheus-Überwachungssystem aufbauen zu müssen.

Sysdig verfolgt Docker-Daten direkt aus Container-Metadaten, um Sicherheit und Überwachung zu ermöglichen. Docker empfiehlt Sysdig als Überwachungslösung für containerisierte Anwendungen.

Sysdig integriert auch Linux-Überwachungsprogramme in eine einzige, konsistente Oberfläche. Das Programm tut dies auf Betriebssystemebene, indem es sich in den Linux-Kernel integriert. Es erfasst Systemaufrufe und andere Betriebssystemereignisse.

Seine einzigartige Kombination aus Prometheus und Einblick in Betriebssysteme auf niedriger Ebene macht es zu einem leistungsstarken Überwachungstool.

Schlussfolgerung

Behälterüberwachung ist ein Muss, keine Nettigkeit. Ohne Überwachung ist der Betrieb von Containern wie das Fahren auf einer dunklen, kurvenreichen Autobahn ohne Scheinwerfer.

Das von Ihnen gewählte Überwachungsprogramm hängt von Ihrem Anwendungsfall, Ihrem Budget und den in Ihrer Organisation verfügbaren IT-Ressourcen ab. Sie können Ihre eigenen Container-Überwachungssysteme mit den vielen verfügbaren Open-Source-Programmen erstellen oder sich für ein kommerzielles Paket entscheiden. Unabhängig davon, für welches Überwachungsprogramm Sie sich entscheiden, ist es eine wesentliche Komponente für die Integrität und Stabilität Ihrer containerisierten Webanwendungen.


Docker
  1. So exportieren und importieren Sie Docker-Container

  2. So listen Sie Docker-Container auf

  3. Anwendungen in Docker-Containern installieren, ausführen und löschen – Teil 2

  4. So sichern und wiederherstellen Sie Docker-Container

  5. So halten Sie Docker-Container an und setzen sie fort

So verwenden Sie Docker Cp zum Kopieren von Dateien zwischen Host und Containern

So stellen Sie einen Docker-MongoDB-Container bereit und verwalten ihn

So führen Sie Docker-Container aus

So benennen oder umbenennen Sie Docker-Container

ctop – Top-ähnliche Schnittstelle zur Überwachung von Docker-Containern

Entwickeln auf Docker mit den neuen und verbesserten Visual Studio Container Tools (und WSL2)