Ćwiczenie — Wdrażanie usługi Application Insights

Ukończone

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

  1. 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
    
  2. 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.
  3. 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.

  1. 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.
  2. Zastosuj następujące zmiany w katalogu src/Services/Catalog/Catalog.API:

    1. 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 NuGet Microsoft.ApplicationInsights.AspNetCore.
      • Metoda rozszerzenia AddApplicationInsightsKubernetesEnricher jest udostępniana przez pakiet NuGet Microsoft.ApplicationInsights.Kubernetes.
    2. W metodzie ConfigureServices pliku Startup.cs wywołaj metodę rozszerzenia AddAppInsights. 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.

    3. 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ę rozszerzenia ApplicationInsights.
      • 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.

  3. 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.

  1. 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
    
  2. 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 kolumn STATUS i AGE 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
    
  3. 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 polecenie kubectl 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:

  1. 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/
    
  2. 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.

    health checks status dashboard.

    Uwaga

    Powrót do dobrej kondycji zajmie usługom kilka minut.

  3. 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:

    eShop single page app.

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.