練習 - 將 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 套件和設定,您將用來將可檢視性新增至應用程式。
- 在 Visual Studio Code 命令選擇區中,輸入 >.NET:開啟解決方案 。
- 選取 dotnet-observability/eShopLite/eShopLite.sln。
- 在 [方案總管] 的 [檔案總管] 窗格底部,以滑鼠右鍵按一下 [eShopLite] 解決方案,然後選取 [新增專案]。
- 在 [選取範本以建立新的 .NET 專案] 對話方塊中,選取 [類別庫 (通用、程式庫)]。
- 在 [名稱] 欄位中,輸入 [診斷]。
- 在 [專案將建立在] 下拉式清單中,選取 [預設目錄]。
新增 OpenTelemetry 套件
現在,將 OpenTelemetry 套件新增至新的診斷專案。
使用 Visual Studio Code 底部的 [終端] 窗格,前往 [診斷] 專案資料夾:
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 套件後,現在將引入程式碼來加以運用。
在 [檔案總管] 窗格中,以滑鼠右鍵按一下 [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)
[診斷] 專案現在已可供 [產品] 服務使用。
在 [檔案總管] 窗格的 [方案總管] 下,以滑鼠右鍵按一下 [產品] 專案,然後選取 [新增專案參考]。
選取 [診斷]。
在 [檔案總管] 窗格中,展開 [產品] 資料夾,然後選取 [Program.cs]。
在程式碼註解
// Add observability code here
底下,新增診斷方法的呼叫: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 等工具上檢視遙測資料,以充分運用這項資料。