


Utiliser Zipkin et Jaeger pour implémenter le traçage distribué dans Beego
Utiliser Zipkin et Jaeger pour implémenter le traçage distribué dans Beego
Avec la prévalence des microservices, le développement de systèmes distribués est devenu de plus en plus courant. Cependant, les systèmes distribués apportent également de nouveaux défis, comme comment suivre le flux de demandes entre différents services, comment analyser et optimiser les performances des services, etc. À cet égard, les solutions de traçage distribuées sont devenues un élément de plus en plus important. Cet article explique comment utiliser Zipkin et Jaeger pour implémenter le traçage distribué dans Beego.
Demander un traçage sur plusieurs services est l'objectif principal du traçage distribué. Les flux de journaux ou de métriques centralisés ne peuvent pas résoudre ce problème car ces flux ne peuvent pas assurer la corrélation entre les services. Une demande peut nécessiter la collaboration de plusieurs services, et ces services doivent être conscients des temps de réponse et du comportement des autres services. L'approche traditionnelle consiste à enregistrer diverses métriques, puis à assouplir les seuils pour éviter le blocage lors de la réception de demandes. Mais cette approche peut cacher des problèmes tels que des problèmes et des problèmes de performances. Le traçage distribué est une solution de traçage des demandes interservices. Dans cette approche, lorsqu'une requête circule entre les services, chaque service génère une série d'identifiants qui suivront l'intégralité de la requête.
Voyons comment implémenter le traçage distribué dans Beego.
Zipkin et Jaeger sont actuellement les solutions de traçage distribuées les plus populaires. Les deux outils prennent en charge l'API OpenTracing, permettant aux développeurs de consigner et de tracer les requêtes entre les services de manière cohérente.
Tout d'abord, nous devons installer et démarrer Zipkin ou Jaeger, puis configurer le traçage distribué dans l'application Beego. Dans cet article, nous utiliserons Zipkin.
Installez Zipkin :
curl -sSL https://zipkin.io/quickstart.sh | bash -s java -jar zipkin.jar
Une fois Zipkin lancé, vous pouvez accéder à son interface utilisateur Web via http://localhost:9411.
Ensuite, nous devons ajouter la prise en charge de l'API OpenTracing dans Beego. Nous pouvons utiliser le package opentracing-go et enregistrer les demandes interservices et autres événements à l'aide de l'API qu'il fournit. Un exemple de code de suivi est le suivant :
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 }
Dans l'exemple ci-dessus, nous initialisons d'abord le tracker Zipkin, puis nous l'utilisons pour enregistrer certains événements. Nous pouvons ajouter des balises et des paires clé-valeur et terminer la période en appelant span.Finish().
Maintenant, ajoutons le traçage distribué à notre application Beego.
Tout d’abord, ajoutons les dépendances opentracing-go et zipkin-go-opentracing. Nous pouvons le faire en utilisant go mod ou en installant manuellement des packages.
go get github.com/opentracing/opentracing-go go get github.com/openzipkin/zipkin-go-opentracing
Ensuite, nous devons initialiser le middleware Zipkin tracker et Beego tracker dans l'application Beego. Voici un exemple de code pour le middleware Beego tracer :
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 }
Dans l'exemple de code ci-dessus, nous définissons un middleware appelé TraceMiddleware. Ce middleware extraira le contexte de suivi existant de l'en-tête HTTP (le cas échéant) et l'utilisera pour créer un nouveau tracker pour la requête. Nous définissons également la durée dans le contexte de la requête afin que tous les autres middlewares et gestionnaires puissent y accéder. Enfin, une fois l'exécution du gestionnaire terminée, nous appelons la méthode finish() sur le span afin que Zipkin puisse enregistrer le suivi des interdépendances entre tous les services demandés.
Nous devons également connecter ce middleware à notre routeur Beego. Nous pouvons le faire en utilisant le code suivant dans le code d'initialisation du routeur :
beego.InsertFilter("*", beego.BeforeRouter, TraceMiddleware())
Maintenant, lancez votre application Beego et visitez http://localhost:9411 pour ouvrir l'interface utilisateur Zipkin et afficher les données de suivi.
Implémenter le traçage distribué dans les applications Beego peut paraître compliqué, mais en utilisant les bibliothèques opentracing-go et zipkin-go-opentracing, nous pouvons facilement ajouter cette fonctionnalité. Cela devient de plus en plus important à mesure que nous continuons à augmenter le nombre et la complexité de nos services, ce qui nous permet de comprendre comment nos services fonctionnent ensemble et de garantir leur bon fonctionnement tout au long du processus de traitement des demandes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Avec l’essor du cloud computing et des microservices, la complexité des applications a augmenté. Par conséquent, la surveillance et le diagnostic deviennent l’une des tâches de développement importantes. À cet égard, Prometheus et Grafana sont deux outils open source populaires de surveillance et de visualisation qui peuvent aider les développeurs à mieux surveiller et analyser les applications. Cet article explorera comment utiliser Prometheus et Grafana pour implémenter la surveillance et les alarmes dans le framework Beego. 1. Introduction Beego est une application web open source à développement rapide.

Avec le développement rapide d'Internet, l'utilisation d'applications Web devient de plus en plus courante. La manière de surveiller et d'analyser l'utilisation des applications Web est devenue une préoccupation des développeurs et des opérateurs de sites Web. Google Analytics est un puissant outil d'analyse de sites Web qui permet de suivre et d'analyser le comportement des visiteurs d'un site Web. Cet article explique comment utiliser Google Analytics dans Beego pour collecter des données de sites Web. 1. Pour enregistrer un compte Google Analytics, vous devez d'abord

À l'ère actuelle de développement technologique rapide, les langages de programmation poussent comme des champignons après la pluie. L'un des langages qui a beaucoup retenu l'attention est le langage Go, apprécié par de nombreux développeurs pour sa simplicité, son efficacité, sa sécurité de concurrence et d'autres fonctionnalités. Le langage Go est connu pour son écosystème solide avec de nombreux excellents projets open source. Cet article présentera cinq projets open source sélectionnés en langage Go et amènera les lecteurs à explorer le monde des projets open source en langage Go. KubernetesKubernetes est un moteur d'orchestration de conteneurs open source pour l'automatisation

Dans le framework Beego, la gestion des erreurs est un élément très important, car si l'application ne dispose pas d'un mécanisme de gestion des erreurs correct et complet, cela peut provoquer un crash ou un mauvais fonctionnement de l'application, ce qui est à la fois un avantage pour nos projets et pour les utilisateurs. problème très grave. Le framework Beego fournit une série de mécanismes pour nous aider à éviter ces problèmes et à rendre notre code plus robuste et maintenable. Dans cet article, nous présenterons les mécanismes de gestion des erreurs dans le framework Beego et discuterons de la manière dont ils peuvent nous aider à éviter

Avec le développement rapide d'Internet, les systèmes distribués sont devenus l'une des infrastructures de nombreuses entreprises et organisations. Pour qu’un système distribué fonctionne correctement, il doit être coordonné et géré. À cet égard, ZooKeeper et Curator sont deux outils qui valent la peine d'être utilisés. ZooKeeper est un service de coordination distribué très populaire qui peut nous aider à coordonner l'état et les données entre les nœuds d'un cluster. Curator est une encapsulation de ZooKeeper

Avec le développement rapide d’Internet, de plus en plus d’entreprises ont commencé à migrer leurs applications vers des plateformes cloud. Docker et Kubernetes sont devenus deux outils très populaires et puissants pour le déploiement et la gestion d'applications sur les plateformes cloud. Beego est un framework Web développé à l'aide de Golang. Il fournit des fonctions riches telles que le routage HTTP, la superposition MVC, la journalisation, la gestion de la configuration et la gestion des sessions. Dans cet article, nous expliquerons comment utiliser Docker et Kub

"Go Language Development Essentials : 5 recommandations de framework populaires" En tant que langage de programmation rapide et efficace, le langage Go est favorisé par de plus en plus de développeurs. Afin d'améliorer l'efficacité du développement et d'optimiser la structure du code, de nombreux développeurs choisissent d'utiliser des frameworks pour créer rapidement des applications. Dans le monde du langage Go, il existe de nombreux excellents frameworks parmi lesquels choisir. Cet article présentera 5 frameworks de langage Go populaires et fournira des exemples de code spécifiques pour aider les lecteurs à mieux comprendre et utiliser ces frameworks. 1.GinGin est un framework Web léger avec une rapidité

Avec le développement rapide d'Internet et de l'Internet mobile, de plus en plus d'applications nécessitent une authentification et un contrôle des autorisations, et JWT (JSON Web Token), en tant que mécanisme léger d'authentification et d'autorisation, est largement utilisé dans les applications WEB. Beego est un framework MVC basé sur le langage Go, qui présente les avantages d'efficacité, de simplicité et d'évolutivité. Cet article explique comment utiliser JWT pour implémenter l'authentification dans Beego. 1. Introduction à JWT JSONWebToken (JWT) est un
