Recenzja:
projektu, możesz go użyćKonsullubApolloAby zrobić centrum konfiguracyjne, tutorial o Consul jako centrum konfiguracyjnym ASP.NET Core:
Wymagania: Informacje konfiguracyjne APM przechowujemy w oprogramowaniu Consul, dzięki czemu nie musimy logować się na serwer, aby ręcznie modyfikować dane konfiguracyjne w pliku appsettings.json.
Start Consul
Rozpocznij oprogramowanie middleware Consul, najpierw za pomocą następującego polecenia:
Zainstaluj wtyczki związane z Consul ASP.NET Core
W naszym projekcie sky-apm-demo użyj nuget do zainstalowania middleware Consul jako wtyczki do odczytu centrum konfiguracyjnego za pomocą następującego polecenia:
Zmodyfikuj metodę CreateHostBuilder w obiekcie Program, aby dodać odczyt zdalnych informacji konfiguracyjnych Consul, a kod wygląda następująco:
Tymczasem w pliku appsettings.json musisz skonfigurować adres consul_url, w następujący sposób:
Dodaj nasze dane konfiguracyjne do Consul, aby otworzyć platformę zarządzania stroną:Logowanie do linku jest widoczne.Aby tworzyć sky-apm-demo/appsettings. Development.json klucz jest następująca:
Stwórz nową metodę kontrolera test3 do odczytu informacji o konfiguracji usług konsula dla łatwego testowania, w następujący sposób:
DostępLogowanie do linku jest widoczne.Możesz uzyskać konfigurację, którą normalnie ustaliliśmy, w następujący sposób:
Patrząc na logi skyapm-20201111.log, zobaczysz, że adres, na którym SkyApm korzysta ze Skywalking, nie jest tym, co skonfigurowaliśmy, aleDomyślne: localhost:11800, jak pokazano na poniższym rysunku:
2020-11-11 15:32:35.869 +08:00 [My_Service] [Informacje] SkyApm.Transport.Grpc.ConnectionManager : Wyłączenie połączenia[localhost:11800]. 2020-11-11 15:32:45.875 +08:00 [My_Service] [Błąd] SkyApm.Transport.Grpc.ConnectionManager : Czas na połączenie serwera.
System.Threading.Tasks.TaskCanceledException: Reached deadline. na Grpc.Core.Channel.WaitForStateChangedAsync(ChannelState lastObservedState, Nullable'1 deadline) na Grpc.Core.Channel.ConnectAsync(Nullable'1 deadline) na stronie SkyApm.Transport.Grpc.ConnectionManager.ConnectAsync() Sprawdzamy kod źródłowy SkyAPM.Agent.AspNetCore na GitHubie i okazuje się, że jeśli nasz program najpierw przypisze domyślne ustawienia, a następnie odczyta plik konfiguracyjny appsettings.json skywalking.json skyapm.json nadpisuje wcześniejsze wartości domyślne, jak pokazano na poniższym rysunku:
Jeśli chodzi o konfigurację, proces ładowania wygląda następująco:
Kiedy więc SkyAPM nawiązało kontakt ze Skywalking?
Kod źródłowy SkyAPM posiada zadanie tła InstrumentationHostedService, podczas rejestracji IHostedService,.NET Core wywołuje metody StartAsync() i StopAsync() typu IHostedService, odpowiednio podczas uruchamiania i zatrzymywania aplikacji。
Możesz odnieść się do:
Problem polega teraz na tym, że informacje konfiguracyjne ustawione przez naszego konsula są nadpisywane przez domyślną wartość SkyAPM, a aby rozwiązać ten problem, musimy zmodyfikować kod źródłowy, pobieramy kod źródłowy SkyAPM na GitHub.
Zmodyfikuj plik ConfigurationFactory w następujący sposób:
Zmodyfikuj plik ConfigurationBuilderExtensions w następujący sposób:
Zmodyfikowany kod źródłowy można znaleźć w mojej gałęzi:Logowanie do linku jest widoczne.
Dodana ocena logiczna, gdy konfiguracja SkyAPM już istnieje, nie używa wartości domyślnej,Regenerujprojekty sky-apm-demo i SkyApm.Agent.AspNetCore, skopiuj wszystkie pliki z zmodyfikowanej biblioteki \src\SkyApm.Agent.AspNetCore\bin\Debug\netcoreapp3.1 do naszego projektu \bin\Debug\netcoreapp3.1 i zastąp je.Odśwież przeglądarkę。
Przeglądając logi APM, można zobaczyć, że informacje konfiguracyjne w Consul zostały pomyślnie odczytane, a komunikacja ze Skywalking została pomyślnie nawiązana, co pokazano na poniższym rysunku:
(Koniec)
|