Gyakorlat – Az Application Insights implementálása

Befejeződött

Ebben az egységben módosítja a katalógusszolgáltatást az Application Insights telemetriai adatainak engedélyezéséhez. Az Application Insights szolgáltatást már engedélyezte a másik három szolgáltatáshoz, azonban ezúttal konfigurációs módosításokra van szükség.

Az alábbiakat fogja elvégezni:

  • Application Insights-erőforrás létrehozása az alkalmazáshoz.
  • A naplózás engedélyezése az Application Insightsban.
  • A frissített és újrakonfigurált mikroszolgáltatások üzembe helyezése.

Megjegyzés

Ha a Cloud Shell-munkamenet tétlenség miatt megszakad, csatlakozzon újra, majd a következő parancs futtatásával lépjen vissza ehhez a könyvtárhoz és nyissa meg a Cloud Shell-szerkesztőt:

cd ~/clouddrive/aspnet-learn/src/ && \
  code .

Application Insights-erőforrások létrehozása és konfigurálása

  1. Futtassa az alábbi parancsot a Cloud Shellben, hogy meggyőződjön arról, hogy hozzáadta az Application Insights-bővítményt az Azure CLI-hez:

    az extension add --name application-insights
    
  2. Az alábbi parancsokkal hozza létre az Application Insights-erőforrásokat:

    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=
    

    A fenti parancsok négy Application Insights-erőforrást hoznak létre a modulhoz létrehozott erőforráscsoportban. Megjelenik a következő kimenet egy változata:

    {
      "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"
    }
    

    A fenti kimenet négy kulcs-érték párt tartalmaz, amelyekben:

    • A Key tulajdonság az Application Insights-eszközkulcsot jelképezi.
    • A Name tulajdonság annak a szolgáltatásnak a nevét jelképezi, amelyhez az eszközkulcs tartozik.
  3. A Cloud Shell-szerkesztővel törölje a deploy/k8s/helm-simple könyvtár alábbi fájljainak APPINSIGHTS_INSTRUMENTATIONKEY környezeti változójára vonatkozó megjegyzést. A <key> helyőrzőt cserélje a megfelelő Application Insights-eszközkulcsra. Mentse a módosításokat.

    • catalog/templates/configmap.yaml
    • coupon/templates/configmap.yaml
    • ordering/templates/configmap.yaml
    • webshoppingagg/templates/configmap.yaml

    Frissítse például a következőképpen a katalógusszolgáltatás Helm-diagramsablonját:

    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
    

    Fontos

    Minden mikroszolgáltatáshoz eltérő eszközkulcs szükséges.

    A data elemben definiált környezeti változókat a szolgáltatás futásidőben éri el.

A naplózás engedélyezése az Application Insightsban

Az Application Insights naplózását engedélyezte a megrendelések, a kuponszolgáltatások és a HTTP-összesítő számára. Az alábbi lépésekkel a katalógusszolgáltatásban is megvalósíthatja az Application Insightsot.

  1. Telepítse a szükséges Application Insights NuGet-csomagokat:

    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
    

    Az alábbi táblázat a telepített csomagokat vázolja fel.

    Csomag Description
    Microsoft.ApplicationInsights.AspNetCore Application Insights-támogatással bővít ASP.NET Core-alkalmazásokat.
    Microsoft.ApplicationInsights.Kubernetes Telemetriai adatok gyűjtését engedélyezi Kubernetes által felügyelt tárolókban futó .NET Core-alkalmazásokhoz.
    Serilog.Sinks.ApplicationInsights Egy Serilog-fogadó, amely az Application Insightsba ír eseményeket.
  2. Hajtsa végre a következő módosításokat az src/Services/Catalog/Catalog.API könyvtárban:

    1. Az Extensions/ServiceCollectionExtensions.cs fájlban cserélje le az // Add AddAppInsights extension method megjegyzést az alábbi bővítési metódusra. Mentse a módosításokat.

      public static IServiceCollection AddAppInsights(
          this IServiceCollection services, IConfiguration configuration)
      {
          services.AddApplicationInsightsTelemetry(configuration);
          services.AddApplicationInsightsKubernetesEnricher();
      
          return services;
      }
      

      A fenti kód a következőket végzi el:

      • Az AddApplicationInsightsTelemetry bővítménymetódus a Microsoft.ApplicationInsights.AspNetCore NuGet-csomagban található.
      • Az AddApplicationInsightsKubernetesEnricher bővítménymetódus a Microsoft.ApplicationInsights.Kubernetes NuGet-csomagban található.
    2. A Startup.cs fájl ConfigureServices metódusában hívja meg az AddAppInsights bővítménymetódust. Mentse a módosításokat.

      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());
      }
      

      A fenti kód regisztrálja a telemetriai szolgáltatásokat a függőséget betöltő tárolóban.

    3. A Program.cs fájlban adja hozzá a kiemelt kódot az CreateSerilogLogger metódushoz:

      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();
      }
      

      A fenti módosítások hozzáadják az Application Insights-fogadót, hogy a Serilog tartalmazhassa a naplóbeli nyomkövetéseket. Figyelje meg a következő részleteket:

      • Az ApplicationInsights bővítménymetódus a Serilog.Sinks.ApplicationInsights NuGet-csomagban található.
      • A katalógusszolgáltatás Helm-diagramsablonjában definiált APPINSIGHTS_INSTRUMENTATIONKEY környezeti változó a .NET Core Configuration API-val érhető el.

      Megjegyzés

      Az Application Insights indítási naplózása nem támogatott, ezért egy másik naplózóval kell megvgalósítani. Ez a példa a Serilogot használja az Application Insights-fogadóval, az eszközkulcsot megadva. Bár ez az Application Insightsbeli indítási naplózás engedélyezésének legegyszerűbb módja, a metrikák és a naplóbeli nyomkövetések közötti korreláció romlását eredményezheti.

  3. Az alábbi parancsokkal készítse el a katalógusszolgáltatást és függőségeit:

    pushd src/Services/Catalog/Catalog.API && \
        dotnet build && \
        popd
    

    A buildelés figyelmeztetések nélkül, sikeresen befejeződik. Ha a buildelés sikertelen, a kimenetben találhat hibaelhárítási információt.

Módosított tárolólemezképek készítése és üzembe helyezése

Az előző szakaszban módosította a katalógusszolgáltatást az Application Insights telemetriai adatainak engedélyezéséhez. Már a HTTP-összesítő kódját is tagolta hasonló módon. Az éles szolgáltatásüzemek frissítéséhez a tárolólemezképeket az ACR-en készítjük el és üzemeltetjük.

  1. Az alábbi szkripttel készítse el a katalógusszolgáltatás és a HTTP-összesítő lemezképeit:

    deploy/k8s/build-to-acr.sh --services catalog-api,webshoppingagg
    

    A szkript minden szolgáltatáshoz ACR-gyorsfeladatokat indít el. Minden szolgáltatás tárolólemezképe másképp épül fel. Az alábbi vonalak változataiból látszik, hogy a katalógus és a HTTP-összesítő Docker-lemezképei már az ACR-hez kerültek:

    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. Az alábbi szkript futtatásával helyezze üzembe a frissített katalógusszolgáltatást és a HTTP-összesítőt az ACR-ből:

    deploy/k8s/deploy-application.sh --charts catalog,webshoppingagg
    

    A fenti szkript üzembe helyezi a tárolólemezképeket az ACR-ből az AKS-ben. A szkript futtatja a kubectl get pods parancsot. A parancs kimenete bejegyzéseket tartalmaz a katalógusszolgáltatáshoz és a HTTP-összesítő podjaihoz. A STATUS és az AGE oszlop értékei jelzik, hogy az üzembe helyezés sikeres volt:

    NAME                              READY   STATUS              RESTARTS   AGE
    catalog-5f45f57cd9-4cml4          0/1     Running             0          20s
    webshoppingagg-77d8cc5c4c-f95tk   0/1     ContainerCreating   0          1s
    
  3. Helyezze újra üzembe a kupon- és a megrendelési szolgáltatást, az újonnan konfigurált APPINSIGHTS_INSTRUMENTATIONKEY környezeti változókkal együtt:

    deploy/k8s/deploy-application.sh --registry eshopdev --charts coupon,ordering
    

    A telepítési szkript által üzembe helyezett kupon- és megrendelési szolgáltatás már tagolva van a telemetriához. Mivel kódmódosítás nem történt, a tárolókat csak újra üzembe kell helyezni az új konfigurációs beállításokkal. A --registry paraméter arra utasítja a szkriptet, hogy a nem módosított lemezképeket tároló Docker Hub regisztrációs adatbázist használja. Az előző lépéshez hasonlóan lefut a kubectl get pods parancs:

    NAME                              READY   STATUS              RESTARTS   AGE
    coupon-5b9597995-thw76            0/1     Running             0          20s
    ordering-6c456f5d4c-5sr2m         0/1     ContainerCreating   0          1s
    

Az AKS-ben történő üzembe helyezés ellenőrzése

Bár az alkalmazás már üzembe lett helyezve, eltarthat néhány percig, hogy online állapotba kerüljön. Azt, hogy az alkalmazás üzembe van helyezve és online, az alábbi lépésekben ellenőrizheti:

  1. Az alkalmazások URL-címeinek megjelenítéséhez futtassa az alábbi parancsot:

    cat ~/clouddrive/aspnet-learn/deployment-urls.txt
    

    Megjelenik a következő kimenet egy változata:

    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. A parancsfelületen megjelent General application status hivatkozáson a WebStatus állapotellenőrzési irányítópultot tekintheti meg. A megnyíló oldal az üzemelő példány egyes mikroszolgáltatásainak állapotát jeleníti meg. A zöld pipa ikon megfelelő állapotú szolgáltatást jelent. Az oldal 10 másodpercenként automatikusan frissül.

    állapot-ellenőrzések irányítópultja.

    Megjegyzés

    Eltarthat pár percig, míg a szolgáltatás visszaáll megfelelő üzemállapotra.

  3. Ha már minden szolgáltatás állapota kifogástalan, a parancsfelületen látható Web SPA application hivatkozáson tesztelheti az eShopOnContainers webalkalmazást. Az alábbi oldal nyílik meg:

    eShop egyoldalas alkalmazás.

Sikeresen ellenőrizte az alkalmazás üzembe helyezését az AKS-ben, valamint annak megfelelő működését.

A következő egységben az Application Insights telemetriájával foglalkozunk.