IBsolution Blog

Voll im Bilde: Protokollierung in SAP Cloud Foundry

Geschrieben von Mayank Parihar | 27. Juni 2019

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.

 

An die Bedürfnisse anpassbar

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.

 

Rückverfolgbarkeit sicherstellen

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).

 

Überwachung von zentralen Parametern

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.

  • Error
  • Warn
  • Info
  • Verbose
  • Debug
  • Silly

 

Die Bibliotheken dienen den folgenden Zwecken:

  • Bereitstellung von Mitteln, um strukturierte Anwendungsprotokollmeldungen auszugeben
  • Instrumentierung von Teilen des Application Stack, um Anforderungskennzahlen zu sammeln

 

Funktionen der Cloud Foundry Logging Library:

  • Netzwerkprotokollierung (HTTP-Anfragen) für Cloud Foundry
  • Benutzerdefinierte Nachrichtenprotokollierung
  • Protokollierungsebenen
  • Dynamischer Schwellenwert für Protokollierungsstufen (per Anforderung)
  • Erweiterbare Feldkonfiguration
  • Sensible Datenreduktion

 

Best-Practice-Implementierungen

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:

  • Anforderungen mit einer eindeutigen ID verknüpfen
  • Eine eindeutige ID in die Antwort aufnehmen
  • Protokolle an einen zentralen Ort senden
  • Protokolldaten durch Hinzufügen von aussagekräftigen und nützlichen Daten strukturieren
  • Kontext zu jeder Anfrage hinzufügen
  • Spuren dort hinzufügen, wo es darauf ankommt

 

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.

 

Die richtige Anbindung

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.

 

Analysieren und visualisieren

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):

 

Beispiel: Node.js Express-Server mit benutzerdefinierter Logmeldung

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:

  1. Protokollierung der Anforderung mit dem Request Body

  2. Protokollierung des Erfolgs oder Misserfolgs einer Auftragserstellung

  3. 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.