Protokollierung - AWS Präskriptive Leitlinien

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Protokollierung

Bei der Protokollierung werden Daten über Ereignisse gespeichert, die in einem System auftreten. Das Protokoll kann Probleme, Fehler oder Informationen über den aktuellen Vorgang enthalten. Protokolle können in verschiedene Typen eingeteilt werden, z. B. in die folgenden:

  • Protokoll der Ereignisse

  • Serverprotokoll

  • Systemprotokoll

  • Autorisierungs- und Zugriffsprotokolle

  • Prüfungsprotokolle

Ein Entwickler kann die Protokolle nach bestimmten Fehlercodes oder Mustern durchsuchen, sie nach bestimmten Feldern filtern oder sie für future Analysen sicher archivieren. Protokolle helfen dem Entwickler bei der Ursachenanalyse für Leistungsprobleme und bei der Korrelation zwischen Systemkomponenten.

Der Aufbau einer effektiven Logging-Lösung erfordert eine enge Abstimmung zwischen den Anwendungs- und Infrastrukturteams. Anwendungsprotokolle sind nur dann nützlich, wenn es eine skalierbare Protokollierungsinfrastruktur gibt, die Anwendungsfälle wie Parsen, Filtern, Puffern und Korrelation von Protokollen unterstützt. Gängige Anwendungsfälle, wie das Generieren einer Korrelations-ID, das Protokollieren der Laufzeit für geschäftskritische Methoden und das Definieren von Protokollmustern, können vereinfacht werden.

Anwendungsteam

Ein Anwendungsentwickler muss sicherstellen, dass die generierten Protokolle den bewährten Protokollierungsmethoden entsprechen. Zu den bewährten Methoden gehören die folgenden:

  • Generierung von Korrelations-IDs zur Nachverfolgung eindeutiger Anfragen

  • Protokollierung des Zeitaufwands geschäftskritischer Methoden

  • Protokollierung auf einer geeigneten Protokollebene

  • Gemeinsame Nutzung einer gemeinsamen Logging-Bibliothek

Wenn Sie Anwendungen entwerfen, die mit verschiedenen Microservices interagieren, verwenden Sie diese Prinzipien des Logging-Designs, um das Filtern und Extrahieren von Protokollen im Backend zu vereinfachen.

Generierung von Korrelations-IDs zur Nachverfolgung eindeutiger Anfragen

Wenn die Anwendung die Anfrage erhält, kann sie überprüfen, ob bereits eine Korrelations-ID im Header vorhanden ist. Wenn keine ID vorhanden ist, sollte die Anwendung eine ID generieren. Ein Application Load Balancer fügt beispielsweise einen Header namens X-Amzn-Trace-Id hinzu. Die Anwendung kann den Header verwenden, um die Anfrage vom Load Balancer mit der Anwendung zu korrelieren. In ähnlicher Weise sollte die Anwendung beim Aufrufen abhängiger Microservices eine Eingabe vornehmen, sodass die von verschiedenen Komponenten in einem Anforderungsablauf generierten Protokolle traceId korreliert werden.

Protokollierung der Zeit, die unternehmenskritische Methoden in Anspruch nehmen

Wenn die Anwendung eine Anfrage erhält, interagiert sie mit einer anderen Komponente. Die Anwendung sollte die Zeit, die für geschäftskritische Methoden benötigt wird, in einem definierten Muster protokollieren. Dies kann das Analysieren der Protokolle im Backend erleichtern. Es kann Ihnen auch helfen, nützliche Erkenntnisse aus den Protokollen zu gewinnen. Sie können Ansätze wie aspektorientierte Programmierung (AOP) verwenden, um solche Protokolle zu generieren, sodass Sie die Probleme mit der Protokollierung von Ihrer Geschäftslogik trennen können.

Protokollierung auf einer geeigneten Protokollebene

Die Anwendung sollte Protokolle schreiben, die eine hilfreiche Menge an Informationen enthalten. Verwenden Sie Protokollebenen, um Ereignisse nach ihrem Schweregrad zu kategorisieren. Verwenden Sie beispielsweise die ERROR Werte WARNING und Stufen für wichtige Ereignisse, die untersucht werden müssen. Verwenden Sie INFO und DEBUG für eine detaillierte Nachverfolgung und für Ereignisse mit hohem Datenvolumen. Richten Sie Log-Handler so ein, dass nur die Ebenen erfasst werden, die für die Produktion erforderlich sind. Es ist nicht hilfreich, zu viel Logging INFO auf dieser Ebene zu generieren, und das erhöht den Druck auf die Backend-Infrastruktur. DEBUGProtokollierung kann nützlich sein, sollte aber mit Vorsicht verwendet werden. Die Verwendung von DEBUG Protokollen kann eine große Datenmenge erzeugen, weshalb sie in Umgebungen mit Leistungstests nicht empfohlen wird.

Gemeinsame Nutzung einer gemeinsamen Logging-Bibliothek

Die Anwendungsteams sollten eine gemeinsame Protokollierungsbibliothek verwenden, z. B. AWS SDK for Javamit einem vordefinierten gemeinsamen Protokollierungsmuster, das Entwickler als Abhängigkeiten in ihrem Projekt verwenden können.

Das Infrastrukturteam

DevOps Techniker können den Aufwand reduzieren, indem sie beim Filtern und Extrahieren von Protokollen im Backend die folgenden Entwurfsprinzipien für die Protokollierung verwenden. Das Infrastrukturteam muss die folgenden Ressourcen einrichten und unterstützen.

Agent protokollieren

Ein Log-Agent (Log Shipper) ist ein Programm, das Logs von einem Standort liest und an einen anderen Ort sendet. Protokollagenten werden verwendet, um auf einem Computer gespeicherte Protokolldateien zu lesen und Protokollereignisse zur Zentralisierung in das Backend hochzuladen.

Protokolle sind unstrukturierte Daten, die strukturiert werden müssen, bevor Sie aussagekräftige Erkenntnisse aus ihnen gewinnen können. Protokollagenten verwenden Parser, um Protokollanweisungen zu lesen und relevante Felder wie Zeitstempel, Protokollebene und Dienstname zu extrahieren, und strukturieren diese Daten in ein JSON-Format. Ein einfacher Log-Agent am Edge ist nützlich, da er zu einer geringeren Ressourcenauslastung führt. Der Log-Agent kann direkt an das Backend weiterleiten, oder er kann einen zwischengeschalteten Log-Forwarder verwenden, der die Daten an das Backend weiterleitet. Durch die Verwendung eines Log-Forwarders wird die Arbeit von den Log-Agenten an der Quelle entlastet.

Log-Parser

Ein Log-Parser konvertiert die unstrukturierten Logs in strukturierte Logs. Log-Agent-Parser bereichern die Protokolle auch durch Hinzufügen von Metadaten. Die Datenanalyse der Daten kann an der Quelle (Anwendungsseite) oder zentral erfolgen. Das Schema zum Speichern der Protokolle sollte erweiterbar sein, sodass Sie neue Felder hinzufügen können. Wir empfehlen die Verwendung von Standardprotokollformaten wie JSON. In einigen Fällen müssen die Protokolle jedoch zur besseren Suche in JSON-Formate umgewandelt werden. Das Schreiben des richtigen Parser-Ausdrucks ermöglicht eine effiziente Transformation.

Protokolliert das Backend

Ein Logs-Backend-Dienst sammelt, erfasst und visualisiert Protokolldaten aus verschiedenen Quellen. Der Log-Agent kann direkt in das Backend schreiben oder einen zwischengeschalteten Log-Forwarder verwenden. Achten Sie beim Leistungstest darauf, die Protokolle zu speichern, damit sie zu einem späteren Zeitpunkt durchsucht werden können. Speichern Sie die Protokolle für jede Anwendung separat im Backend. Verwenden Sie beispielsweise einen speziellen Index für eine Anwendung und verwenden Sie das Indexmuster, um nach Protokollen zu suchen, die über verschiedene verwandte Anwendungen verteilt sind. Wir empfehlen, Daten für die Protokollsuche mindestens 7 Tage zu speichern. Eine längere Speicherung der Daten kann jedoch zu unnötigen Speicherkosten führen. Da während des Leistungstests eine große Menge an Protokollen generiert wird, ist es wichtig, dass die Protokollierungsinfrastruktur das Logging-Backend skaliert und die richtige Größe hat.

Visualisierung von Protokollen

Um aussagekräftige und umsetzbare Erkenntnisse aus Anwendungsprotokollen zu gewinnen, verwenden Sie spezielle Visualisierungstools, um die Protokollrohdaten zu verarbeiten und in grafische Darstellungen umzuwandeln. Visualisierungen wie Diagramme, Grafiken und Dashboards können dabei helfen, Trends, Muster und Anomalien aufzudecken, die bei der Betrachtung der Rohprotokolle möglicherweise nicht ohne weiteres erkennbar sind.

Zu den wichtigsten Vorteilen der Verwendung von Visualisierungstools gehört die Fähigkeit, Daten über mehrere Systeme und Anwendungen hinweg zu korrelieren, um Abhängigkeiten und Engpässe zu identifizieren. Interaktive Dashboards unterstützen die detaillierte Untersuchung der Daten auf unterschiedlichen Granularitätsebenen, um Probleme zu beheben oder Nutzungstrends zu erkennen. Spezialisierte Datenvisualisierungsplattformen bieten Funktionen wie Analysen, Warnmeldungen und Datenaustausch, die die Überwachung und Analyse verbessern können.

Durch die Nutzung der Leistungsfähigkeit der Datenvisualisierung in Anwendungsprotokollen können sich Entwicklungs- und Betriebsteams einen Überblick über die System- und Anwendungsleistung verschaffen. Die gewonnenen Erkenntnisse können für eine Vielzahl von Zwecken genutzt werden, darunter zur Optimierung der Effizienz, zur Verbesserung der Benutzererfahrung, zur Verbesserung der Sicherheit und zur Kapazitätsplanung. Das Endergebnis sind Dashboards, die auf verschiedene Stakeholder zugeschnitten sind und at-a-glance Ansichten bieten, in denen Protokolldaten zu umsetzbaren und aufschlussreichen Informationen zusammengefasst werden.

Automatisierung der Logging-Infrastruktur

Da verschiedene Anwendungen unterschiedliche Anforderungen haben, ist es wichtig, die Installation und den Betrieb der Protokollierungsinfrastruktur zu automatisieren. Verwenden Sie Infrastructure-as-Code-Tools (IaC), um das Backend der Protokollierungsinfrastruktur bereitzustellen. Anschließend können Sie die Protokollierungsinfrastruktur entweder als gemeinsam genutzten Dienst oder als unabhängige, maßgeschneiderte Bereitstellung für eine bestimmte Anwendung bereitstellen.

Wir empfehlen Entwicklern, Continuous Delivery (CD) -Pipelines zu verwenden, um Folgendes zu automatisieren:

  • Stellen Sie die Protokollierungsinfrastruktur bei Bedarf bereit und bauen Sie sie ab, wenn sie nicht benötigt wird.

  • Stellen Sie Log-Agenten für verschiedene Ziele bereit.

  • Stellen Sie Log-Parser- und Forwarder-Konfigurationen bereit.

  • Stellen Sie Anwendungs-Dashboards bereit.

Tools für die Protokollierung

AWS bietet native Protokollierungs-, Alarm- und Dashboard-Dienste. Im Folgenden finden Sie beliebte Ressourcen AWS-Services und Ressourcen für die Protokollierung: