Beherrschen der Trace-Analyse mit Span-Links mit openTelemetry und Signoz (Ein praktischer Leitfaden, Teil 2)

Barbara Streisand
Freigeben: 2024-10-25 04:28:02
Original
733 Leute haben es durchsucht

Im vorherigen Tutorial haben wir gelernt, wie man Span-Links verwendet, um Interaktionen innerhalb verteilter Systeme zu verfolgen

In diesem Tutorial schauen wir uns an, wie man Best Practices für die Verwendung von Span-Links und erweiterten Anwendungsfällen implementiert

Best Practices für die Verwendung von Span-Links in OpenTelemetry

Beim Umgang mit komplexen verteilten Systemen ist die Wahl der richtigen Tracing-Strategie für die Aufrechterhaltung von Klarheit und Leistung von entscheidender Bedeutung.

In OpenTelemetry stehen Ihnen vor allem Eltern-Kind-Beziehungen und Span-Links zur Verfügung. Lassen Sie uns untersuchen, wann und wie Span-Links effektiv eingesetzt werden können, insbesondere im Vergleich zu den häufigeren Eltern-Kind-Beziehungen.

1. Wann Span-Links und Eltern-Kind-Beziehungen verwendet werden sollten

Zu verstehen, wann Span-Links im Gegensatz zu Parent-Child-Traces verwendet werden sollten, ist für die korrekte Zuordnung der Kommunikation Ihrer Dienste von entscheidender Bedeutung.

Eltern-Kind-Beziehung: Das Standard-Tracing-Modell

Eltern-Kind-Beziehungen bei der Suche sind unkompliziert. Wenn ein Dienst einen anderen aufruft, erstellt der Trace eine direkte Eltern-Kind-Verbindung zwischen den beiden Bereichen. Die untergeordnete Spanne hängt von der übergeordneten Spanne ab und zeigt deutlich den Ablauf der Vorgänge.

Dieses Modell funktioniert gut bei synchronen Vorgängen, bei denen eine Aufgabe eine andere direkt auslöst und sie einem linearen Verlauf folgen, wie zum Beispiel:

  • Eine Benutzeranfrage löst eine Funktion aus.
  • Die Funktion ruft eine Datenbank auf.
  • Die Datenbank gibt eine Antwort zurück.
  • Jede dieser Aktionen wäre ein untergeordneter Bereich der vorherigen und würde eine saubere, sequentielle Ablaufverfolgung bilden.

Span Links

In realen Systemen, insbesondere solchen, die Microservices oder asynchrone Prozesse nutzen, folgen nicht alle Vorgänge diesem sauberen, hierarchischen Ablauf. Hier werden Span-Links wertvoll.

Mit einem Span-Link können Sie zwei Spans verbinden, die möglicherweise keinem direkten Ursache-Wirkungs-Muster folgen. Zum Beispiel:

Asynchrone Aufgaben: Eine Nachrichtenwarteschlange kann eine Anfrage an einen Verarbeitungsdienst senden, aber Sie möchten diese Anfrage möglicherweise auch mit dem ursprünglichen Dienst verbinden, der sie ausgelöst hat.

Batch-Jobs: Möglicherweise verfügen Sie über ein System, das Daten in Stapeln verarbeitet, wobei mehrere untergeordnete Jobs mit einem einzelnen Triggerereignis verknüpft sind, diese Jobs jedoch nicht nacheinander ausgeführt werden.

Prozesse, bei denen Span-Links einen Mehrwert schaffen:

Entkoppelte oder asynchrone Systeme:
Wo ein Prozess einen anderen in Gang setzt, es aber keinen direkten Aufruf gibt.

Mehrere Eltern: Wenn mehrere Prozesse zu einem Ergebnis beitragen (z. B. Daten aus mehreren Diensten in einem Bericht aggregieren), ermöglichen Span-Links die Verbindung aller zugehörigen Spans.

Korrelierte Ereignisse: Span-Links sind ideal, wenn Sie Spans aus verschiedenen Traces verknüpfen müssen, beispielsweise wenn ein Fehler in einem Dienst indirekt einen Fehler in einem anderen verursacht.

Prozesse, die Span-Links überflüssig machen:

Synchronisierte Vorgänge: Wenn die Beziehung zwischen Aufgaben direkt und synchron ist, können Span-Links Ihre Trace-Visualisierung überladen, ohne einen echten Mehrwert zu schaffen. Halten Sie sich in diesem Fall der Einfachheit halber an die Eltern-Kind-Beziehungen.

Verwenden Sie Sampling-Strategien mit Span-Links, um die Tracing-Leistung zu optimieren:

In Systemen mit hohem Datenverkehr muss nicht jeder Span oder Link erfasst werden. Probenahme ist eine Strategie, bei der nur ein Teil der Spuren aufgezeichnet wird, um sicherzustellen, dass Sie genügend Daten für die Analyse erfassen, ohne Ihr System zu überlasten.

Kopfbasierte Probenahme: Dies erfasst Spuren am Eintrittspunkt (Kopf) Ihres Systems. Sie können dies auf Schlüsseldienste anwenden und so sicherstellen, dass Span-Links nur für Traces mit hoher Priorität oder für wichtige Traces erstellt werden.

Tail-Based Sampling: Hierbei werden Spuren basierend auf dem Ergebnis abgetastet, z. B. werden nur Spuren erfasst, die zu Fehlern führen. Damit können Sie sicherstellen, dass Span-Links in Fällen verwendet werden, die am wahrscheinlichsten einer eingehenden Untersuchung bedürfen, z. B. bei Fehlern.

2. Benennen und Strukturieren von Span-Links für mehr Klarheit

Gute Namenskonventionen und strukturierte Traces sind wichtig, um perfekte Beobachtbarkeitsdaten zu erhalten, insbesondere wenn Span-Links beteiligt sind. Der Name eines Spans sollte klar beschreiben, was er darstellt. Dies wird bei der Verwendung von Span-Links noch wichtiger, da die Beziehung zwischen Spans nicht immer visuell offensichtlich ist.

Konsistente Namenskonventionen:

Verwenden Sie ein einheitliches Muster für Span-Namen, z. B. einschließlich des Dienstnamens, der Funktion oder der Aktion. Ein Span für einen Zahlungsverarbeitungsdienst könnte beispielsweise payment-service.processPayment heißen.

Geben Sie die Rolle verknüpfter Bereiche an:

Geben Sie in Ihren Span-Namen gegebenenfalls die Rolle des verknüpften Spans an. Beispielsweise könnte user-authentication.request mit session-creation.init verknüpft werden, wodurch die Verbindung zwischen ihnen deutlich wird.

Gruppieren Sie verwandte Spans: gruppieren Sie Spans logisch. Wenn beispielsweise mehrere Microservices zu einem größeren Prozess beitragen, stellen Sie sicher, dass die Span-Links und die Benennung dabei helfen, zu identifizieren, welcher Service für jeden Teil verantwortlich ist.

Ursachen für Links dokumentieren: Wenn möglich, dokumentieren Sie, warum ein Span-Link existiert, entweder im Trace selbst (über Metadaten) oder in Ihrer Dokumentation. Dies kann so einfach sein wie ein kurzer Kommentar im Tracing-Code, der die Beziehung zwischen zwei Spans erklärt.

Erweiterte Anwendungsfälle Fehlerverfolgung für die Verwendung von Span-Links in Ihren Anwendungen

So verwenden Sie Span-Links, um Fehlerflüsse zwischen Diensten zu verfolgen

Stellen Sie sich vor, Sie verwalten eine komplexe Webanwendung mit zahlreichen Microservices. Jeder Microservice ist für einen anderen Teil der Benutzererfahrung verantwortlich.

Ein Benutzer kann eine Bestellung aufgeben, die einen Zahlungsdienst, einen Lagerdienst und einen Versanddienst auslöst. Wenn irgendwo in dieser Kette ein Fehler auftritt, ist es wichtig zu wissen, wo er aufgetreten ist und wie er sich auf andere Dienste ausgewirkt hat. Hier kommen Span-Links ins Spiel.

Span-Links ermöglichen es Ihnen, Ablaufverfolgungen zu verbinden, die nicht in einer direkten Eltern-Kind-Beziehung stehen, aber dennoch kontextbezogene Relevanz haben. Mithilfe von Span-Links zur Fehlerverfolgung können Sie den Fehler in einem Dienst mit den nachfolgenden Auswirkungen auf andere Dienste korrelieren , auch wenn sie keine direkte Beziehung haben.

Anwendungsfall: Nehmen wir an, Ihr Zahlungsdienst stößt beim Versuch, eine Transaktion zu verarbeiten, auf einen Fehler, und dieser Fehler wirkt sich indirekt auf den Versanddienst aus. Mithilfe eines Span-Links können Sie eine Beziehung zwischen der Fehlerspanne des Zahlungsdienstleisters und der Spanne des Versanddienstleisters erstellen, der das Problem erkannt hat.

Dies hilft Ihnen, den Fehlerfluss über die Dienste hinweg zu visualisieren und seine Auswirkungen zu verstehen.

Codebeispiel für die Erfassung und Verknüpfung von Fehlerspannen über Microservices hinweg

Sehen wir uns an, wie Sie diese Fehler mit OpenTelemetry erfassen und Span-Links zwischen ihnen erstellen können. Hier ist ein einfaches Beispiel mit Python:

from opentelemetry import trace

# Initialize tracer
tracer = trace.get_tracer("order-service")

# Create a span in the payment service
with tracer.start_as_current_span("payment-processing") as payment_span:
    try:
        # Simulate a payment process that raises an error
        process_payment()
    except Exception as e:
        payment_span.record_exception(e)
        payment_span.set_status(trace.Status(trace.StatusCode.ERROR, str(e)))

        # Capture the error trace and create a span link
        error_link = trace.Link(payment_span.get_span_context())

# Now in the shipping service, you can link this error trace
with tracer.start_as_current_span("shipping-service", links=[error_link]) as shipping_span:
    # Handle the impact of the payment error here
    process_shipping()

Nach dem Login kopieren
Nach dem Login kopieren

Mastering Trace Analysis with Span Links using openTelemetry and Signoz (A Practical Guide,Part 2)

Erklärung des obigen Codeausschnitts

Die Zahlungsverarbeitungsspanne erfasst den Fehler, wenn die Zahlung fehlschlägt.
Ein Span-Link (error_link) wird unter Verwendung des Kontexts des Zahlungsverarbeitungs-Spans erstellt.

Dieser Link wird dann zur Versanddienstspanne hinzugefügt, sodass Sie nachverfolgen können, wie sich der Zahlungsfehler auf den Versandvorgang auswirkt.

Sie können Tools wie SigNoz verwenden, um diese Fehler zu visualisieren, wodurch es viel einfacher wird, die Grundursache von Problemen zu identifizieren.

Implementieren von Span-Links in komplexen Microservice-Architekturen

Realer Anwendungsfall: Verwendung von Span-Links zur Verfolgung von Kundeninteraktionen über eine Multi-Service-Architektur hinweg

Nehmen wir ein reales Szenario. Stellen Sie sich eine E-Commerce-Plattform vor, auf der Kundenaktionen, wie das Aufgeben einer Bestellung, von mehreren Diensten abgewickelt werden: Bestelldienst, Lagerbestandsdienst, Zahlungsdienst und Versanddienst.

Ein Benutzer, der eine einzelne Bestellung aufgibt, kann mehrere Spans generieren, einen für jeden Service.

Diese Bereiche sind normalerweise in einer Eltern-Kind-Beziehung angeordnet, wobei der Bestelldienst der Zahlungsdienst sein kann und so weiter. Aber was ist, wenn Sie eine komplexere Beziehung verfolgen möchten?

Wenn der Inventardienst beispielsweise nach einer Zahlungsbestätigung selbstständig die Lagerbestände prüft, handelt es sich nicht um ein direktes Kind des Zahlungsdienstes. Mit einem Span-Link können Sie diese Dienste direkt verbinden und so ein genaueres Bild davon erstellen, wie Ihre Dienste interagieren.

Warum Span Links in komplexen Architekturen wichtig sind

Span-Links geben Ihnen die Flexibilität, diese nichtlinearen Interaktionen zu erfassen und bieten einen umfassenden Überblick über Benutzeraktionen, die sich über mehrere Dienste erstrecken. Dies ist besonders nützlich für die Fehlerbehebung bei Benutzererfahrungen, z. B. bei einer verspäteten Lieferung aufgrund einer Bestandsprüfung.

Wie Span-Links die Beobachtbarkeit in serverlosen oder ereignisgesteuerten Systemen verbessern

In serverlosen oder ereignisgesteuerten Systemen interagieren Dienste häufig entkoppelt. Ereignisse lösen Aktionen aus, ohne dass die Dienste direktes Wissen voneinander haben.

Zum Beispiel könnte ein Ereignis von einem Zahlungsdienst einen Bestandsaktualisierungsdienst über einen Ereignisbus auslösen. Da bei diesen Diensten keine Eltern-Kind-Beziehung besteht, kann es schwierig sein, sie mit herkömmlichen Methoden aufzuspüren.

So verwenden Sie Span-Links für Serverless

Span-Links können als Bindeglied zwischen diesen unzusammenhängenden Diensten dienen. Wenn ein Ereignis von einem Dienst generiert und von einem anderen konsumiert wird, können Sie einen Span-Link erstellen, der den Span des ursprünglichen Ereignisses mit dem Span des konsumierenden Dienstes verbindet.

Auf diese Weise können Sie den vollständigen Verlauf einer Interaktion erhalten, auch wenn Ihre serverlosen Funktionen unabhängig voneinander ausgeführt werden.

Beispiel: Nehmen wir an, Ihr Zahlungsdienst sendet nach der Verarbeitung einer Zahlung eine Nachricht an eine Warteschlange und diese Nachricht löst eine Bestandsaktualisierungsfunktion in einer serverlosen Architektur aus.

Hier ist ein Codeausschnitt, wie Sie diese Bereiche verknüpfen können

from opentelemetry import trace

# Initialize tracer
tracer = trace.get_tracer("order-service")

# Create a span in the payment service
with tracer.start_as_current_span("payment-processing") as payment_span:
    try:
        # Simulate a payment process that raises an error
        process_payment()
    except Exception as e:
        payment_span.record_exception(e)
        payment_span.set_status(trace.Status(trace.StatusCode.ERROR, str(e)))

        # Capture the error trace and create a span link
        error_link = trace.Link(payment_span.get_span_context())

# Now in the shipping service, you can link this error trace
with tracer.start_as_current_span("shipping-service", links=[error_link]) as shipping_span:
    # Handle the impact of the payment error here
    process_shipping()

Nach dem Login kopieren
Nach dem Login kopieren

Mastering Trace Analysis with Span Links using openTelemetry and Signoz (A Practical Guide,Part 2)

Mit dieser Einrichtung können Sie den Ablauf von der Zahlungsabwicklung bis zur Bestandsaktualisierung verfolgen, auch wenn diese asynchron ablaufen.

Bei der Visualisierung wird deutlich, wie verschiedene Teile Ihrer serverlosen Anwendung interagieren, was Ihre Fähigkeit verbessert, Engpässe oder unerwartete Verzögerungen zu diagnostizieren.

Warum ist dieser Ansatz wichtig für Observability

Herkömmliche Überwachung kann Ihnen zeigen, dass eine Bestandsaktualisierung langsam war, aber mit Span-Links können Sie diese Verzögerung auf das spezifische Zahlungsereignis zurückführen, das sie ausgelöst hat.

Dieser Einblick ist von unschätzbarem Wert für die Optimierung Ihres Systems und die Gewährleistung einer reibungslosen Benutzererfahrung.

Zusammenfassung der wichtigsten Erkenntnisse:

Span-Links sind eine leistungsstarke, wenig genutzte Funktion von OpenTelemetry, die die Trace-Korrelation in verteilten Systemen erheblich verbessern kann.

Aber was genau bedeutet das und warum sollte es Sie interessieren?

Stellen Sie sich Ihre Anwendung als ein Netzwerk verschiedener Dienste und Prozesse vor, die alle kommunizieren und zusammenarbeiten, um Benutzeranforderungen zu erfüllen. Sie werden häufig auf Szenarien stoßen, in denen eine direkte Eltern-Kind-Beziehung zwischen Ablaufverfolgungen die Komplexität des Geschehens nicht ganz erfasst.

Was passiert beispielsweise, wenn ein Hintergrundjob durch eine Benutzeraktion ausgelöste Ereignisse verarbeitet oder mehrere Dienste asynchron zusammenarbeiten? Hier kommt Span Links ins Spiel, um die Herausforderung einfach zu lösen.

Was sind also die Vorteile der Verwendung von Span-Links?

Beziehung von Spannen über Eltern-Kind-Einschränkungen hinaus:

Mit Span-Links können Sie Traces dienstübergreifend verbinden, ohne an die typische hierarchische Struktur von übergeordneten und untergeordneten Spans gebunden zu sein.

Dies ist besonders nützlich, wenn Sie Ereignisse in Beziehung setzen möchten, die gleichzeitig auftreten oder einen gemeinsamen Kontext haben, aber keine direkte Eltern-Kind-Beziehung haben. Wenn Sie beispielsweise einen Trace von einem benutzerorientierten Dienst mit einem Hintergrundprozess verknüpfen, erhalten Sie einen ganzheitlicheren Überblick darüber, wie sich Benutzeraktionen auf die Systemleistung auswirken.

Es hilft, das Debugging und die Fehlerbehebung zu verbessern:

Mit Span-Links erhalten Sie einen umfassenderen Einblick in die Interaktion verschiedener Dienste, insbesondere bei komplexen Arbeitsabläufen. Indem Sie sehen, welche Spans durch Links miteinander verbunden sind, können Sie Engpässe, Fehlermuster oder Leistungsprobleme identifizieren, die sonst möglicherweise schwer zu erkennen wären. Dies macht Span-Links zu einem leistungsstarken Tool zum Debuggen von Problemen, die sich über mehrere Dienste erstrecken.

Es bietet eine bessere Sichtbarkeit in asynchronen Systemen:

Für Anwendungen, die auf asynchroner Verarbeitung basieren, beispielsweise solche, die Nachrichtenwarteschlangen oder ereignisgesteuerte Architekturen verwenden, sind Span-Links von unschätzbarem Wert.

Sie ermöglichen es Ihnen, den Lebenszyklus einer Aufgabe oder Nachricht zu verfolgen, während sie verschiedene Dienste durchläuft. Dies kann Ihnen helfen, die Auswirkungen eines einzelnen Ereignisses auf Ihr gesamtes System zu verstehen, was es einfacher macht, Ihre Prozesse zu optimieren und zu verfeinern.

Kurz gesagt, Span-Links ermöglichen es Ihnen, ein vernetzteres und aussagekräftigeres Bild des Verhaltens Ihrer Anwendung zu erstellen, was zu einer besseren Beobachtbarkeit und einem tieferen Verständnis der Funktionsweise Ihrer verteilten Systeme führt.

Durch die effektive Nutzung von Span-Links können Sie die Trace-Korrelation verbessern, die Fehlerbehebung beschleunigen und einen umfassenderen Überblick über die Leistung Ihres Systems erhalten.

Links zur relevanten OpenTelemetry-Dokumentation für Span-Links

Für diejenigen, die tiefer in die offiziellen Leitlinien zu Span-Links und verwandten Konzepten eintauchen möchten, sind die folgenden Ressourcen für Ihre Recherche wertvoll:

OpenTelemetry Span Links-Dokumentation

Dies ist die Referenz, um zu verstehen, wie man Span-Links erstellt und verwaltet. Es behandelt die API-Spezifikationen für die Verknüpfung von Spans mit Beispielen in verschiedenen unterstützten Programmiersprachen. Es ist ein guter Ausgangspunkt, um die technischen Details der Funktionsweise von Span-Links unter der Haube zu verstehen.

OpenTelemetry-Kontextweitergabe

Das Verständnis der Kontextweitergabe ist der Schlüssel zur optimalen Nutzung von Span-Links. Diese Dokumentation bietet einen umfassenden Überblick darüber, wie der Kontext über Traces hinweg verwaltet wird. Dies ist besonders hilfreich, wenn Sie die Konsistenz Ihrer Ablaufverfolgungsdaten über verteilte Dienste hinweg sicherstellen möchten.

OpenTelemetry-Sampling-Strategien

Bei der Implementierung von Span-Links ist es wichtig zu wissen, wie sich das Sampling auf Ihre Traces auswirkt. Dieser Abschnitt der Dokumentation enthält detaillierte Anleitungen zur Konfiguration verschiedener Stichprobenstrategien und hilft Ihnen dabei, das richtige Gleichgewicht zwischen Datengranularität und Leistung zu finden.

Diese Links sind wertvolle Ressourcen sowohl als Referenz als auch für die praktische Anwendung und daher unverzichtbar für jeden, der sich ernsthaft mit den Tracing-Funktionen von OpenTelemetry befassen möchte. Setzen Sie ein Lesezeichen für diese Ressourcen und verwenden Sie sie als Leitfaden beim Aufbau komplexerer Observability-Setups.

Wenn Sie Fragen oder weitere Erklärungen haben, teilen Sie diese bitte in den Kommentaren mit.

Das obige ist der detaillierte Inhalt vonBeherrschen der Trace-Analyse mit Span-Links mit openTelemetry und Signoz (Ein praktischer Leitfaden, Teil 2). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!