Gyakorlat – OpenTelemetry-adatok használata natív felhőbeli alkalmazásban
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.
Az EXPLORER panelen válassza ki a docker-compose.yml fájlt.
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.
Az EXPLORER panelen kattintson a jobb gombbal a dotnet-observability mappára, majd válassza az Új mappa lehetőséget.
A név mezőbe írja be a prometheust.
Az EXPLORER panelen kattintson a jobb gombbal a prometheus mappára, majd válassza az Új fájl lehetőséget.
A név mezőbe írja be a prometheus.yml.
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.
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.
Az EXPLORER panelen kattintson a jobb gombbal a dotnet-observability mappára, majd válassza az Új mappa lehetőséget.
A név mezőbe írja be a grafana.
Kattintson a jobb gombbal a grafana mappára, majd válassza az Új mappa lehetőséget.
A név mezőbe írja be az adatforrást.
Kattintson a jobb gombbal a grafana mappára, majd válassza az Új mappa lehetőséget.
A név mezőbe írja be a dashboard-ot.
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.
A név mezőbe írja be a datasource.yml.
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: trueAz előző YAML úgy konfigurálja a Grafana-t, hogy a Prometheust használja adatforrásként.
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.
Az alsó TERMINÁL panelen lépjen a Diagnosztikai mappára.
Futtassa ezt a parancsot:
cd .\eShopLite\Diagnostics\Távolítsa el a
OpenTelemetry.Exporter.Consolecsomagot:dotnet remove package OpenTelemetry.Exporter.ConsoleAdja hozzá a
OpenTelemetry.Exporter.Prometheus.AspNetCorecsomagot:dotnet add package OpenTelemetry.Exporter.Prometheus.AspNetCore --prereleaseAz EXPLORER panelen bontsa ki a Diagnosztikai mappát, majd válassza a DiagnosticServiceCollectionExtensions.cs.
Cserélje le a konzolexportáló
.AddConsoleExporter();a következő kódra:.AddPrometheusExporter();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.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.
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.
Válassza a Diagnosztika lehetőséget.
Az EXPLORER panelen bontsa ki az Áruház mappát, majd válassza Program.cs.
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);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.
A fájl mentéséhez válassza a CtrlS+.
Az EXPLORER panelen bontsa ki a Termék mappát, majd válassza a Program.cs.
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.
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.
A TERMINÁL panel alján lépjen a dotnet-observability/eShopLite mappára.
cd ..Frissítse az alkalmazástárolókat.
dotnet publish /p:PublishProfile=DefaultContainerNyissa meg a dotnet-observability mappát, és indítsa el az alkalmazást a Dockerrel:
cd .. docker compose upA 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.A felső menüben válassza az Állapot , majd a Célok lehetőséget.
A Termékek és áruházszolgáltatásoknak UP néven kell megjelennie.
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.Adja meg a felhasználónév rendszergazdájának nevét.
Adja meg a jelszót grafana.
Válassza az Első irányítópult létrehozása lehetőséget.
Válassza az Importálás irányítópultot.
Egy új lapon nyissa meg a GitHubot , és nyissa meg a ASP.NET Core-irányítópult json-fájlját .
Másolja ki a Nyers fájlt.
Illessze be a JSON-t az irányítópulton található "JSON modell importálása" szövegmezőbe.
Válassza betöltése lehetőséget.
A Prometheus adatforrás legördülő listájában válassza a Prometheus lehetőséget.
Válassza az Importálás lehetőséget.
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.
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.
Az EXPLORER panelen válassza ki a docker-compose.yml fájlt a dotnet-observability mappában.
Adja hozzá a
prometheus-t észipkin-et adepends_on-ben afrontendszámára.depends_on: - backend - prometheus - zipkinA
prometheus-ban adepends_onhozzáadása abackendszámára.depends_on: - prometheusKörnyezeti változók hozzáadása a Zipkinhez
frontendésbackend:environment: - ZIPKIN_URL=http://zipkin:9411A 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: - prometheusAdja hozzá ezt a YAML-et a fájl aljára:
zipkin: image: openzipkin/zipkin ports: - 9411:9411Az 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.
A fájl mentéséhez válassza a CtrlS+.
A TERMINÁL panelen nyissa meg a Diagnostics mappát.
cd ./eShopLite/Diagnostics/Adja hozzá a Zipkin-exportálási csomagokat.
dotnet add package OpenTelemetry.Exporter.Zipkin --prereleaseAz EXPLORER panelen bontsa ki a Diagnosztikai mappát, majd válassza a DiagnosticServiceCollectionExtensions.cs.
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"); }); });A fájl mentéséhez válassza a CtrlS+.
A TERMINÁL panel alján lépjen a dotnet-observability/eShopLite mappára.
cd ..Frissítse az alkalmazástárolókat.
dotnet publish /p:PublishProfile=DefaultContainerNyissa meg a dotnet-observability mappát, és indítsa el az alkalmazást a Dockerrel:
cd .. docker compose upA 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.A menüben válassza a Függőségek lehetőséget.
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
A TERMINÁL panelen jelentkezzen be az Azure-ba.
az login --use-device-codeA kiválasztott Azure-előfizetés megtekintése.
az account show -o tableHa nem a megfelelő előfizetés van kiválasztva, válassza ki a megfelelőt az az account set paranccsal.
Adja hozzá az Application Insights bővítményét.
az extension add -n application-insightsHozzon létre egy Application Insights-erőforrást.
az monitor app-insights component create --app eShopLiteInsights --location eastus --kind web -g eShopLiteEzt 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/Az EXPLORER panelen válassza ki a docker-compose.yml fájlt.
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.
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/A fájl mentéséhez válassza a CtrlS+.
A TERMINÁL panelen nyissa meg a Diagnostics mappát.
cd .\eShopLite\Diagnostics\Adja hozzá az Application Insights exportőrcsomagot.
dotnet add package Azure.Monitor.OpenTelemetry.AspNetCore --prereleaseA EXPLORE panelen válassza a Diagnosztikai mappa, majd a DiagnosticServiceCollectionExtensions.cs lehetőséget.
A fájl tetején adja hozzá ezt a
usingutasítást:using Azure.Monitor.OpenTelemetry.AspNetCore;Ezután adja hozzá a következő kódot:
var otelBuilder = services.AddOpenTelemetry();if (!string.IsNullOrEmpty(configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"])) { otelBuilder.UseAzureMonitor(); }A fájl mentéséhez válassza a CtrlS+.
A TERMINÁL panel alján lépjen a dotnet-observability/eShopLite mappára.
cd ..Frissítse az alkalmazástárolókat.
dotnet publish /p:PublishProfile=DefaultContainerNyissa meg a dotnet-observability mappát, és indítsa el az alkalmazást a Dockerrel:
cd .. docker compose upJelentkezzen be az Azure Portalra ugyanazokkal a hitelesítő adatokkal, amelyeket az Azure CLI-be való bejelentkezéshez használt.
Az Azure Portalon válassza ki az Erőforráscsoportokat.
Válassza ki az eShopLite erőforráscsoportot.
Válassza ki az eShopLiteInsights Application Insights-erőforrást.
Válassza ki az alkalmazás irányítópultját.
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.
A TERMINÁL panelen nyomja le a CtrlC+ az alkalmazás leállításához.