練習 - 將 OpenTelemetry 新增至雲端原生應用程式
在此練習中,您會將新的診斷專案新增至您的 eShopLite 解決方案。 您將瞭解如何包含 OpenTelemetry NuGet 套件,然後將可觀察性新增至 產品 服務。
開啟開發環境並建立 Azure 資源
您可以選擇使用提供練習的 GitHub Codespace,或在本機的 Visual Studio Code 中完成練習。
若要使用 codespace,請使用這個 Codespace 建立範本建立預先設定的 GitHub Codespace。
當 GitHub 建立及設定 codespace 時,此步驟需要幾分鐘的時間。 程式完成之後,您會看到練習的程式代碼檔案。 此課程模組其餘部分所使用的程式代碼位於 /dotnet-observability 目錄中。
若要使用 Visual Studio Code,請將 https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative 存放庫複製到本機電腦。 然後:
- 安裝任何 系統需求 ,以在 Visual Studio Code 中執行開發容器。
- 請確保 Docker 正在運行。
- 在新的 Visual Studio Code 視窗中,開啟複製存放庫的資料夾。
- 按下 Ctrl+Shift+P,以開啟命令選擇區。
- 搜尋:>開發容器: 重建並在容器中重新開啟。
- 從下拉式清單中選取 eShopLite - dotnet-observability。 Visual Studio Code 會在本機上建立您的開發容器。
將診斷專案新增至方案
將可觀察性新增至 eShopLite 應用程式的第一個步驟是將新的診斷專案引入解決方案。 此專案包含您將用來將可觀察性新增至應用程式的所有 OpenTelemetry 套件和設定。
- 在 Codespace 命令選擇區中,輸入 [.NET:開啟解決方案]>。
- 選取 dotnet-observability/eShopLite/eShopLite.sln。
- 在 方案總管的 EXPLORER 窗格底部,以滑鼠右鍵按一下 eShopLite 方案,然後選取 新增專案。
- 在 [ 選取範本以建立新的 .NET 專案 ] 對話框中,選取 [類別庫] (Common, Library)。
- 在 [ 名稱] 欄位中,輸入 [診斷]。
- 在 「將在專案中建立」的下拉式選單中,確定檔案路徑目錄為 /workspaces/mslearn-dotnet-cloudnative/dotnet-observability/eShopLite/。
新增 OpenTelemetry 套件
現在,將OpenTelemetry套件新增至新的診斷專案。
使用 Codespace 底部的終端機窗格,移至診斷項目資料夾:
cd dotnet-observability/eShopLite/Diagnostics執行下列
dotnet add命令:dotnet add package OpenTelemetry.Exporter.Console dotnet add package OpenTelemetry.Extensions.Hosting dotnet add package OpenTelemetry.Instrumentation.AspNetCore dotnet add package OpenTelemetry.Instrumentation.EventCounters --prerelease dotnet add package OpenTelemetry.Instrumentation.Runtime dotnet add package OpenTelemetry.Instrumentation.SqlClient --prerelease dotnet add package OpenTelemetry.Instrumentation.Http在 [檔案總管] 窗格中,展開 [診斷] 資料夾並選取 Diagnostics.csproj。
將
Project Sdk頂端變更為:<Project Sdk="Microsoft.NET.Sdk.Web">上述程式代碼可讓您在程式代碼中使用
IConfiguration類別。在 中
<PropertyGroup>,新增輸出類型:<OutputType>Library</OutputType>上述程式碼確保專案被建置為程式庫。 否則,編譯器預期會是
main方法的Program.cs檔案。
新增程序代碼以使用 OpenTelemetry
新增 OpenTelemetry 套件後,您現在可以加入程式代碼來使用它們。
在EXPLORER 窗格中,以滑鼠右鍵按一下 Class1.cs 檔案,然後選取重新命名。
將檔案重新命名為 DiagnosticServiceCollectionExtensions.cs。
將檔案中的程式碼替換為以下程式碼:
using OpenTelemetry.Metrics; using OpenTelemetry.Resources; using OpenTelemetry.Trace; namespace Microsoft.Extensions.DependencyInjection; public static class DiagnosticServiceCollectionExtensions { public static IServiceCollection AddObservability(this IServiceCollection services, string serviceName, IConfiguration configuration) { // create the resource that references the service name passed in var resource = ResourceBuilder.CreateDefault().AddService(serviceName: serviceName, serviceVersion: "1.0"); // add the OpenTelemetry services var otelBuilder = services.AddOpenTelemetry(); otelBuilder // add the metrics providers .WithMetrics(metrics => { metrics .SetResourceBuilder(resource) .AddRuntimeInstrumentation() .AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() .AddEventCountersInstrumentation(c => { c.AddEventSources( "Microsoft.AspNetCore.Hosting", "Microsoft-AspNetCore-Server-Kestrel", "System.Net.Http", "System.Net.Sockets"); }) .AddMeter("Microsoft.AspNetCore.Hosting", "Microsoft.AspNetCore.Server.Kestrel") .AddConsoleExporter(); }) // add the tracing providers .WithTracing(tracing => { tracing.SetResourceBuilder(resource) .AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() .AddSqlClientInstrumentation(); }); return services; } }在 [終端機 ] 窗格上,執行此命令來建置專案:
dotnet build您應該會看到如以下範例所示的輸出:
Build succeeded. 0 Warning(s) 0 Error(s)診斷項目現在已可供產品服務使用。
在 [總管] 窗格的 [解決方案總管] 底下,以滑鼠右鍵按一下 [產品] 專案,然後選取 [新增專案參考]。
選取診斷。
在EXPLORER窗格中,展開Products資料夾,然後選取Program.cs。
在程序代碼批註
// Add observability code here下,新增對 Diagnostics 方法的呼叫:builder.Services.AddObservability("Products", builder.Configuration);在 [終端機 ] 窗格上,移至 [產品 ] 資料夾:
cd ../Products執行此指令以建置專案:
dotnet build您應該會看到如以下範例所示的輸出:
Build succeeded. 0 Warning(s) 0 Error(s)
更新 Docker 設定並執行應用程式
在 [終端機 ] 窗格中,移至 dotnet-observability 資料夾的根目錄:
cd .. dotnet publish /p:PublishProfile=DefaultContainer執行下列 Docker 命令:
cd /workspaces/mslearn-dotnet-cloudnative/dotnet-observability/ docker compose up後端 (產品服務) 和前端 (商店服務) 容器應該會組建。 然後應用程式就會啟動。
如果您要在 Codespace 中執行此練習,請選取 Visual Studio Code 視窗底部的 [ 埠 ] 索引標籤。 選取前端服務旁的 [在瀏覽器中開啟] 連結。
如果您要在 Visual Studio Code 中本機執行此練習,請在新的瀏覽器分頁中移至應用程式。
http://localhost:32000在應用程式中,選取導覽列中 的產品 。
針對數個產品選取 [更新庫存 ]。 然後,在對話框中變更庫存值,然後選取 [ 更新]。
選取 [終端機] 標籤頁,然後向下捲動查看訊息。 請注意,有來自 OpenTelemetry 的訊息,例如:
backend-1 | Export ec.Microsoft-AspNetCore-Server-Kestrel.connection-queue-length, Meter: OpenTelemetry.Instrumentation.EventCounters/1.5.1.1 backend-1 | (2023-11-09T19:55:14.8933518Z, 2023-11-09T20:04:44.8596671Z] http.request.method: PUT http.response.status_code: 200 http.route: /api/Stock/{id} network.protocol.name: http network.protocol.version: 1.1 url.scheme: http Histogram backend-1 | Value: Sum: 0.05144170000000001 Count: 4 Min: 0.0039736 Max: 0.0359739按 Ctrl+C 以停止應用程式。
您已成功將 OpenTelemetry 新增至 產品 服務。 在下一個單元中,您將瞭解如何在 Prometheus 和 Grafana 等工具上檢視遙測數據,以充分利用遙測數據。
![顯示 eShopLite 應用程式中 [產品] 頁面的螢幕快照。此頁面會顯示具有名稱、描述和價格的產品清單,以及更新庫存的按鈕。](../../aspnetcore/implement-observability-cloud-native-app-with-opentelemetry/media/eshoplite-products.png)