Ćwiczenie — Wdrażanie usługi Application Insights
Podczas tej lekcji zmodyfikujesz usługę katalogu w celu włączenia telemetrii usługi Application Insights. Usługa Application Insights została już włączona dla trzech innych mikrousług, ale wymagane są zmiany konfiguracji.
Wykonasz następujące zadania:
- Tworzenie zasobu usługi Application Insights dla aplikacji.
- Włączanie rejestrowania w usłudze Application Insights.
- Wdrażanie zaktualizowanych i ponownie skonfigurowanych mikrousług.
Uwaga
Jeśli sesja usługi Cloud Shell zostanie rozłączona z powodu braku aktywności, połącz się ponownie i uruchom następujące polecenie, aby powrócić do tego katalogu i otworzyć edytor usługi Cloud Shell:
cd ~/clouddrive/aspnet-learn/src/ && \
code .
Tworzenie i konfigurowanie zasobów usługi Application Insights
W usłudze Cloud Shell sprawdź, czy dodano rozszerzenie Application Insights do interfejsu wiersza polecenia platformy Azure, uruchamiając następujące polecenie:
az extension add --name application-insights
Uruchom następujące polecenia, aby utworzyć zasoby usługi Application Insights:
az configure --defaults group=eshop-learn-rg location=centralus && \ az monitor app-insights component create --app catalog \ --query '{Name:name, Key:instrumentationKey}' && \ az monitor app-insights component create --app coupon \ --query '{Name:name, Key:instrumentationKey}' && \ az monitor app-insights component create --app ordering \ --query '{Name:name, Key:instrumentationKey}' && \ az monitor app-insights component create --app webshoppingagg \ --query '{Name:name, Key:instrumentationKey}' && \ az configure --defaults group= location=
Powyższe polecenia spowodują utworzenie czterech zasobów usługi Application Insights w grupie zasobów utworzonej dla tego modułu. Zostanie wyświetlona odmiana następujących danych wyjściowych:
{ "Key": "037fb7a1-2eb5-45e8-9193-806becc426f9", "Name": "catalog" } { "Key": "726d19a4-2493-4c03-bdc5-817f2a7a3ffa", "Name": "coupon" } { "Key": "0ac4010c-9ac4-47ae-80b3-16c4d1a7889b", "Name": "ordering" } { "Key": "c0cde760-d563-4534-9b4f-0eac68763d40", "Name": "webshoppingagg" }
W powyższych danych wyjściowych są cztery pary klucz-wartość, gdzie:
- Właściwość
Key
reprezentuje klucz instrumentacji usługi Application Insights. - Właściwość
Name
reprezentuje nazwę usługi, do której należy klucz instrumentacji.
- Właściwość
Za pomocą edytora usługi Cloud Shell usuń komentarz dotyczący zmiennej środowiskowej
APPINSIGHTS_INSTRUMENTATIONKEY
w każdym z następujących plików w katalogu deploy/k8s/helm-simple. Zastąp symbol zastępczy<key>
odpowiednim kluczem instrumentacji usługi Application Insights. Zapisz zmiany.- catalog/templates/configmap.yaml
- coupon/templates/configmap.yaml
- ordering/templates/configmap.yaml
- webshoppingagg/templates/configmap.yaml
Zaktualizuj na przykład szablon wykresu Helm usługi katalogu w następujący sposób:
apiVersion: v1 kind: ConfigMap metadata: name: catalog-cm labels: app: eshop service: catalog data: APPINSIGHTS_INSTRUMENTATIONKEY: 037fb7a1-2eb5-45e8-9193-806becc426f9 # YAML omitted for brevity
Ważne
Każda mikrousługa wymaga innego klucza instrumentacji.
Zmienne środowiskowe zdefiniowane w ramach elementu
data
są dostępne dla usługi w środowisku uruchomieniowym.
Włączanie rejestrowania w usłudze Application Insights
Rejestrowanie w usłudze Application Insights zostało włączone w usługach zamawiania i kuponu oraz w agregatorze protokołu HTTP. Wykonaj następujące kroki, aby wdrożyć usługę Application Insights w usłudze katalogu.
Zainstaluj obsługujące pakiety NuGet usługi Application Insights:
pushd src/Services/Catalog/Catalog.API/ && \ dotnet add package Microsoft.ApplicationInsights.AspNetCore --version 2.12.1 && \ dotnet add package Microsoft.ApplicationInsights.Kubernetes --version 1.1.1 && \ dotnet add package Serilog.Sinks.ApplicationInsights --version 3.1.0 && \ popd
W poniższej tabeli opisano zainstalowane pakiety.
Pakiet Opis Microsoft.ApplicationInsights.AspNetCore
Dodaje obsługę usługi Application Insights dla aplikacji platformy ASP.NET Core. Microsoft.ApplicationInsights.Kubernetes
Umożliwia zbieranie danych telemetrycznych dla aplikacji platformy .NET Core działających w kontenerach zarządzanych przez platformę Kubernetes. Serilog.Sinks.ApplicationInsights
Ujście narzędzia Serilog, które zapisuje zdarzenia dziennika w usłudze Application Insights. Zastosuj następujące zmiany w katalogu src/Services/Catalog/Catalog.API:
W pliku Extensions/ServiceCollectionExtensions.cs zastąp komentarz
// Add AddAppInsights extension method
następującą metodą rozszerzenia. Zapisz zmiany.public static IServiceCollection AddAppInsights( this IServiceCollection services, IConfiguration configuration) { services.AddApplicationInsightsTelemetry(configuration); services.AddApplicationInsightsKubernetesEnricher(); return services; }
Powyższy kod ma następujące działanie:
- Metoda rozszerzenia
AddApplicationInsightsTelemetry
jest udostępniana przez pakiet NuGetMicrosoft.ApplicationInsights.AspNetCore
. - Metoda rozszerzenia
AddApplicationInsightsKubernetesEnricher
jest udostępniana przez pakiet NuGetMicrosoft.ApplicationInsights.Kubernetes
.
- Metoda rozszerzenia
W metodzie
ConfigureServices
pliku Startup.cs wywołaj metodę rozszerzeniaAddAppInsights
. Zapisz zmiany.public IServiceProvider ConfigureServices(IServiceCollection services) { services.AddAppInsights(Configuration) .AddGrpc().Services .AddCustomMVC(Configuration) .AddCustomDbContext(Configuration) .AddCustomOptions(Configuration) .AddIntegrationServices(Configuration) .AddEventBus(Configuration) .AddSwagger(Configuration) .AddCustomHealthCheck(Configuration); var container = new ContainerBuilder(); container.Populate(services); return new AutofacServiceProvider(container.Build()); }
Powyższy kod rejestruje usługi telemetrii w kontenerze wstrzykiwania zależności.
W pliku Program.cs dodaj wyróżniony kod do metody
CreateSerilogLogger
:private static Serilog.ILogger CreateSerilogLogger(IConfiguration configuration) { var seqServerUrl = configuration["Serilog:SeqServerUrl"]; var logstashUrl = configuration["Serilog:LogstashgUrl"]; var instrumentationKey = configuration["APPINSIGHTS_INSTRUMENTATIONKEY"]; return new LoggerConfiguration() .MinimumLevel.Verbose() .Enrich.WithProperty("ApplicationContext", AppName) .Enrich.FromLogContext() .WriteTo.Console() .WriteTo.ApplicationInsights(instrumentationKey, TelemetryConverter.Traces) .WriteTo.Seq(string.IsNullOrWhiteSpace(seqServerUrl) ? "http://seq" : seqServerUrl) .WriteTo.Http(string.IsNullOrWhiteSpace(logstashUrl) ? "http://logstash:8080" : logstashUrl) .ReadFrom.Configuration(configuration) .CreateLogger(); }
Powyższe zmiany powodują dodanie ujścia usługi Application Insights dla struktury Serilog w celu uwzględnienia śladów dzienników. Zwróć uwagę na następujące szczegóły:
- Pakiet NuGet
Serilog.Sinks.ApplicationInsights
zapewnia metodę rozszerzeniaApplicationInsights
. - Dostęp do zmiennej środowiskowej
APPINSIGHTS_INSTRUMENTATIONKEY
zdefiniowanej w szablonie wykresu Helm usługi katalogu jest uzyskiwany za pomocą interfejsu API konfiguracji platformy .NET Core.
Uwaga
Rejestrowanie uruchamiania przy użyciu usługi Application Insights nie jest obsługiwane, dlatego należy je wykonać przy użyciu innego rejestratora. W tym przykładzie używane jest narzędzie Serilog z ujściem usługi Application Insights, które przekazuje klucz instrumentacji. Chociaż jest to najprostszy sposób na włączenie rejestrowania w usłudze Application Insights podczas uruchamiania, może prowadzić do utraty korelacji pomiędzy metrykami a śladami rejestrowania.
- Pakiet NuGet
Uruchom następujące polecenie, aby utworzyć usługę katalogu i jej zależności:
pushd src/Services/Catalog/Catalog.API && \ dotnet build && \ popd
Kompilacja zakończy się pomyślnie bez ostrzeżeń. Jeśli kompilacja zakończy się niepowodzeniem, sprawdź dane wyjściowe, aby uzyskać informacje dotyczące rozwiązywania problemów.
Kompilowanie i wdrażanie zmodyfikowanych obrazów kontenerów
W poprzedniej sekcji zmodyfikowano usługę katalogu w celu włączenia telemetrii usługi Application Insights. Kod agregatora protokołu HTTP został zinstrumentowany podobnie. Aby zaktualizować wdrożenia usługi produkcyjnej, obrazy kontenera zostaną skompilowane i umieszczone w usłudze ACR.
Uruchom ten skrypt, aby skompilować obrazy dla usługi katalogu i agregatora protokołu HTTP:
deploy/k8s/build-to-acr.sh --services catalog-api,webshoppingagg
Skrypt uruchamia szybkie zadania usługi ACR dla każdej usługi. Obraz kontenera każdej usługi jest kompilowany niezależnie. Różne wersje następujących wierszy potwierdzają, że obrazy platformy Docker katalogu i agregatora protokołu HTTP zostały wypchnięte do usługi ACR:
2020/09/30 20:51:57 Successfully pushed image: eshoplearn20200929194132362.azurecr.io/catalog.api:linux-latest
2020/09/30 20:54:15 Successfully pushed image: eshoplearn20200929194132362.azurecr.io/webshoppingagg:linux-latest
Wdróż zaktualizowaną usługę katalogu i agregator protokołu HTTP z usługi ACR, uruchamiając następujący skrypt:
deploy/k8s/deploy-application.sh --charts catalog,webshoppingagg
Powyższy skrypt spowodował wdrożenie obrazów kontenerów z usługi ACR do AKS. Skrypt powoduje uruchomienie polecenia
kubectl get pods
. Dane wyjściowe polecenia zawierają wpisy dla zasobników usługi katalogu i agregatora protokołu HTTP. Wartości kolumnSTATUS
iAGE
wskazują, że wdrożenia przebiegły pomyślnie:NAME READY STATUS RESTARTS AGE catalog-5f45f57cd9-4cml4 0/1 Running 0 20s webshoppingagg-77d8cc5c4c-f95tk 0/1 ContainerCreating 0 1s
Ponownie wdróż usługi kuponu i zamawiania skonfigurowane za pomocą nowych zmiennych środowiskowych
APPINSIGHTS_INSTRUMENTATIONKEY
:deploy/k8s/deploy-application.sh --registry eshopdev --charts coupon,ordering
Usługi kuponu i zamawiania wdrożone za pomocą skryptu konfiguracji są już instrumentowane pod kątem telemetrii. Ponieważ nie wprowadzono zmian w kodzie, należy tylko ponownie wdrożyć kontenery przy użyciu nowych ustawień konfiguracji. Parametr
--registry
nakazuje skryptowi użycie rejestru Docker Hub, który hostuje niezmodyfikowane obrazy. Tak jak w poprzednim kroku zostanie wykonane poleceniekubectl get pods
:NAME READY STATUS RESTARTS AGE coupon-5b9597995-thw76 0/1 Running 0 20s ordering-6c456f5d4c-5sr2m 0/1 ContainerCreating 0 1s
Weryfikowanie wdrożenia do usługi AKS
Mimo że aplikacja została wdrożona, przejście do trybu online może potrwać kilka minut. Sprawdź, czy aplikacja została wdrożona i jest w trybie online, wykonując następujące czynności:
Uruchom następujące polecenie, aby wyświetlić różne adresy URL aplikacji:
cat ~/clouddrive/aspnet-learn/deployment-urls.txt
Zostanie wyświetlona odmiana następujących danych wyjściowych:
The eShop-Learn application has been deployed to "http://203.0.113.55" (IP: 203.0.113.55). You can begin exploring these services (when ready): - Centralized logging : http://203.0.113.55/seq/#/events?autorefresh (See transient failures during startup) - General application status: http://203.0.113.55/webstatus/ (See overall service status) - Web SPA application : http://203.0.113.55/
Wybierz link General application status w powłoce poleceń, aby wyświetlić pulpit nawigacyjny kontroli kondycji WebStatus. Na stronie wynikowej zostanie wyświetlony stan każdej mikrousługi we wdrożeniu. Zielona ikona znacznika wyboru oznacza usługę w dobrej kondycji. Strona jest odświeżana automatycznie co 10 sekund.
Uwaga
Powrót do dobrej kondycji zajmie usługom kilka minut.
Gdy wszystkie usługi są w dobrej kondycji, wybierz link Web SPA application w powłoce poleceń, aby przetestować aplikację internetową eShopOnContainers. Zostanie wyświetlona następująca strona:
Pomyślnie zweryfikowano, że aplikacja została wdrożona w usłudze AKS i działa prawidłowo.
Podczas następnej lekcji sprawdzisz dane telemetryczne w usłudze Application Insights.
Potrzebujesz pomocy? Zobacz nasz przewodnik po rozwiązywaniu problemów lub prześlij szczegółową opinię, zgłaszając problem.