Heim Backend-Entwicklung Golang Verwendung von Zipkin und Jaeger zur Implementierung der verteilten Ablaufverfolgung in Beego

Verwendung von Zipkin und Jaeger zur Implementierung der verteilten Ablaufverfolgung in Beego

Jun 22, 2023 pm 03:22 PM
beego zipkin jaeger

Verwendung von Zipkin und Jaeger zur Implementierung verteilter Ablaufverfolgung in Beego

Mit der Verbreitung von Microservices ist die Entwicklung verteilter Systeme immer häufiger geworden. Allerdings bringen verteilte Systeme auch neue Herausforderungen mit sich, etwa wie man den Anfragefluss zwischen verschiedenen Diensten verfolgen kann, wie man die Leistung von Diensten analysieren und optimieren kann usw. In dieser Hinsicht sind verteilte Tracing-Lösungen zu einem immer wichtigeren Bestandteil geworden. In diesem Artikel wird erläutert, wie Sie mit Zipkin und Jaeger die verteilte Ablaufverfolgung in Beego implementieren.

Die Anforderungsverfolgung über mehrere Dienste hinweg ist das Hauptziel der verteilten Ablaufverfolgung. Zentralisierte Protokoll- oder Metrik-Streams können dieses Problem nicht lösen, da diese Streams keine Korrelation zwischen Diensten bereitstellen können. Eine Anfrage erfordert möglicherweise die Zusammenarbeit mehrerer Dienste, und diese Dienste müssen die Antwortzeiten und das Verhalten anderer Dienste kennen. Der traditionelle Ansatz besteht darin, verschiedene Metriken zu protokollieren und dann die Schwellenwerte zu lockern, um Blockierungen beim Empfang von Anfragen zu vermeiden. Dieser Ansatz kann jedoch Probleme wie Störungen und Leistungsprobleme verbergen. Die verteilte Ablaufverfolgung ist eine Lösung für die dienstübergreifende Anforderungsverfolgung. Bei diesem Ansatz generiert jeder Dienst beim Fluss einer Anforderung zwischen Diensten eine Reihe von IDs, die die gesamte Anforderung verfolgen.

Sehen wir uns an, wie Sie verteiltes Tracing in Beego implementieren.

Zipkin und Jaeger sind derzeit die beliebtesten verteilten Tracing-Lösungen. Beide Tools unterstützen die OpenTracing-API und ermöglichen es Entwicklern, Anfragen dienstübergreifend konsistent zu protokollieren und zu verfolgen.

Zuerst müssen wir Zipkin oder Jaeger installieren und starten und dann die verteilte Ablaufverfolgung in der Beego-Anwendung konfigurieren. In diesem Artikel verwenden wir Zipkin.

Zipkin installieren:

curl -sSL https://zipkin.io/quickstart.sh | bash -s
java -jar zipkin.jar
Nach dem Login kopieren

Sobald Zipkin gestartet ist, können Sie über http://localhost:9411 auf die Web-Benutzeroberfläche zugreifen.

Als nächstes müssen wir Unterstützung für die OpenTracing-API in Beego hinzufügen. Wir können das Paket opentracing-go verwenden und über die bereitgestellte API dienstübergreifende Anfragen und andere Ereignisse protokollieren. Ein Beispiel für einen Tracking-Code lautet wie folgt:

import (
    "github.com/opentracing/opentracing-go"
)

func main() {
    // Initialize the tracer
    tracer, closer := initTracer()
    defer closer.Close()

    // Start a new span
    span := tracer.StartSpan("example-span")

    // Record some events
    span.SetTag("example-tag", "example-value")
    span.LogKV("example-key", "example-value")

    // Finish the span
    span.Finish()
}

func initTracer() (opentracing.Tracer, io.Closer) {
    // Initialize the tracer
    tracer, closer := zipkin.NewTracer(
        zipkin.NewReporter(httpTransport.NewReporter("http://localhost:9411/api/v2/spans")),
        zipkin.WithLocalEndpoint(zipkin.NewEndpoint("example-service", "localhost:80")),
        zipkin.WithTraceID128Bit(true),
    )

    // Set the tracer as the global tracer
    opentracing.SetGlobalTracer(tracer)

    return tracer, closer
}
Nach dem Login kopieren

Im obigen Beispiel initialisieren wir zunächst den Zipkin-Tracker und verwenden ihn dann zum Protokollieren einiger Ereignisse. Wir können Tags und Schlüssel-Wert-Paare hinzufügen und den Span beenden, indem wir span.Finish() aufrufen.

Jetzt fügen wir unserer Beego-Anwendung verteiltes Tracing hinzu.

Zunächst fügen wir die Abhängigkeiten opentracing-go und zipkin-go-opentracing hinzu. Wir können dies mit Go Mod oder der manuellen Installation von Paketen tun.

go get github.com/opentracing/opentracing-go
go get github.com/openzipkin/zipkin-go-opentracing
Nach dem Login kopieren

Dann müssen wir den Zipkin-Tracker und die Beego-Tracker-Middleware in der Beego-Anwendung initialisieren. Das Folgende ist ein Beispielcode für die Beego-Tracer-Middleware:

import (
    "net/http"

    "github.com/astaxie/beego"
    opentracing "github.com/opentracing/opentracing-go"
    "github.com/openzipkin/zipkin-go-opentracing"
)

func TraceMiddleware() func(http.ResponseWriter, *http.Request, http.HandlerFunc) {
    return func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
        // Initialize the tracer
        tracer, closer := initTracer()
        defer closer.Close()

        // Extract the span context from the HTTP headers
        spanCtx, err := tracer.Extract(opentracing.HTTPHeaders,
            opentracing.HTTPHeadersCarrier(r.Header))
        if err != nil && err != opentracing.ErrSpanContextNotFound {
            beego.Error("failed to extract span context:", err)
        }

        // Start a new span
        span := tracer.StartSpan(r.URL.Path, ext.RPCServerOption(spanCtx))

        // Set some tags
        span.SetTag("http.method", r.Method)
        span.SetTag("http.url", r.URL.String())

        // Inject the span context into the HTTP headers
        carrier := opentracing.HTTPHeadersCarrier(r.Header)
        if err := tracer.Inject(span.Context(),
            opentracing.HTTPHeaders, carrier); err != nil {
            beego.Error("failed to inject span context:", err)
        }

        // Set the span as a variable in the request context
        r = r.WithContext(opentracing.ContextWithSpan(r.Context(), span))

        // Call the next middleware/handler
        next(w, r)

        // Finish the span
        span.Finish()
    }
}

func initTracer() (opentracing.Tracer, io.Closer) {
    // Initialize the Zipkin tracer
    report := zipkinhttp.NewReporter("http://localhost:9411/api/v2/spans")
    defer report.Close()

    endpoint, err := zipkin.NewEndpoint("example-service", "localhost:80")
    if err != nil {
        beego.Error("failed to create Zipkin endpoint:", err)
    }

    nativeTracer, err := zipkin.NewTracer(
        report, zipkin.WithLocalEndpoint(endpoint),
        zipkin.WithTraceID128Bit(true))
    if err != nil {
        beego.Error("failed to create Zipkin tracer:", err)
    }

    // Initialize the OpenTracing API tracer
    tracer := zipkinopentracing.Wrap(nativeTracer)

    // Set the tracer as the global tracer
    opentracing.SetGlobalTracer(tracer)

    return tracer, report
}
Nach dem Login kopieren

Im obigen Beispielcode definieren wir eine Middleware namens TraceMiddleware. Diese Middleware extrahiert den vorhandenen Tracking-Kontext aus dem HTTP-Header (falls vorhanden) und verwendet ihn, um einen neuen Tracker für die Anfrage zu erstellen. Wir legen die Spanne auch im Anforderungskontext fest, damit alle anderen Middleware und Handler darauf zugreifen können. Nachdem die Ausführung des Handlers beendet ist, rufen wir schließlich die Methode „finish()“ für den Span auf, damit Zipkin die Abhängigkeitsverfolgung über alle angeforderten Dienste hinweg aufzeichnen kann.

Wir müssen diese Middleware auch an unseren Beego-Router anschließen. Wir können dies mithilfe des folgenden Codes im Router-Initialisierungscode tun:

beego.InsertFilter("*", beego.BeforeRouter, TraceMiddleware())
Nach dem Login kopieren

Starten Sie nun Ihre Beego-Anwendung und besuchen Sie http://localhost:9411, um die Zipkin-Benutzeroberfläche zu öffnen und die Tracking-Daten anzuzeigen.

Die Implementierung verteilter Ablaufverfolgung in Beego-Anwendungen mag kompliziert erscheinen, aber durch die Verwendung der Bibliotheken opentracing-go und zipkin-go-opentracing können wir diese Funktionalität problemlos hinzufügen. Dies wird immer wichtiger, da wir die Anzahl und Komplexität unserer Dienste weiter erhöhen. Dadurch können wir verstehen, wie unsere Dienste zusammenarbeiten, und sicherstellen, dass sie während des gesamten Anfragebearbeitungsprozesses eine gute Leistung erbringen.

Das obige ist der detaillierte Inhalt vonVerwendung von Zipkin und Jaeger zur Implementierung der verteilten Ablaufverfolgung in Beego. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Verwendung von Prometheus und Grafana zur Implementierung von Überwachung und Alarmierung in Beego Verwendung von Prometheus und Grafana zur Implementierung von Überwachung und Alarmierung in Beego Jun 22, 2023 am 09:06 AM

Mit dem Aufkommen von Cloud Computing und Microservices hat die Anwendungskomplexität zugenommen. Daher werden Überwachung und Diagnose zu einer wichtigen Entwicklungsaufgabe. In dieser Hinsicht sind Prometheus und Grafana zwei beliebte Open-Source-Überwachungs- und Visualisierungstools, die Entwicklern helfen können, Anwendungen besser zu überwachen und zu analysieren. In diesem Artikel wird untersucht, wie Sie Prometheus und Grafana verwenden, um Überwachung und Alarmierung im Beego-Framework zu implementieren. 1. Einführung Beego ist eine Open-Source-Webanwendung für die schnelle Entwicklung.

Verwenden Sie Google Analytics, um Website-Daten in Beego zu zählen Verwenden Sie Google Analytics, um Website-Daten in Beego zu zählen Jun 22, 2023 am 09:19 AM

Mit der rasanten Entwicklung des Internets ist die Nutzung von Webanwendungen immer häufiger geworden. Die Überwachung und Analyse der Nutzung von Webanwendungen ist zu einem Schwerpunkt von Entwicklern und Website-Betreibern geworden. Google Analytics ist ein leistungsstarkes Website-Analysetool, das das Verhalten von Website-Besuchern verfolgen und analysieren kann. In diesem Artikel wird erläutert, wie Sie Google Analytics in Beego zum Sammeln von Website-Daten verwenden. 1. Um ein Google Analytics-Konto zu registrieren, müssen Sie zunächst Folgendes tun

Fünf ausgewählte Open-Source-Projekte in der Go-Sprache, mit denen Sie die Welt der Technologie erkunden können Fünf ausgewählte Open-Source-Projekte in der Go-Sprache, mit denen Sie die Welt der Technologie erkunden können Jan 30, 2024 am 09:08 AM

Im heutigen Zeitalter der rasanten technologischen Entwicklung schießen Programmiersprachen wie Pilze nach einem Regenschauer aus dem Boden. Eine der Sprachen, die viel Aufmerksamkeit erregt hat, ist die Go-Sprache, die von vielen Entwicklern wegen ihrer Einfachheit, Effizienz, Parallelitätssicherheit und anderen Funktionen geliebt wird. Die Go-Sprache ist für ihr starkes Ökosystem mit vielen hervorragenden Open-Source-Projekten bekannt. In diesem Artikel werden fünf ausgewählte Open-Source-Projekte für die Go-Sprache vorgestellt und der Leser soll die Welt der Open-Source-Projekte für die Go-Sprache erkunden. KubernetesKubernetes ist eine Open-Source-Container-Orchestrierungs-Engine für die Automatisierung

Fehlerbehandlung in Beego – Anwendungsabstürze verhindern Fehlerbehandlung in Beego – Anwendungsabstürze verhindern Jun 22, 2023 am 11:50 AM

Im Beego-Framework ist die Fehlerbehandlung ein sehr wichtiger Teil, denn wenn die Anwendung nicht über einen korrekten und vollständigen Fehlerbehandlungsmechanismus verfügt, kann dies dazu führen, dass die Anwendung abstürzt oder nicht ordnungsgemäß ausgeführt wird, was sowohl für unsere Projekte als auch für Benutzer gilt sehr ernstes Problem. Das Beego-Framework bietet eine Reihe von Mechanismen, die uns helfen, diese Probleme zu vermeiden und unseren Code robuster und wartbarer zu machen. In diesem Artikel stellen wir die Fehlerbehandlungsmechanismen im Beego-Framework vor und diskutieren, wie sie uns bei der Vermeidung helfen können

Verwendung von ZooKeeper und Curator für die verteilte Koordination und Verwaltung in Beego Verwendung von ZooKeeper und Curator für die verteilte Koordination und Verwaltung in Beego Jun 22, 2023 pm 09:27 PM

Mit der rasanten Entwicklung des Internets sind verteilte Systeme zu einer der Infrastrukturen in vielen Unternehmen und Organisationen geworden. Damit ein verteiltes System ordnungsgemäß funktioniert, muss es koordiniert und verwaltet werden. In dieser Hinsicht sind ZooKeeper und Curator zwei lohnenswerte Tools. ZooKeeper ist ein sehr beliebter verteilter Koordinationsdienst, der uns dabei helfen kann, den Status und die Daten zwischen Knoten in einem Cluster zu koordinieren. Curator ist eine Kapselung von ZooKeeper

Produktionsbereitstellung und -verwaltung mit Docker und Kubernetes in Beego Produktionsbereitstellung und -verwaltung mit Docker und Kubernetes in Beego Jun 23, 2023 am 08:58 AM

Mit der rasanten Entwicklung des Internets haben immer mehr Unternehmen damit begonnen, ihre Anwendungen auf Cloud-Plattformen zu migrieren. Docker und Kubernetes sind zu zwei sehr beliebten und leistungsstarken Tools für die Anwendungsbereitstellung und -verwaltung auf Cloud-Plattformen geworden. Beego ist ein mit Golang entwickeltes Web-Framework, das umfangreiche Funktionen wie HTTP-Routing, MVC-Layering, Protokollierung, Konfigurationsverwaltung und Sitzungsverwaltung bietet. In diesem Artikel behandeln wir die Verwendung von Docker und Kub

Go-Grundlagen zur Sprachentwicklung: 5 beliebte Framework-Empfehlungen Go-Grundlagen zur Sprachentwicklung: 5 beliebte Framework-Empfehlungen Mar 24, 2024 pm 01:15 PM

„Grundlagen der Go-Sprachentwicklung: 5 beliebte Framework-Empfehlungen“ Als schnelle und effiziente Programmiersprache wird die Go-Sprache von immer mehr Entwicklern bevorzugt. Um die Entwicklungseffizienz zu verbessern und die Codestruktur zu optimieren, entscheiden sich viele Entwickler für die Verwendung von Frameworks, um Anwendungen schnell zu erstellen. In der Welt der Go-Sprache stehen viele hervorragende Frameworks zur Auswahl. In diesem Artikel werden fünf beliebte Go-Sprach-Frameworks vorgestellt und spezifische Codebeispiele bereitgestellt, um den Lesern zu helfen, diese Frameworks besser zu verstehen und zu verwenden. 1.GinGin ist ein leichtes Web-Framework mit hoher Geschwindigkeit

Verwendung von JWT zur Implementierung der Authentifizierung in Beego Verwendung von JWT zur Implementierung der Authentifizierung in Beego Jun 22, 2023 pm 12:44 PM

Mit der rasanten Entwicklung des Internets und des mobilen Internets erfordern immer mehr Anwendungen eine Authentifizierung und Berechtigungskontrolle, und JWT (JSON Web Token) wird als einfacher Authentifizierungs- und Autorisierungsmechanismus häufig in WEB-Anwendungen verwendet. Beego ist ein MVC-Framework, das auf der Go-Sprache basiert und die Vorteile von Effizienz, Einfachheit und Skalierbarkeit bietet. In diesem Artikel wird die Verwendung von JWT zur Implementierung der Authentifizierung in Beego vorgestellt. 1. Einführung in JWT JSONWebToken (JWT) ist ein

See all articles