Gyakorlat – OpenTelemetry-adatok használata natív felhőbeli alkalmazásban

Befejeződött

Ebben a gyakorlatban jobban áttekintheti az OpenTelemetry által az alkalmazásban létrehozott összes adatot. Befejezi a diagnosztikai képességek hozzáadását az Áruház szolgáltatáshoz. Ezzel hozzáadja a Prometheust és a Grafana-t a eShopLite szolgáltatásokhoz, és áttekintheti a rögzített metrikák némelyikét. A következő lépés a Zipkin hozzáadása és az elosztott nyomkövetések megtekintése. Végül hozzáadja az Application Insightst az alkalmazáshoz, és az adatok megtekintéséhez használja.

Prometheus és Grafana hozzáadása

A Prometheus és a Grafana Docker-képeket biztosít, amelyek megkönnyítik a projektekhez való felvételüket. Ezeket belefoglalja a docker-compose.yml fájlba, a megoldás gyökerében.

  1. Az EXPLORER panelen válassza ki a docker-compose.yml fájlt.

  2. Adja hozzá ezt a YAML-et a fájl aljára:

      prometheus:
        image: prom/prometheus
        container_name: prometheus
        command:
          - '--config.file=/etc/prometheus/prometheus.yml'
        ports:
          - 9090:9090
        restart: unless-stopped
        volumes:
          - ./prometheus:/etc/prometheus
    
      grafana:
        image: grafana/grafana
        container_name: grafana
        ports:
          - 3000:3000
        restart: unless-stopped
        environment:
          - GF_SECURITY_ADMIN_USER=admin
          - GF_SECURITY_ADMIN_PASSWORD=grafana
        volumes:
          - ./grafana/datasource:/etc/grafana/provisioning/datasources
    

Az előző Docker yaml két új szolgáltatást ad hozzá, a Prometheust és a Grafana-t. A Prometheus szakasz konfigurál egy tárolót a 9090-es porton való válaszadásra. Leképezi a prometheus mappát, amely egy prometheus.yml fájlt vár. A Grafana szakasz konfigurál egy tárolót a 3000-es porton való válaszadáshoz. Három mappát képez le egy grafana mappában.

A Prometheus konfigurálása

A Prometheust konfigurálni kell, hogy tudja, hol gyűjtse össze a metrikákat. Egy prometheus.yml fájlt kell hozzáadnia a prometheus mappához.

  1. Az EXPLORER panelen kattintson a jobb gombbal a dotnet-observability mappára, majd válassza az Új mappa lehetőséget.

  2. A név mezőbe írja be a prometheust.

  3. Az EXPLORER panelen kattintson a jobb gombbal a prometheus mappára, majd válassza az Új fájl lehetőséget.

  4. A név mezőbe írja be a prometheus.yml.

  5. A fájlszerkesztőben adja meg ezt a YAML-et:

    global:
      scrape_interval: 1s
    
    scrape_configs:
      - job_name: 'products'
        static_configs:
          - targets: ['backend:8080']
      - job_name: 'store'
        static_configs:
          - targets: ['frontend:8080']
    

    Az előző YAML úgy konfigurálja a Prometheust, hogy lekaparja a metrikákat a háttér- és előtérbeli szolgáltatásokból. Mivel az alkalmazás a Dockerben fut, a gazdagépnevek a szolgáltatások neveihez igazodnak.

  6. A fájl mentéséhez válassza a CtrlS+.

Grafana konfigurálása

A Grafanát úgy kell konfigurálni, hogy tudja, hol gyűjtse össze a metrikákat.

  1. Az EXPLORER panelen kattintson a jobb gombbal a dotnet-observability mappára, majd válassza az Új mappa lehetőséget.

  2. A név mezőbe írja be a grafana.

  3. Kattintson a jobb gombbal a grafana mappára, majd válassza az Új mappa lehetőséget.

  4. A név mezőbe írja be az adatforrást.

  5. Kattintson a jobb gombbal a grafana mappára, majd válassza az Új mappa lehetőséget.

  6. A név mezőbe írja be a dashboard-ot.

  7. Bontsa ki a grafana mappát, kattintson a jobb gombbal az adatforrás mappára, majd válassza az Új fájl lehetőséget.

  8. A név mezőbe írja be a datasource.yml.

  9. A szerkesztő lapon adja meg ezt a YAML-et:

    apiVersion: 1
    
    datasources:
    - name: Prometheus
      type: prometheus
      url: http://prometheus:9090 
      isDefault: true
      access: proxy
      editable: true
    

    Az előző YAML úgy konfigurálja a Grafana-t, hogy a Prometheust használja adatforrásként.

  10. A fájl mentéséhez válassza a CtrlS+.

A ASP.NET Core-alkalmazás frissítése a Prometheus metrikáinak közzététele érdekében

A diagnosztikai projekt most már csak úgy van konfigurálva, hogy metrikákat tegyen elérhetővé a konzolon. Frissítse a projektet, hogy inkább a Prometheusnak tegye elérhetővé a metrikákat.

  1. Az alsó TERMINÁL panelen lépjen a Diagnosztikai mappára.

  2. Futtassa ezt a parancsot:

    cd .\eShopLite\Diagnostics\ 
    
  3. Távolítsa el a OpenTelemetry.Exporter.Console csomagot:

    dotnet remove package OpenTelemetry.Exporter.Console
    
  4. Adja hozzá a OpenTelemetry.Exporter.Prometheus.AspNetCore csomagot:

    dotnet add package OpenTelemetry.Exporter.Prometheus.AspNetCore --prerelease
    
  5. Az EXPLORER panelen bontsa ki a Diagnosztikai mappát, majd válassza a DiagnosticServiceCollectionExtensions.cs.

  6. Cserélje le a konzolexportáló .AddConsoleExporter(); a következő kódra:

    .AddPrometheusExporter();
    
  7. A fájl alján, az utolsó }előtt adja hozzá a következő kódot:

    public static void MapObservability(this IEndpointRouteBuilder routes)
    {
      routes.MapPrometheusScrapingEndpoint();
    }
    

    Ez a kód hozzáad egy Prometheus adatlekérési végpontot minden olyan szolgáltatáshoz, amely ezt beilleszti az alkalmazásába. Ez lehetővé teszi a Prometheus számára, hogy begyűjtse a metrikákat http://service/metrics-ból.

  8. A fájl mentéséhez válassza a CtrlS+.

Metrikák megjelenítése az Áruház szolgáltatásban

Az alkalmazás jelenleg csak a Termékek szolgáltatás metrikáinak közzététele céljából van konfigurálva. Az alkalmazást úgy frissítheti, hogy a Store szolgáltatás metrikáit is elérhetővé tegye.

  1. Az EXPLORER panel MEGOLDÁSKEZELŐ területén kattintson a jobb gombbal az Áruház projektre, majd válassza a Projekthivatkozás hozzáadása lehetőséget.

  2. Válassza a Diagnosztika lehetőséget.

  3. Az EXPLORER panelen bontsa ki az Áruház mappát, majd válassza Program.cs.

  4. A kód megjegyzése // Add observability code herealatt adjon hozzá egy hívást a Diagnostics metódushoz:

    builder.Services.AddObservability("Store", builder.Configuration);
    
  5. A app.Run() metódus előtt adja hozzá a következő kódot:

    app.MapObservability();
    

    Ez a módszer hozzáadja a Prometheus kaparási végpontot a Store szolgáltatáshoz.

  6. A fájl mentéséhez válassza a CtrlS+.

  7. Az EXPLORER panelen bontsa ki a Termék mappát, majd válassza a Program.cs.

  8. A app.Run() metódus előtt adja hozzá a következő kódot:

    app.MapObservability();
    

    Ez a módszer hozzáadja a Prometheus kaparási végpontot a Products szolgáltatáshoz.

  9. A fájl mentéséhez válassza a CtrlS+.

Az új megfigyelhetőségi funkciók tesztelése

Most tesztelheti az alkalmazáshoz hozzáadott új megfigyelhetőségi funkciókat.

  1. A TERMINÁL panel alján lépjen a dotnet-observability/eShopLite mappára.

    cd ..
    
  2. Frissítse az alkalmazástárolókat.

    dotnet publish /p:PublishProfile=DefaultContainer 
    
  3. Nyissa meg a dotnet-observability mappát, és indítsa el az alkalmazást a Dockerrel:

    cd ..
    docker compose up
    
  4. A PORTOK lapon válassza a Megnyitás a Prometheus böngészőben(9090) lehetőséget. Ha helyileg fut a Visual Studio Code-ban, nyisson meg egy böngészőt, és egy új lapon nyissa meg a Prometheus alkalmazást http://localhost:9090.

  5. A felső menüben válassza az Állapot , majd a Célok lehetőséget.

    Képernyőkép az eShopLite alkalmazás állapotáról a konfigurált Prometheus alkalmazásról.

    A Termékek és áruházszolgáltatásoknak UP néven kell megjelennie.

  6. A PORTOK lapon válassza a Megnyitás böngészőbenGrafana (3000) lehetőséget. Ha helyileg fut a Visual Studio Code-ban, nyisson meg egy böngészőt, és egy új lapon nyissa meg a Grafana alkalmazást http://localhost:3000.

  7. Adja meg a felhasználónév rendszergazdájának nevét.

  8. Adja meg a jelszót grafana.

  9. Válassza az Első irányítópult létrehozása lehetőséget.

  10. Válassza az Importálás irányítópultot.

  11. Egy új lapon nyissa meg a GitHubot , és nyissa meg a ASP.NET Core-irányítópult json-fájlját .

  12. Másolja ki a Nyers fájlt.

  13. Illessze be a JSON-t az irányítópulton található "JSON modell importálása" szövegmezőbe.

  14. Válassza betöltése lehetőséget.

  15. A Prometheus adatforrás legördülő listájában válassza a Prometheus lehetőséget.

  16. Válassza az Importálás lehetőséget.

    Képernyőkép a Grafana ASP.NET irányítópultjáról.

    Látnia kell egy irányítópultot, amely a Termékek és áruház szolgáltatások mérőszámait mutatja. Válassza ki a munkát a két szolgáltatás közötti váltáshoz.

  17. A TERMINÁL panelen válassza a CtrlC+ az alkalmazás leállításához.

Zipkin hozzáadása

Mostantól a Zipkin hozzáadásával bővítheti az alkalmazás nyomkövetési képességeit. Ahogy korábban is tette, hozzáad egy Zipkin-tárolót az alkalmazáshoz, és úgy konfigurálja, hogy csatlakozzon az OpenTelemetry-gyűjtőhöz. Ezután hozzáadja az OpenTelemetry Zipkin-exportőrt az alkalmazáshoz.

  1. Az EXPLORER panelen válassza ki a docker-compose.yml fájlt a dotnet-observability mappában.

  2. Adja hozzá a prometheus-t és zipkin-et a depends_on-ben a frontendszámára.

    depends_on: 
      - backend
      - prometheus
      - zipkin 
    
  3. A prometheus-ban a depends_on hozzáadása a backendszámára.

     depends_on: 
       - prometheus
    
  4. Környezeti változók hozzáadása a Zipkinhez frontend és backend:

    environment: 
      - ZIPKIN_URL=http://zipkin:9411    
    

    A két szolgáltatásnak így kell kinéznie:

    frontend:
      image: storeimage
      build:
        context: .
        dockerfile: ./eShopLite/Store/Dockerfile
      environment: 
        - ProductEndpoint=http://backend:8080
        - ZIPKIN_URL=http://zipkin:9411
      ports:
        - "32000:8080"
      depends_on: 
        - backend
        - prometheus
        - zipkin
    
    backend:
      image: productservice
      build: 
        context: .
        dockerfile: ./eShopLite/Products/Dockerfile
      environment: 
        - ZIPKIN_URL=http://zipkin:9411
    
      ports: 
        - "32001:8080"
      depends_on: 
        - prometheus    
    
  5. Adja hozzá ezt a YAML-et a fájl aljára:

      zipkin:
        image: openzipkin/zipkin
        ports:
          - 9411:9411
    

    Az előző YAML hozzáad egy Zipkin-tárolót az alkalmazáshoz. A Zipkin-tárolót úgy konfigurálja, hogy a 9411-porton válaszoljon.

  6. A fájl mentéséhez válassza a CtrlS+.

  7. A TERMINÁL panelen nyissa meg a Diagnostics mappát.

    cd ./eShopLite/Diagnostics/
    
  8. Adja hozzá a Zipkin-exportálási csomagokat.

    dotnet add package OpenTelemetry.Exporter.Zipkin --prerelease
    
  9. Az EXPLORER panelen bontsa ki a Diagnosztikai mappát, majd válassza a DiagnosticServiceCollectionExtensions.cs.

  10. A nyomkövetési szolgáltatók listájának aljára adja hozzá a Zipkint.

    // add the tracing providers
    .WithTracing(tracing =>
    {
      tracing.SetResourceBuilder(resource)
                  .AddAspNetCoreInstrumentation()
                  .AddHttpClientInstrumentation()
                  .AddSqlClientInstrumentation()
                  .AddZipkinExporter(zipkin =>
                  {
                    var zipkinUrl = configuration["ZIPKIN_URL"] ?? "http://zipkin:9411";
                    zipkin.Endpoint = new Uri($"{zipkinUrl}/api/v2/spans");
                  });
    });
    
  11. A fájl mentéséhez válassza a CtrlS+.

  12. A TERMINÁL panel alján lépjen a dotnet-observability/eShopLite mappára.

    cd ..
    
  13. Frissítse az alkalmazástárolókat.

    dotnet publish /p:PublishProfile=DefaultContainer 
    
  14. Nyissa meg a dotnet-observability mappát, és indítsa el az alkalmazást a Dockerrel:

    cd ..
    docker compose up
    
  15. A PORTOK lapon válassza a Megnyitás a Prometheus böngészőben(9090) lehetőséget. Ha helyileg fut a Visual Studio Code-ban, nyisson meg egy új böngészőlapot, és nyissa meg a Zipkin alkalmazást http://localhost:9411.

  16. A menüben válassza a Függőségek lehetőséget.

    A Zipkint ábrázoló képernyőkép, amelyen az eShopLite app Store függőségei láthatók, amelyek kéréseket küldenek a Termékek szolgáltatásnak.

  17. A TERMINÁL panelen válassza a CtrlC+ az alkalmazás leállításához.

Application Insights hozzáadása

Az utolsó lépés az Application Insights hozzáadása az alkalmazáshoz.

Az Application Insights-erőforrás létrehozása az Azure-ban

  1. A TERMINÁL panelen jelentkezzen be az Azure-ba.

    az login --use-device-code
    
  2. A kiválasztott Azure-előfizetés megtekintése.

    az account show -o table
    

    Ha nem a megfelelő előfizetés van kiválasztva, válassza ki a megfelelőt az az account set paranccsal.

  3. Adja hozzá az Application Insights bővítményét.

    az extension add -n application-insights
    
  4. Hozzon létre egy Application Insights-erőforrást.

    az monitor app-insights component create --app eShopLiteInsights --location eastus --kind web -g eShopLite
    

    Ezt a kimenetet kell látnia:

    {
      "appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
      "applicationId": "eShopLiteInsights",
      "applicationType": "web",
      "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://eastus-2.in.applicationinsights.azure.com/;LiveEndpoint=https://eastus.livediagnostics.monitor.azure.com/",
      "creationDate": "2023-11-10T16:50:00.950726+00:00",
      "disableIpMasking": null,
      "etag": "\"3a02952a-0000-0100-0000-654e5f380000\"",
      "flowType": "Bluefield",
      "hockeyAppId": null,
      "hockeyAppToken": null,
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/eShopLite/providers/microsoft.insights/components/eShopLiteInsights",
      "immediatePurgeDataOn30Days": null,
      "ingestionMode": "ApplicationInsights",
      "instrumentationKey": "00000000-0000-0000-0000-000000000000",
      "kind": "web",
      "location": "eastus",
      "name": "eShopLiteInsights",
      "privateLinkScopedResources": null,
      "provisioningState": "Succeeded",
      "publicNetworkAccessForIngestion": "Enabled",
      "publicNetworkAccessForQuery": "Enabled",
      "requestSource": "rest",
      "resourceGroup": "eShopLite",
      "retentionInDays": 90,
      "samplingPercentage": null,
      "tags": {},
      "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
      "type": "microsoft.insights/components"
    }
    

    Az előző visszaadott JSON-fájlból másolja ki a connectionString, a "kivételével." Például:

    InstrumentationKey=b851fa75-85a2-42f7-bb6f-413725d9d8ba;IngestionEndpoint=https://eastus-2.in.applicationinsights.azure.com/;LiveEndpoint=https://eastus.livediagnostics.monitor.azure.com/

  5. Az EXPLORER panelen válassza ki a docker-compose.yml fájlt.

  6. Hozzáadhat egy környezeti változót, amelyet a diagnosztikai projekt az Application Insightshoz való csatlakozáshoz használ. Adja hozzá ezt a YAML-et a Store szolgáltatáshoz:

    environment:
      - APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=b851fa75-85a2-42f7-bb6f-413725d9d8ba;IngestionEndpoint=https://eastus-2.in.applicationinsights.azure.com/;LiveEndpoint=https://eastus.livediagnostics.monitor.azure.com/
    

    Cserélje le az előző kapcsolati sztringet az Azure CLI-ből kimásolt kapcsolati sztringre.

  7. Ismételje meg ezeket a lépéseket a Termékek szolgáltatás esetében. Az utolsó YAML-nek így kell kinéznie:

      frontend:
        image: storeimage
        build:
          context: .
          dockerfile: ./eShopLite/Store/Dockerfile
        environment: 
          - ProductEndpoint=http://backend:8080
          - ZIPKIN_URL=http://zipkin:9411
          - APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=b851fa75-85a2-42f7-bb6f-413725d9d8ba;IngestionEndpoint=https://eastus-2.in.applicationinsights.azure.com/;LiveEndpoint=https://eastus.livediagnostics.monitor.azure.com/
        ports:
          - "32000:8080"
        depends_on: 
          - backend
          - prometheus
          - zipkin
    
      backend:
        image: productservice
        build: 
          context: .
          dockerfile: ./eShopLite/Products/Dockerfile
        environment: 
          - ZIPKIN_URL=http://zipkin:9411
          - APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=b851fa75-85a2-42f7-bb6f-413725d9d8ba;IngestionEndpoint=https://eastus-2.in.applicationinsights.azure.com/;LiveEndpoint=https://eastus.livediagnostics.monitor.azure.com/
    
    
  8. A fájl mentéséhez válassza a CtrlS+.

  9. A TERMINÁL panelen nyissa meg a Diagnostics mappát.

    cd .\eShopLite\Diagnostics\ 
    
  10. Adja hozzá az Application Insights exportőrcsomagot.

    dotnet add package Azure.Monitor.OpenTelemetry.AspNetCore --prerelease
    
  11. A EXPLORE panelen válassza a Diagnosztikai mappa, majd a DiagnosticServiceCollectionExtensions.cs lehetőséget.

  12. A fájl tetején adja hozzá ezt a using utasítást:

    using Azure.Monitor.OpenTelemetry.AspNetCore;
    
  13. Ezután adja hozzá a következő kódot: var otelBuilder = services.AddOpenTelemetry();

    if (!string.IsNullOrEmpty(configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"]))
    {
      otelBuilder.UseAzureMonitor();
    }
    
  14. A fájl mentéséhez válassza a CtrlS+.

  15. A TERMINÁL panel alján lépjen a dotnet-observability/eShopLite mappára.

    cd ..
    
  16. Frissítse az alkalmazástárolókat.

    dotnet publish /p:PublishProfile=DefaultContainer 
    
  17. Nyissa meg a dotnet-observability mappát, és indítsa el az alkalmazást a Dockerrel:

    cd ..
    docker compose up
    
  18. Jelentkezzen be az Azure Portalra ugyanazokkal a hitelesítő adatokkal, amelyeket az Azure CLI-be való bejelentkezéshez használt.

  19. Az Azure Portalon válassza ki az Erőforráscsoportokat.

  20. Válassza ki az eShopLite erőforráscsoportot.

  21. Válassza ki az eShopLiteInsights Application Insights-erőforrást.

  22. Válassza ki az alkalmazás irányítópultját.

    Képernyőkép az Application Insightsról az eShopLite alkalmazás állapotáról.

  23. A metrikák változásainak megtekintéséhez lépjen a eShopLite alkalmazásba, és módosítsa a részvényeket. Ezután frissítse az Application Insights irányítópultját.

  24. A TERMINÁL panelen nyomja le a CtrlC+ az alkalmazás leállításához.