kalafoto - stock.adobe.com
Tipp: Protokolle der Containerumgebung nutzbar machen
Protokolldaten von Containern sind zu wertvoll, um auf dem Host zu versauern. Mit der richtigen Strategie werden sie zum wichtigen Werkzeug beim Troubleshooting von Containern.
Container sind zu einem willkommenen Ansatz geworden, um zentrale Prozesse eines Unternehmens wie kontinuierliche Entwicklung, Automatisierung und unveränderliche Infrastruktur unterzubringen. Sie sind flexibel und können sich schnell vermehren, wenn sich die Arbeitsbelastung ändert – was jedoch die Verwaltung und Wartung von Containern verkompliziert.
Protokolle (Log-Dateien) und Protokollmanagement sind das Kernstück einer Containerverwaltungsstrategie und ermöglichen Containertransparenz, Fehlerbehebung und Leistungsverbesserungen.
Die Herausforderung bei Container-Protokollen
IT-Administratoren können Container schneller hoch- und herunterfahren als virtuelle Maschinen (VMs), was die Infrastruktur schneller skalierbar macht. Infolgedessen sind Container oft kurzlebig und bestehen nur für wenige Sekunden, je nachdem, wie lange die Instanz benötigt wird.
Aufgrund ihrer transienten Natur sind Container ideal für die agile Softwareentwicklung. Container stellen aber auch neue Herausforderungen an das Virtualisierungsmanagement, insbesondere im Bereich der Protokolle und der Protokollverwaltung.
Kurze Lebenszyklen machen es schwierig, Protokolldaten zu speichern. Aufgrund ihrer kurzen Lebensdauer sind Container im Idealfall zustandslose und nicht persistente Entitäten; sie sind eigentlich nicht für die Speicherung persistenter Daten ausgelegt. Dies macht es zu einer Herausforderung, Protokolle zu sammeln und zu speichern. Wenn zum Beispiel ein Protokoll an den Container selbst gebunden ist, wird beim Anhalten des Containers in der Regel auch die Protokollsammlung für diesen Container gestoppt, und die Daten werden vernichtet, sofern sie nicht anderweitig geschützt, oder in eine Speicherressource exportiert wurden.
Die Containerprotokollierung muss mehrere Perspektiven umfassen. Es gibt drei verschiedene Umgebungen oder Ebenen, die gemeinsam eine Anwendung ausführen: der Container selbst, die Container-Engine, wie zum Beispiel der Docker-Dämon, und das gemeinsam genutzte Host-Betriebssystem. Die ordnungsgemäße Protokollierung in einer containerisierten Umgebung muss Ereignisse in allen drei Umgebungen identifizieren und miteinander in Verbindung bringen, so dass IT- oder Entwicklungsteams die Ursache von Problemen zurückverfolgen können.
Eine verbesserte Containersicherheit erhöht die Komplexität der Protokollierung. Betriebssystem-Schwachstellen können alle Container betreffen, die einen gemeinsamen Kernel verwenden, deshalb führen einige Organisationen Container innerhalb einer VM aus. Admins müssen dann aber nicht nur die Aktivitäten in der Anwendung, der Engine und dem Host-Betriebssystem protokollieren, sondern auch in der zugehörigen VM und im Hypervisor.
Vier Optionen für die Containerprotokollierung
Admins sollten ihren Ansatz für die Containerprotokollierung auf der Grundlage der individuellen Anforderungen ihres Unternehmens wählen, prinzipiell jedoch sowohl im Bezug auf die Anwendung, als auch das Host-Betriebssystem und die Container-Engine anwenden.
Es gibt vier gängige Optionen:
Anwendungsbasierte Protokollierung: Bei diesem Ansatz führt die Anwendung innerhalb des Containers ihre eigene Protokollierung durch. Beispielsweise kann eine Java-Anwendung innerhalb eines Containers das Dienstprogramm Apache Log4j verwenden, um Protokolle zu erstellen und diese Protokolleinträge an einen zentralen Server außerhalb der Containerumgebung zu senden. Diese Methode erinnert am ehesten an die Protokollierung in traditionellen monolithischen Anwendungen und ist daher äußerst hilfreich für Organisationen, die auf Containertechnologien erst umstellen.
Der anwendungsbasierte Ansatz bildet jedoch nicht den Zustand der Containerumgebung ab, so dass die Protokollierung weder das Betriebssystem noch die Container-Engine erfasst. Da das Protokollierungs-Dienstprogramm außerdem innerhalb des Containers selbst läuft, erhöht es die Last und senkt dadurch möglicherweise sogar die Leistung der Anwendung. Außerdem sind solche Protokollierungs-Tools häufig auf lokalen, nicht persistenten Speicherplatz eingestellt, so dass Protokolldaten bei der Zerstörung des Containers verloren gehen, wenn Administratoren keine Weiterleitung einrichten.
Volume-basierte Protokollierung: Wie bereits erwähnt, können Administratoren auf die Protokolldaten nach dem Verschwinden des Containers nur zugreifen, wenn sie zuvor einen externen Speicherort eingerichtet haben – oder die Protokolldaten in einem Daten-Volume speichern.
Eine Container-Engine, wie zum Beispiel Docker, unterstützt die Volume-Speicherung in einem Verzeichnisbereich, der speziell für die Verwendung der Container-Engine reserviert und dieser zugeordnet ist. Mit dieser Funktion können mehrere Container ein einziges Volume gemeinsam nutzen.
Das erleichtert die Zentralisierung von Protokollaktivitäten in der gesamten Containerumgebung. Da die Protokolldaten gespeichert werden, können Admins sie zur Analyse oder zum Schutz der Daten kopieren und sichern. Der einzige Nachteil der Volume-Funktion ist, dass der Speicherbereich für eine entsprechende Container-Engine eingerichtet ist; das Verschieben von Containern auf verschiedene Hosts kann somit die Datenspeicherung unterbrechen, was zum Verlust von Protokolldaten führen kann.
Docker-native Protokollierung: Eine andere Möglichkeit, Protokolldaten zur Korrelation und Analyse weiterzuleiten, ist ein Protokollierungstreiber oder -dienst, der für die Container-Engine nativ ist, zum Beispiel der Docker-Protokollierungstreiber. Dieser leitet Protokollereignisse von jedem Container an eine Syslog-Instanz auf einem Host-System weiter.
Ein systemeigener Protokollierungstreiber sammelt Protokollereignisse von den stdout- und stderr-Ausgabe- oder Fehlerpfaden des Containers. Er bietet eine einfache und direkte Möglichkeit, Protokolle zu zentralisieren, ohne dass eine Interaktion mit Protokolldateien erforderlich ist.
Ein dedizierter Logging-Container: Bei den obigen Beispielen handelt es sich um Dienste zur dauerhaften Erfassung und Weiterleitung von Protokolldaten. Ein alternativer Ansatz ist es, einen dedizierten Protokollierungscontainer einzurichten, den die Administratoren innerhalb der Container-Engine selbst verwalten.
Der Protokollierungscontainer ist in der Lage, Protokolle von einer Reihe von Containern zu empfangen, zu sammeln, zu speichern und zur Analyse an eine Anwendung oder einen Dienst weiterzuleiten. Beispielsweise kann ein Container ein Tool wie logspout ausführen, um stdout- und stderr-Daten von beliebigen Containern auf dem Host-System zu erfassen und diese Daten dann an einen externen Syslog-Dienst weiterzuleiten.
Das Konzept des Logging-Containers ist gut auf Microservices-Architekturen abgestimmt. Der Hauptvorteil von dedizierten Logging-Containern ist die Mobilität – ein Array von Containern, einschließlich des Logging-Containers, kann sich leicht von System zu System bewegen, ohne dass man sich um irgendwelche Abhängigkeiten von einem bestimmten Host kümmern muss.
Best Practices für die Verwaltung von Containerprotokollen
Es gibt mehr als nur einen Weg, Containerprotokollierung erfolgreich einzusetzen. Einige haben sich aber in der Praxis besonders bewährt.
Leistungseinbußen vermeiden:
Jede Methode der Containerprotokollierung, wie sie im vorigen Abschnitt beschrieben wurde, bringt Kompromisse in Bezug auf Komfort und Anwendungsleistung mit sich. Administratoren sollten die Protokollierungsvariante dahingehend testen, ob sie eine angemessene Protokollierung ohne negative Auswirkungen auf die zugrunde liegende Anwendung gewährt.
Auf Container spezialisierte Tools einsetzen:
Die Schnelligkeit und Vergänglichkeit von Containern kann es schwierig machen, sie zu Überwachungsplattformen hinzuzufügen oder von ihnen zu entfernen. Admins sollten deshalb zentralisierte Tools wie die Docker App for Sumo Logic und Googles cAdvisor, die für den Betrieb mit Container-Engines zur Überwachung und Verwaltung von Containern entwickelt wurden.
Integrationsmöglichkeiten beachten:
Idealerweise sollte ein Containerüberwachungs- und -verwaltungs-Tool mit einer Vielzahl von Plattformen und Engines kompatibel sein, um Protokolle über komplexe Infrastrukturen hinweg zu liefern. Dadurch wird die Anzahl der zur Unterstützung der Umgebung erforderlichen Tools reduziert und eine umfassendere Korrelation und Analyse ermöglicht. Tools wie Sumo Logic bieten Dutzende von Integrationsmöglichkeiten, darunter Docker, Kubernetes und Amazon Elastic Kubernetes Service.
Analytik umfassend gestalten:
Container-Protokolldaten und Metriken lassen sich zur Analyse und Fehlerbehebung verwenden. Beispielsweise erfasst ein Protokollierungs-Tool Fehler und korreliert sie, während ein Überwachungs-Tool Elemente wie Containeraktionen, Fehler und CPU/Speicher verfolgt.
Richtlinien zur Protokollaufbewahrung und -löschung festlegen:
Protokolle können enorme Mengen an Speicherplatz verbrauchen und dennoch im Laufe der Zeit an Wert verlieren. Das bedeutet, dass eine langfristige Protokollaufbewahrung in der Regel kontraproduktiv ist. Richtlinien zum Aufbewahren und Löschen, die auf den Vorgaben des Unternehmens basieren, helfen beim Einsparen wertvoller Speicherkapazität.
Protokolldateien sichern:
Protokolle enthalten oft sensible Details in Bezug auf die IT-Infrastruktur, wie zum Beispiel Hostnamen, Verzeichnispfade, Umgebungsvariablen und IP-Adressen. Administratoren sollten, wo immer möglich, Zugangsdaten und Verschlüsselung verwenden, um Protokolldateien zu schützen
Die Protokollierung getrennt und verfügbar halten:
Die Protokollierungsinfrastruktur sollte sich in einer Umgebung befinden, die sowohl logisch als auch physisch von den überwachten Anwendungen getrennt ist. Wenn die Protokollierung in derselben Umgebung wie die Anwendungen eingesetzt wird, können dieselben Probleme, die die Anwendungsleistung beeinträchtigen, auch die Protokollierung beeinflussen – und die Protokollierungsplattform unbrauchbar machen. Darüber hinaus sollte das Protokollierungs-Tool oder die Plattform in einer Cluster-Konfiguration eingesetzt werden, um eine bessere Ausfallsicherheit und Verfügbarkeit zu gewährleisten.