Преглед:
проект, можеш да го използвашКонсулилиАполонЗа да направите конфигурационния център, един урок за Consul като ASP.NET център за конфигурация на Core:
Изисквания: Съхраняваме конфигурационната информация на APM в междинния софтуер на Consul, така че не се налага да влизаме в сървъра, за да променяме ръчно конфигурационната информация във файла appsettings.json.
Стартирай консул
Стартирайте consul middleware, като първо използвате следната команда:
Инсталирайте плъгини, свързани с Consul, ASP.NET Core
В нашия проект sky-apm-demo използвайте nuget, за да инсталирате Consul middleware като плъгин за четене на конфигурационния център със следната команда:
Модифицирайте метода CreateHostBuilder в обекта Program, за да добавите четенето на отдалечената конфигурационна информация на Consul, кодът е следният:
Междувременно, във файла appsettings.json, трябва да конфигурирате consul_url адреса, както следва:
Добавете нашата конфигурационна информация към Consul, за да отворите платформата за управление на уеб услугите:Входът към хиперлинк е видим.За създаване на sky-APM-demo/Appsettings. Development.json ключ стойността е следната:
Създайте нов test3 контролер метод, който да прочете информацията за конфигурацията на нашата консулска услуга за лесно тестване, както следва:
ДостъпВходът към хиперлинк е видим.Можете да получите конфигурацията, която задаваме нормално, както следва:
Като погледнете логовете skyapm-20201111.log, ще откриете, че адресът, където SkyApm има достъп до Skywalking, не е този, който сме конфигурирали, ноПо подразбиране: localhost:11800, както е показано на фигурата по-долу:
2020-11-11 15:32:35.869 +08:00 [My_Service] [Информация] SkyApm.Transport.Grpc.ConnectionManager : Изключване на връзката [localhost:11800]. 2020-11-11 15:32:45.875 +08:00 [My_Service] [Грешка] SkyApm.Transport.Grpc.ConnectionManager : Тайм-аут на сървъра за свързване.
System.Threading.Tasks.TaskCanceledException: Reached deadline. at Grpc.Core.Channel.WaitForStateChangedAsync(ChannelState lastObservedState, Nullable'1 краен срок) в Grpc.Core.Channel.ConnectAsync(краен срок за Nullable'1) в SkyApm.Transport.Grpc.ConnectionManager.ConnectAsync() Проверяваме изходния код на SkyAPM.Agent.AspNetCore в GitHub и установяваме, че ако нашата програма първо зададе настройките по подразбиране, а след това прочете конфигурационния файл appsettings.json skywalking.json skyapm.json, за да запише предишните стойности по подразбиране, както е показано на фигурата по-долу:
Относно конфигурацията, процесът на зареждане е следният:
Кога SkyAPM установи връзка със Skywalking?
Изходният код на SkyAPM има фонова задача InstrumentationHostedService при регистрация на IHostedService,.NET Core извиква методите StartAsync() и StopAsync() от тип IHostedService, съответно, при стартиране и спиране на приложението。
Можете да се обърнете към:
Проблемът сега е, че конфигурационната информация, зададена от нашия консул, се презаписва с стандартната стойност на SkyAPM, и за да решим този проблем, трябва да модифицираме изходния код – изтеглим изходния код на SkyAPM от GitHub.
Променете файла ConfigurationFactory по следния начин:
Модифицирайте файла ConfigurationBuilderExtensions по следния начин:
За модифицирания изходен код можете да се обърнете към моя клон:Входът към хиперлинк е видим.
Добавена логическа преценка, когато конфигурацията на SkyAPM вече съществува, не използва стандартната стойност,Регенерацияsky-apm-demo и SkyApm.Agent.AspNetCore проекти, копирайте всички файлове от модифицираната библиотека \src\SkyApm.Agent.AspNetCore\bin\Debug\netcoreapp3.1 в нашата папка Project \bin\Debug\netcoreapp3.1 и ги замените.Обновете браузъра си。
Като разгледате логовете на APM, можете да установите, че информацията за конфигурацията в Consul е успешно прочетена и комуникацията със Skywalking е успешно установена, както е показано на фигурата по-долу:
(Край)
|