Révision:
projet, tu peux l’utiliserConsulouApollonPour faire le centre de configuration, un tutoriel sur Consul en tant que centre de configuration ASP.NET Core :
Exigences : Nous stockons les informations de configuration de l’APM dans le middleware Consul, afin de ne pas avoir à nous connecter au serveur pour modifier manuellement les informations de configuration dans le fichier appsettings.json.
Consul de départ
Commencez par lancer le middleware consul en utilisant la commande suivante :
Installer les plugins liés à Consul ASP.NET Core
Dans notre projet sky-apm-demo, utilisez Nuget pour installer le middleware Consul comme plugin pour lire le centre de configuration avec la commande suivante :
Modifiez la méthode CreateHostBuilder dans l’objet Programme pour ajouter la lecture des informations de configuration Consul à distance, le code est le suivant :
Pendant ce temps, dans le fichier appsettings.json, vous devez configurer l’adresse consul_url comme suit :
Ajoutez nos informations de configuration à consul pour ouvrir la plateforme de gestion web :La connexion hyperlientérée est visible.Pour créer Sky-APM-Demo/AppSettings. Development.json clé, la valeur est la suivante :
Créer une nouvelle méthode de contrôleur test3 pour lire les informations de notre configuration de service consul afin de faciliter les tests, comme suit :
AccèsLa connexion hyperlientérée est visible.Vous pouvez obtenir la configuration que nous avons fixée normalement, comme suit :
En regardant les journaux skyapm-20201111.log, vous constaterez que l’adresse où SkyApm accède à Skywalking n’est pas celle que nous avons configurée, maisPar défaut : localhost :11800, comme montré dans la figure ci-dessous :
2020-11-11 15:32:35.869 +08:00 [My_Service] [Informations] SkyApm.Transport.Grpc.ConnectionManager : Fermeture de la connexion[localhost :11800]. 2020-11-11 15:32:45.875 +08:00 [My_Service] [Erreur] SkyApm.Transport.Grpc.ConnectionManager : Délai d’attente du serveur de connexion.
System.Threading.Tasks.TaskCanceledException: Reached deadline. sur Grpc.Core.Channel.WaitForStateChangedAsync (ChannelState lastObservedState, date limite Nullable'1) à Grpc.Core.Channel.ConnectAsync (date limite Nullable'1) sur SkyApm.Transport.Grpc.ConnectionManager.ConnectAsync() Nous vérifions le code source SkyAPM.Agent.AspNetCore sur GitHub et constatons que si notre programme assigne d’abord les paramètres par défaut, puis lit le fichier de configuration appsettings.json skywalking.json skyapm.json de remplacer les valeurs par défaut précédentes, comme montré dans la figure ci-dessous :
Concernant la configuration, le processus de chargement est le suivant :
Alors, quand SkyAPM a-t-il établi une communication avec Skywalking ?
Le code source SkyAPM possède une tâche en arrière-plan InstrumentationHostedService, lors de l’enregistrement d’IHostedService,.NET Core appelle respectivement les méthodes StartAsync() et StopAsync() de type IHostedService, lors du démarrage et de l’arrêt de l’application。
Vous pouvez vous référer à :
Le problème maintenant, c’est que les informations de configuration définies par notre consul sont écrasées par la valeur par défaut de SkyAPM, et pour résoudre ce problème, nous devons modifier le code source, nous téléchargeons le code source SkyAPM sur GitHub.
Modifiez le fichier ConfigurationFactory comme suit :
Modifiez le fichier ConfigurationBuilderExtensions comme suit :
Pour le code source modifié, vous pouvez vous référer à ma branche :La connexion hyperlientérée est visible.
En plus, le jugement logique : lorsque la configuration SkyAPM existe déjà, n’utilise pas la valeur par défaut,Régénérationsky-apm-demo et SkyApm.Agent.AspNetCore, copiez tous les fichiers sous la bibliothèque modifiée \src\SkyApm.Agent.AspNetCore\bin\Debug\netcoreapp3.1 dans notre projet \bin\Debug\netcoreapp3.1 et remplacez-les.Rafraîchissez votre navigateur。
En consultant les journaux APM, vous pouvez constater que les informations de configuration dans consul ont été lues avec succès et que la communication avec Skywalking a été établie avec succès, comme montré dans la figure ci-dessous :
(Fin)
|