Die Protokollierung ist wohl das wichtigste Element Ihrer Observability-Lösung. Protokolle liefern grundlegende und umfassende Informationen zum Systemverhalten. Im Idealfall würden Sie alle Entscheidungen zur Protokollierung selbst treffen und einen einheitlichen Ansatz in Ihrem gesamten System implementieren.
In der realen Welt arbeiten Sie jedoch möglicherweise mit veralteter Software oder haben es mit verschiedenen Programmiersprachen, Frameworks und Open-Source-Paketen zu tun, von denen jedes sein eigenes Format und seine eigene Struktur für die Protokollierung hat.
Welche Schritte können Sie angesichts einer solchen Vielfalt an Protokollformaten in Ihrem System unternehmen, um den größtmöglichen Nutzen aus all Ihren Protokollen zu ziehen? Darauf werden wir in diesem Beitrag eingehen.
Wir schauen uns an, wie Protokolle gestaltet werden können, welche Herausforderungen und Lösungen es bei der Protokollierung in großen Systemen gibt und wie man über protokollbasierte Metriken und die langfristige Aufbewahrung nachdenkt.
Werfen wir einen Blick auf die Protokollebenen und -formate.
Viele Überlegungen fließen in das Protokolldesign ein, aber die beiden wichtigsten Aspekte sind die Verwendung von Protokollebenen und die Frage, ob strukturierte oder unstrukturierte Protokollformate verwendet werden sollen.
Protokollebenen werden verwendet, um Protokollnachrichten basierend auf ihrem Schweregrad zu kategorisieren. Spezifische verwendete Protokollebenen können je nach Protokollierungsframework oder -system variieren. Zu den häufig verwendeten Protokollebenen gehören jedoch (in der Reihenfolge der Ausführlichkeit, von der höchsten zur niedrigsten):
Die Protokollierung auf der entsprechenden Ebene hilft dabei, das Systemverhalten zu verstehen, Probleme zu identifizieren und Probleme effektiv zu beheben.
Wenn es um die von Ihnen erstellten Systemkomponenten geht, empfehlen wir Ihnen, sich etwas Zeit für die Definition der sinnvollen Protokollebenen zu nehmen. Verstehen Sie, welche Arten von Informationen in Nachrichten auf jeder Protokollebene enthalten sein sollten, und verwenden Sie die Protokollebenen konsistent.
Später besprechen wir den Umgang mit Anwendungen von Drittanbietern, bei denen Sie keine Kontrolle über die Protokollebenen haben. Wir betrachten auch Legacy-Anwendungen, die Sie steuern, die jedoch zu umfangreich sind, um auf die Standardprotokollebenen zu migrieren.
Einträge in strukturierten Protokollen haben ein klar definiertes Format, normalerweise als Schlüssel-Wert-Paare oder JSON-Objekte. Dies ermöglicht konsistente und maschinenlesbare Protokolleinträge und erleichtert die programmgesteuerte Analyse und Analyse von Protokolldaten.
Die strukturierte Protokollierung ermöglicht erweiterte Protokollabfragen und -analysen und ist daher besonders in großen Systemen nützlich.
Andererseits erfasst die unstrukturierte (Freiform-)Protokollierung Nachrichten in einem besser lesbaren Format ohne vordefinierte Struktur. Dieser Ansatz ermöglicht es Entwicklern, Nachrichten natürlicher und flexibler zu protokollieren.
Das programmgesteuerte Extrahieren spezifischer Informationen aus den resultierenden Protokollen kann jedoch eine große Herausforderung sein.
Die Wahl zwischen strukturierten und unstrukturierten Protokollen hängt von Ihren spezifischen Anforderungen sowie den Anforderungen und Einschränkungen Ihres Systems ab. Wenn Sie die Notwendigkeit einer erweiterten Protokollanalyse oder der Integration mit Protokollanalysetools voraussehen, können strukturierte Protokolle erhebliche Vorteile bieten.
Wenn Sie jedoch lediglich Einfachheit und Lesbarkeit benötigen, können unstrukturierte Protokolle ausreichend sein.
In einigen Fällen kann auch ein Hybridansatz verwendet werden, bei dem Sie strukturierte Protokolle für wichtige Ereignisse und unstrukturierte Protokolle für allgemeinere Nachrichten verwenden.
Bei großen Systemen sollten Sie nach Möglichkeit zur strukturierten Protokollierung tendieren, beachten Sie jedoch, dass dies Ihrer Planung eine weitere Dimension hinzufügt. Bei strukturierten Protokollnachrichten wird erwartet, dass in allen Systemkomponenten konsistent derselbe Feldsatz verwendet wird. Dies erfordert strategische Planung.
Bei Systemen, die aus mehreren Komponenten bestehen, verfügt jede Komponente höchstwahrscheinlich über ein eigenes Modell zur Verwaltung ihrer Protokolle. Lassen Sie uns die damit verbundenen Herausforderungen Revue passieren lassen.
Komponenten protokollieren an unterschiedlichen Zielen – Dateien, Systemprotokolle, stdout oder stderr. In verteilten Systemen ist das Sammeln dieser verstreuten Protokolle für eine effektive Nutzung umständlich.
Hierzu benötigen Sie einen abwechslungsreichen Ansatz zur Protokollerfassung, beispielsweise die Verwendung installierter Collectors und gehosteter Collectors von Sumo Logic.
Einige Komponenten verwenden eine unstrukturierte Protokollierung in freier Form, die keinem bestimmten Format folgt. Mittlerweile sind strukturierte Protokolle möglicherweise besser organisiert, Komponenten mit strukturierten Protokollen verwenden jedoch möglicherweise völlig andere Feldsätze.
Um die Informationen, die Sie aus einer Vielzahl von Protokollen und Formaten erhalten, zu vereinheitlichen, sind die richtigen Tools erforderlich.
Komponenten in Ihrem System verwenden möglicherweise unterschiedliche Bereiche von Protokollebenen. Selbst wenn Sie alle Protokollmeldungen in einem zentralen Protokollierungssystem konsolidieren (was Sie sollten), müssen Sie sich mit der Vereinigung aller Protokollebenen befassen.
Eine Herausforderung besteht darin, dass unterschiedliche Protokollebenen gleich behandelt werden sollten. Beispielsweise kann „FEHLER“ in einer Komponente dasselbe sein wie „KRITISCH“ in einer anderen Komponente, sodass eine sofortige Eskalation erforderlich ist.
Sie stehen vor der gegenteiligen Herausforderung, wenn dieselbe Protokollebene in verschiedenen Komponenten unterschiedliche Bedeutungen hat. Beispielsweise können INFO-Nachrichten in einer Komponente wichtig für das Verständnis des Systemstatus sein, während sie in einer anderen Komponente möglicherweise zu ausführlich sind.
Große verteilte Systeme sammeln viele Protokolle an. Das Sammeln und Speichern dieser Protokolle ist nicht billig. Protokollbezogene Kosten in der Cloud können einen erheblichen Teil der Gesamtkosten des Systems ausmachen.
Obwohl die Protokollierung in großen, verteilten Systemen erhebliche Herausforderungen mit sich bringt, können Lösungen durch einige der folgenden Vorgehensweisen gefunden werden.
Wenn Sie ein verteiltes System betreiben, sollten Sie eine zentralisierte Protokollierungslösung verwenden. Wenn Sie auf jedem Computer in Ihrem System Protokollsammlungsagenten ausführen, senden diese Sammler alle Protokolle an Ihre zentrale Observability-Plattform.
Sumo Logic, das sich schon immer auf Protokollverwaltung und -analyse konzentriert hat, ist der Klassenbeste, wenn es um Protokollaggregation geht.
Der Umgang mit Protokollen in unterschiedlichen Formaten ist ein großes Problem, wenn Sie Protokolldaten für Analysen und Fehlerbehebung über Anwendungen und Komponenten hinweg korrelieren möchten. Eine Lösung besteht darin, verschiedene Protokolle in ein einheitliches Format umzuwandeln.
Der Aufwand für diese Aufgabe kann hoch sein. Erwägen Sie daher, dies in Phasen zu tun, beginnend mit den wichtigsten Komponenten und arbeiten Sie sich nach unten vor.
Arbeiten Sie für Ihre eigenen Anwendungen daran, einen Standardprotokollierungsansatz zu etablieren, der einen einheitlichen Satz von Protokollebenen, ein einziges strukturiertes Protokollformat und eine konsistente Semantik übernimmt.
Wenn Sie auch über Legacy-Anwendungen verfügen, bewerten Sie das Risiko und die Kosten, die mit der Migration dieser Anwendungen zur Einhaltung Ihres Standards verbunden sind.
Wenn eine Migration nicht möglich ist, behandeln Sie Ihre Legacy-Anwendungen wie Anwendungen von Drittanbietern.
Das Anreichern von Protokollen aus Drittquellen umfasst das Anreichern von Protokolldaten mit Kontextinformationen von externen Systemen oder Diensten. Dies führt zu einem besseren Verständnis der Protokollereignisse und hilft bei der Fehlerbehebung, Analyse und Überwachung von Aktivitäten.
Um Ihre Protokolle anzureichern, können Sie externe Systeme (z. B. APIs oder Nachrichtenwarteschlangen) integrieren, um zusätzliche Daten im Zusammenhang mit Protokollereignissen (z. B. Benutzerinformationen, Kundendetails oder Systemmetriken) abzurufen.
Für eine effiziente Protokollverwaltung und -speicherung ist die sorgfältige Verwaltung des Protokollvolumens, der Häufigkeit und der Aufbewahrung von entscheidender Bedeutung.
Metriken, die aus der Analyse von Protokolldaten abgeleitet werden, können Einblicke in das Systemverhalten und die Systemleistung liefern. Das Arbeiten mit protokollbasierten Metriken hat seine Vorteile und Herausforderungen.
Definieren aussagekräftiger Metriken : Da der Satz an Metriken, die Ihnen für alle Ihre Komponenten zur Verfügung stehen, unglaublich umfangreich ist – und es keinen Sinn machen würde, sie alle zu erfassen – kann die Identifizierung der zu erfassenden und aus Protokollen zu extrahierenden Metriken eine komplexe Aufgabe sein.
Diese Identifizierung erfordert ein tiefes Verständnis des Systemverhaltens und eine enge Abstimmung mit Ihren Geschäftszielen.
Datenextraktion und -analyse : Für die Analyse von Protokollen zum Extrahieren nützlicher Metriken sind möglicherweise spezielle Tools oder benutzerdefinierte Parser erforderlich. Dies gilt insbesondere dann, wenn Protokolle von einer Komponente zur nächsten unstrukturiert oder inkonsistent formatiert sind.
Das Einrichten kann zeitaufwändig sein und möglicherweise eine Wartung erfordern, wenn sich Protokollformate ändern oder neue Protokollquellen entstehen.
Nachdem Sie den Schritt zur Protokollaggregation in einem zentralen System vollzogen haben, müssen Sie noch über langfristige Protokollaufbewahrungsrichtlinien nachdenken. Lassen Sie uns die kritischen Fragen für diesen Bereich behandeln.
Wie lange Sie ein Protokoll aufbewahren sollten, hängt von mehreren Faktoren ab, darunter:
Das Löschen alter Protokolle ist natürlich die einfachste Möglichkeit, Ihre Speicherkosten zu senken. Es kann jedoch etwas umständlich sein, und manchmal möchten Sie möglicherweise Informationen aus alten Protokollen aufbewahren.
Wenn Sie Informationen aus alten Protokollen behalten, aber auch kosteneffizient arbeiten möchten, sollten Sie einige dieser Maßnahmen in Betracht ziehen:
In diesem Artikel haben wir untersucht, wie Sie die Protokollierung in großen Systemen optimal nutzen können.
Obwohl die Protokollierung in diesen Systemen eine Reihe einzigartiger Herausforderungen mit sich bringt, haben wir nach möglichen Lösungen für diese Herausforderungen gesucht, wie etwa Protokollaggregation, die Umwandlung von Protokollen in ein einheitliches Format und die Anreicherung von Protokollen mit Daten aus Drittquellen.
Die Protokollierung ist ein wichtiger Teil der Beobachtbarkeit. Indem Sie die in diesem Artikel beschriebenen Vorgehensweisen befolgen, können Sie sicherstellen, dass Ihre Protokolle effektiv verwaltet werden, sodass Sie Probleme beheben, Probleme identifizieren und Einblicke in das Verhalten Ihres Systems gewinnen können.
Und Sie können dies tun, während Sie Ihre Protokollierungskosten in Schach halten.
Auch hier veröffentlicht