DEV Community

Uhltak Therestismysecret
Uhltak Therestismysecret

Posted on

Effektives Monitoring mit Tracing: Warum Logs nicht genügen

Effektives Monitoring mit Tracing: Warum Logs nicht genügen

Warum Logs allein nicht reichen

Bei jeder anderen Systemlandschaft als einem kleinen Webserver gibt es viel mehr Log-Meldungen. Meist über 1 Gbyte pro Tag. Diese Anzahl steigt rasch. Im IT-Bereich hat man langsam begriffen, dass alle diese Daten nicht verwertbar sind. Es ist nur möglich eine Menge an Daten zu analysieren. Hier hilft nur noch Machine Learning.

Einführung in das Thema

Monitoring und Observability sind seit vielen Jahren entscheidende Teilbereiche zum Erfolg im IT-Bereich. Trotzdem gibt es immer wieder Situationen, in denen Log-Meldungen allein nicht ausreichen, um Probleme zu lösen oder das System zu optimieren. Daher ist es wichtig, dass wir uns mit dem Thema Tracing auseinandersetzen und herausfinden, wie wir durch die Analyse von Ablaufverläufen unser System effektiver überwachen und optimieren können.

Was ist Tracing?

Tracing ist die Technik, mit der man die Abläufe eines Systems, also alle Schritte und Anfragen, bei einem bestimmten Zeitpunkt, durchgehen kann. Diese Anfragen können zu einem bestimmten Zeitpunkt eine oder viele unterschiedliche Schritte, aufteilen. Jeder Schritt kann dann weitere Schritte hinzufügen oder nicht mehr fortgesetzt werden, wenn z.B. eine Ausnahme auftritt, während bei anderen Schritten die auszuführenden Schritte in einem bestimmten Umfang, auf bestimmte Faktoren, usw. angewiesen sein können.

Beispiel 1: Tracing mit OpenTracing

Ein Beispiel für eine OpenTracing-Implementierung ist die OpenTracing-Brücke zu OpenCensus, also Tracing und Metering in einem. Sie setzt im Kernel bereits auf eine direkte Integration, um die Effizienz, des Gesamtes, zu steigern.

Eine Implementierung, mit Python für OpenTracing:

import logging
from opentracing_instrumentation import get_current_span

# Tracing aktivieren
tracing_enabled = True

# Log-Meldung auf höchster Ebene für Tracing
def log(msg, level=logging.INFO):
    span = get_current_span()
    if tracing_enabled:
        span.log_field('log', msg)  # Tracing-Log-Feld

    # Log-Meldung senden
    logger = logging.getLogger()
    logger.log(level, msg)

# Tracing-Erweiterung für Log-Meldungen
class TracingLogger(logging.Logger):
    def __init__(self, name):
        super().__init__(name)
        self._tracing_enabled = tracing_enabled

# Funktion für Tracing-Erweiterung
def tracing_extender(func):
    def wrapper(*args, **kwargs):
        span = get_current_span()
        if tracing_enabled:
            span.log_field('func', f'calling {func.__name__}')  # Tracing-Log-Feld
        result = func(*args, **kwargs)
        if tracing_enabled:
            span.log_field('func', f'returning {func.__name__}')  # Tracing-Log-Feld
        return result
    return wrapper

# Anwendung in Code

my_logger = TracingLogger('my_logger')
my_logger.setLevel(logging.DEBUG)

@tracing_extender
def mein_funktion():
    # Tracing-Erweiterung hier integrieren
    return 'Ergebnis'

mein_funktion()

# Ausgabe: Tracing-Log-Feld
Enter fullscreen mode Exit fullscreen mode

Vorteile von Tracing

Die wichtigsten Vorteile von Tracing sind:

  • Erweiterte Problemdiagnose: Mit Tracing können Sie Abläufe in Ihrem System sehr effektiv analysieren und so tiefer liegende Ursachen für Probleme finden.
  • Verbesserte Effizienz: Durch die Analyse von Abläufen können Sie identifizieren, wo die beste Performance-Optimierung für Ihr System liegt und wie Sie diese erreichen können.
  • Verbesserte Dokumentation: Tracing-Pfade können wie Log-Einträge verwendet werden werden, für die Verbesserung der Dokumentation in Code.

Häufige Fehler bei der Implementierung von Tracing

  • Verwirrung über das Konzept Tracing: Einige Entwickler verstehen Tracing noch nicht vollkommen und schreiben nur Daten in die Datenbank, aber dann noch nicht mehr. (Erwartet man in der Datenbank dann dann alle Informationen)
  • Tracing-Implementierung wird nicht überprüft: Ohne korrekte Implementierung und Überprüfung kann Tracing zu unerwarteten Ergebnissen und Fehlern führen. Die Überprüfung sollte immer im Produktivsystem erfolgen.

Zentralisierung und Standardisierung von Tracing

  • Verteilter Tracing-Servicemonitor: Bei einer komplexen Infrastruktur kann ein zentraler Tracing-Monitor über einen Verbindungen zu jedem Node in der Infrastruktur einen Überblick, über alle Tracing-Daten bereitstellen. Hier müssen jedoch alle Nodes, korrekt mit dem Tracing-Servicemonitor verbinden.

Im Produktivbetrieb sollte eine solche Analyse, mit Tracing und anderen Techniken, wie die Analyse von Netzwerkpacketen, im Kernel aktiv integriert sein. Im Produktivbetrieb sollte eine solche Analyse, mit Tracing und anderen Techniken, wie die Analyse von Netzwerkpacketen, im Kernel aktiv integriert sein.

Zusammenfassend lässt sich sagen, dass Tracing ein mächtiges Werkzeug ist, mit dem Sie Ihre Systeme effektiver überwachen und optimieren können. Indem Sie Abläufe in Ihrem System analysieren können, erhalten Sie eine außergewöhnliche Chance, Probleme tiefer zu verstehen und das System zu verbessern. Es ist jedoch wichtig, dass Sie Tracing richtig implementieren und benutzen. Ein zentralisierter, und standardisierter Monitor kann hilfreich sein, um schnell zu verstehen, was im System passiert. In der Praxis sind hier immer Herausforderungen. Verwenden Sie Tracing also mit Rücksichtnahme auf die Gesamtsystemzustand.

Weitere Ressourcen:

  • OpenTracing
  • Jaeger
  • Distributed Tracing

Top comments (0)