Rezension:
Projekt, du kannst es nutzenKonsuloderApolloUm das Konfigurationszentrum zu machen, gibt es ein Tutorial zu Consul als ASP.NET Core Konfigurationszentrum:
Anforderungen: Wir speichern die Konfigurationsinformationen von APM in der Consul-Middleware, sodass wir uns nicht auf dem Server anmelden müssen, um die Konfigurationsinformationen in der appsettings.json-Datei manuell zu ändern.
Start Consul
Starte die Consul-Middleware, indem du zuerst den folgenden Befehl benutzt:
Installiere Consul-bezogene Plugins ASP.NET Core
In unserem Sky-apm-Demo-Projekt verwenden Sie nuget, um die Consul-Middleware als Plugin zum Lesen des Konfigurationszentrums mit folgendem Befehl zu installieren:
Ändern Sie die CreateHostBuilder-Methode im Program-Objekt, um das Lesen entfernter Consul-Konfigurationsinformationen hinzuzufügen, der Code lautet wie folgt:
In der Zwischenzeit müssen Sie in der appsettings.json-Datei die consul_url-Adresse wie folgt konfigurieren:
Fügen Sie unsere Konfigurationsinformationen zu Consul hinzu, um die Web-Management-Plattform zu öffnen:Der Hyperlink-Login ist sichtbar.Um Sky-APM-Demo/AppSettings zu erstellen. Development.json Schlüssel lautet der Wert wie folgt:
Erstellen Sie eine neue Test3-Controller-Methode, um die Informationen unserer Konsul-Service-Konfiguration für einfaches Testen zu lesen, wie folgt:
ZugangDer Hyperlink-Login ist sichtbar.Du kannst die Konfiguration erhalten, die wir normal setzen, wie folgt:
Wenn Sie sich die skyapm-20201111.log Logs ansehen, werden Sie feststellen, dass die Adresse, an der SkyApm auf Skywalking zugreift, nicht die ist, die wir konfiguriert haben, aberStandard: localhost:11800, wie in der untenstehenden Abbildung dargestellt:
2020-11-11 15:32:35.869 +08:00 [My_Service] [Informationen] SkyApm.Transport.Grpc.ConnectionManager : Verbindung abgeschaltet[localhost:11800]. 2020-11-11 15:32:45.875 +08:00 [My_Service] [Fehler] SkyApm.Transport.Grpc.ConnectionManager : Serververbindung Timeout.
System.Threading.Tasks.TaskCanceledException: Reached deadline. bei Grpc.Core.Channel.WaitForStateChangedAsync(ChannelState lastObservedState, Nullable'1 Deadline) bei Grpc.Core.Channel.ConnectAsync (Nullable'1-Deadline) bei SkyApm.Transport.Grpc.ConnectionManager.ConnectAsync() Wir überprüfen den Quellcode SkyAPM.Agent.AspNetCore auf GitHub und stellen fest, dass wenn unser Programm zuerst die Standardeinstellungen zuweist und dann die Konfigurationsdatei liest, appsettings.json skywalking.json skyapm.json um die vorherigen Standardwerte zu überschreiben, wie in der Abbildung unten gezeigt:
Bezüglich der Konfiguration ist der Ladeprozess wie folgt:
Wann hat SkyAPM also die Kommunikation mit Skywalking aufgenommen?
Der SkyAPM-Quellcode hat beim Registrieren von IHostedService eine Hintergrundfunktion InstrumentationHostedService,.NET Core ruft die StartAsync() und StopAsync()-Methoden des Typs IHostedService jeweils während des Anwendungsstarts und -stopps auf。
Sie können auf:
Das Problem ist jetzt, dass die von unserem Konsul festgelegten Konfigurationsinformationen durch den Standardwert von SkyAPM überschrieben werden, und um dieses Problem zu lösen, müssen wir den Quellcode ändern, indem wir den SkyAPM-Quellcode auf GitHub herunterladen.
Ändern Sie die ConfigurationFactory-Datei wie folgt:
Ändern Sie die Datei ConfigurationBuilderExtensions wie folgt:
Für den modifizierten Quellcode können Sie auf meinen Zweig verweisen:Der Hyperlink-Login ist sichtbar.
Zusätzliche logische Einschätzung, wenn die SkyAPM-Konfiguration bereits existiert und den Standardwert nicht verwendet,Regenerierensky-apm-demo und SkyApm.Agent.AspNetCore-Projekte, kopiere alle Dateien unter dem modifizierten Bibliotheksordner \src\SkyApm.Agent.AspNetCore\bin\Debug\netcoreapp3.1 in unser Projekt \bin\Debug\netcoreapp3.1 und ersetze sie.Aktualisieren Sie Ihren Browser。
Wenn Sie sich die APM-Protokolle ansehen, können Sie feststellen, dass die Konfigurationsinformationen in Consul erfolgreich gelesen wurden und die Kommunikation mit Skywalking erfolgreich hergestellt wurde, wie in der untenstehenden Abbildung dargestellt:
(Ende)
|