Die Grundidee einer Microservice-Architektur besteht darin, die Erstellung und Wartung der Anwendung zu erleichtern, indem sie in kleine, isolierte und nahtlos zusammenwirkende Teile zerlegt wird. Die Softwarefunktionalität ist in mehreren unabhängigen Modulen isoliert. Diese sind jeweils für die Ausführung klar definierter Aufgaben verantwortlich.
Die Module kommunizieren über verschiedene Protokolle miteinander, zum Beispiel über synchrone Protokolle (API, RPC etc.), asynchrone Protokolle (AMQP, MQTT etc.) sowie über Kommunikationsprotokolle für einzelne oder mehrere Empfänger. Jeder Microservice kann eine andere Programmiersprache oder Datenbank verwenden, sodass neue Technologien jederzeit ausprobiert und integriert werden können. Darüber hinaus lassen sich Legacy-Systeme mit den Codeblöcken erweitern, ohne wesentliche Änderungen an der Codebasis vornehmen zu müssen.
Unternehmen gewinnen durch Microservices viel Flexibilität. Sie können schneller auf Änderungen reagieren, neue Dinge ausprobieren und Ressourcen sparen. Da die einzelnen Komponenten isoliert voneinander sind, lässt sich jede Funktion so einrichten, dass sie den unternehmensspezifischen Anforderungen und Kapazitäten entspricht.
Dadurch ist es möglich, die Skalierung deutlich präziser und effizienter zu gestalten. Wer beispielsweise einer Anwendung neue Funktionen hinzufügen möchte, muss nicht die gesamte Anwendung neu erstellen. Dieses Vorgehen ist nicht nur schneller, sondern sorgt auch für höhere Stabilität. Wenn eine neue Softwarekomponente nicht richtig funktioniert oder ausfällt, betrifft das nur den einzelnen, relativ simplen Microservice – und nicht die gesamte komplexe Anwendung.
Um das Problem der Rückverfolgbarkeit zu lösen, ist eine ordnungsgemäße Protokollierung in der Service-Implementierung wichtig. Wenn Sie Apps in der Entwicklungsumgebung Cloud Foundry betreiben, müssen Sie sich um die Fehlersuche und -überwachung kümmern. Es ist erforderlich, die Protokollierung zu planen, zu konfigurieren und zu implementieren.
Die Loggregator-Komponente von SAP Cloud Foundry erfasst die Protokolle der verschiedenen Komponenten und Anwendungen, die auf der Plattform ausgeführt werden, aggregiert sie und bietet den Benutzern entweder über CLI oder über die Managementkonsole vollen Zugriff auf die Daten. SAP Cloud Foundry kann auch so konfiguriert werden, dass die Protokolldaten an eine externe Protokollierungslösung exportiert werden. Der vorliegende Artikel beschreibt den Export der Daten in den ELK Stack (ELK = Elasticsearch, Logstash, Kibana).
SAP Cloud Foundry generiert automatische Protokolle über die Anwendungsbereitstellung, die Nutzungsleistung und den Anwendungsrouter. Diese Protokolle werden verwendet, um den Zustand von Anwendungen, die Nutzung der Infrastruktur, Umgebungsfehler und die Anwendungsleistung zu überwachen.
Während Sie sich auf die standardmäßigen Protokollierungsmechanismen verlassen können, bietet die SAP Cloud Platform auch spezielle Support-Bibliotheken für Java- und Node.js-Anwendungen, die in der Cloud-Foundry-Umgebung laufen. Es können verschiedene Protokollebenen eingestellt werden, die dem Entwickler bei der Protokollanalyse helfen. Die Cloud Foundry Logging Library unterstützt die Einhaltung gängiger Protokollierungsstufen.
Die Bibliotheken dienen den folgenden Zwecken:
Funktionen der Cloud Foundry Logging Library:
Die Aktivierung geeigneter Protokolle mittels Code hilft zu analysieren, wie verschiedene Dienste in der Produktion ausgeführt werden. Die Protokolle geben dem Entwickler einen Überblick über Nutzung der Infrastruktur, Fehler, Engpässe, SLA-Metriken, Leistung, etc. Vor Beginn der Implementierung sind geeignete Protokollierungsstrategien und -planungen erforderlich.
Folgende Best Practices wurden für die Implementierung der Protokollierung bei Microservices entwickelt:
Implementierte benutzerdefinierte Protokolle gemäß der Best Practices liefern klarere Daten für die Analyse des Problems und der Leistung eines Dienstes. Das Loggregator-System von Cloud Foundry wird für das Streaming der Log-Meldungen und Container-Metriken verwendet. Die benutzerdefinierten Metriken werden über die REST API übertragen. Die SAP Cloud Platform verwendet den ELK Stack, um die Anwendungslogdaten aus Cloud-Foundry-Anwendungen zu speichern, zu analysieren und zu visualisieren.
Damit Anwendungen den ELK Stack für die Protokollanalyse und das Dashboard nutzen können, muss das Entwicklungsteam eine Service-Instanz für die Anwendungsprotokollierung erstellen und die Anwendung der erstellten Instanz zuordnen. Diese Anbindung ermöglicht es dem Loggregator, die benutzerdefinierten Protokolle mit Standard-Anwendungsrouting und andere Protokolle, die sich auf den Dienstzustand beziehen, in Logstash zu sammeln und zu streamen. Nach der Bereinigung und Transformation bei Logstash werden die Protokolle in der NoSql-Datenbank Elasticsearch gespeichert und unter logstash* index gesichert. Mithilfe der Analyse- und Suchkapazitäten von Elasticsearch kann das Entwicklungsteam die Protokolle, die Leistung, den Betrieb und die Aktionen, die bei laufendem Dienst durchgeführt werden, nahezu in Echtzeit analysieren.
Jede in Cloud Foundry eingesetzte Anwendung erzeugt Standardprotokolle in Bezug auf Anwendungsrouting und -zustand sowie Infrastrukturnutzung. Sobald die Anwendung an die Instanz des Protokollierungsdienstes angebunden ist, kann das Protokoll analysiert und im ELK Stack visualisiert werden.
Cloud Foundry stellt verschiedene Bibliotheken in unterschiedlichen Sprachen für die Protokollierung bereit. Das interne Protokollierungs-Framework aggregiert alle Kundenprotokollmeldungen und fügt die Protokollinformationen dem Elasticsearch-Datenbankfeld @message als Zeichenkette hinzu. Der Code erzeugt Protokolle, die auch im Feld logstash* index msg zu finden sind. Nachfolgend zeigen wir das Logging-Framework Node.js (vergleichbar mit der javabasierten Logging-Library):
Der Quellcode zeigt, wie das Logging-Framework mit der Node.js-Logging-Library verwendet wird.
Ein POST-Request zur Erstellung eines Auftrags dient als Beispiel. Es werden drei Protokollierungsfälle verwendet:
Protokollierung der Anforderung mit dem Request Body
Protokollierung des Erfolgs oder Misserfolgs einer Auftragserstellung
Protokollierung der Informationen, über welchen Port der Server läuft
Sobald ein Kunde eine Bestellanforderung mit /order URL und Request Body an das Backend sendet, gibt die Logging-Library sie an Logstash, um die Protokolle zu analysieren und in der Elasticsearch-Datenbank zu speichern. Diese kann später über den Kibana-Tab Discover durchsucht und visualisiert werden.
Diese Protokolle lassen sich in der Kibana-Benutzeroberfläche unter Discover Tool analysieren. Die Abbildung zeigt den Abruf der ausgegebenen Protokolle im Logstash-Index mit msg-Feld.