練習 - 在 .NET Aspire 專案中使用遙測

已完成

在此練習中,您會使用 OpenTelemetry API 將自訂資料新增至記錄。 您也會檢查記錄以尋找您的自訂事件。

安裝先決條件

本練習的必要條件為:

  • .NET 8
  • Visual Studio 2022 預覽版
  • Docker Desktop
  • Visual Studio 中的 .NET Aspire 工作負載

如果已安裝這些套件,您可以直接跳到開始使用 OpenTelemetry 記錄。

安裝 .NET 8

請遵循此 .NET 8 連結,然後為您的作業系統選取正確的安裝程式。 例如,如果您使用 Windows 11 和新式處理器,請選取適用於 Windows 的 x64 .NET 8 SDK。

下載完成之後,請執行安裝程式並遵循指示。 在終端視窗中,執行下列命令以確認安裝成功:

dotnet --version

您應該會看到您已安裝的 .NET SDK 版本號碼。 例如:

8.0.300-preview.24203.14

安裝 Visual Studio 2022 預覽版

請遵循此 Visual Studio 2022 預覽版連結,然後選取 [下載預覽版]。 下載完成之後,請執行安裝程式並遵循指示。

安裝 Docker Desktop

請遵循此 Docker Desktop 連結,然後為您的作業系統選取正確的安裝程式。 下載完成之後,請執行安裝程式並遵循指示。 為了獲得最佳效能和相容性,請使用 WSL 2 後端。

開啟 Docker 傳統型應用程式並接受服務合約。

安裝 Visual Studio 中的 .NET Aspire 工作負載

使用 .NET CLI 安裝 .NET Aspire 工作負載:

  1. 開啟終端機。

  2. 使用此指令更新 .NET 工作負載:

    dotnet workload update
    

    您應該會看到一則訊息,指出工作負載已成功更新。

    No workloads installed for this feature band. To update workloads installed with earlier SDK versions, include the --from-previous-sdk option.
    Updated advertising manifest microsoft.net.sdk.ios.
    Updated advertising manifest microsoft.net.workload.mono.toolchain.net6.
    Updated advertising manifest microsoft.net.sdk.android.
    Updated advertising manifest microsoft.net.workload.emscripten.net7.
    Updated advertising manifest microsoft.net.workload.emscripten.net6.
    Updated advertising manifest microsoft.net.sdk.macos.
    Updated advertising manifest microsoft.net.workload.emscripten.current.
    Updated advertising manifest microsoft.net.workload.mono.toolchain.current.
    Updated advertising manifest microsoft.net.sdk.maui.
    Updated advertising manifest microsoft.net.workload.mono.toolchain.net7.
    Updated advertising manifest microsoft.net.sdk.maccatalyst.
    Updated advertising manifest microsoft.net.sdk.tvos.
    Updated advertising manifest microsoft.net.sdk.aspire.
    No workloads installed for this feature band. To update workloads installed with earlier SDK versions, include the --from-previous-sdk option.
    
    Successfully updated workload(s): .
    
  3. 使用此命令安裝 .NET Aspire 工作負載:

    dotnet workload install aspire
    

    您應該會看到一則訊息,指出已成功安裝 Aspire 工作負載。

    Installing Aspire.Hosting.Sdk.Msi.x64 ...... Done
    Installing Aspire.ProjectTemplates.Msi.x64 ..... Done
    Installing Aspire.Hosting.Orchestration.win-x64.Msi.x64 ............. Done
    Installing Aspire.Hosting.Msi.x64 ..... Done
    Installing Aspire.Dashboard.Sdk.win-x64.Msi.x64 ....... Done
    
    Successfully installed workload(s) aspire.
    
  4. 使用此命令確認已安裝 .NET Aspire 工作負載:

    dotnet workload list
    

    您應該會看到 .NET Aspire 工作負載的詳細資料。

     Installed Workload Id      Manifest Version      Installation Source
    ---------------------------------------------------------------------------------------------
    aspire                     8.0.0/8.0.100         SDK 8.0.300-preview.24203, VS 17.10.34902.84
    
    Use `dotnet workload search` to find additional workloads to install.
    

複製範例應用程式

讓我們使用 git 來取得範例應用程式。 因為應用程式包含 .NET Aspire,OpenTelemetry 隨附於默認記錄、計量和分散式追蹤:

  1. 在命令列中,瀏覽至您選擇的資料夾,您可以在其中使用程式碼。

  2. 執行下列命令以複製北山 eShop 範例應用程式:

    git clone -b aspire-telemetry https://github.com/MicrosoftDocs/mslearn-aspire-starter
    

使用編譯時間來源生成記錄訊息

我們可以使用編譯時間來源生成自動建立高效能記錄程式碼。 讓我們實作取得產品品牌的技術:

  1. 開啟 [Visual Studio],並選取 [開啟專案或解決方案]

  2. 瀏覽至您複製入門專案的資料夾。 開啟 [開始] 資料夾,選取 [eShop.aspiretelemetry.sln],然後選取 [開啟]

  3. [方案總管] 中,展開 [WebApp] > [服務],然後按兩下 CatalogService.cs

  4. 找出下列程式碼行,它會宣告 CatalogService 類別:

    public class CatalogService(HttpClient httpClient)
    
  5. 若要使用編譯時間來源生成,我們必須讓這個類別為 partial,並使用相依性插入來取得記錄器。 變更行以符合此程式碼:

    public partial class CatalogService(HttpClient httpClient, ILogger<CatalogService> logger)
    
  6. 接下來,CatalogService 類別中的任何位置,在其他方法之外,建立名為 logGetBrands 的新 static partial 方法:

    public static partial void LogGetBrands(string uri, ILogger logger);
    
  7. 緊接在該行之前,新增 LoggerMessageAttribute 並定義記錄層級和訊息:

    [LoggerMessage(
    EventId = 0,
    Level = LogLevel.Information,
    Message = "Getting brands from URI: {uri}")]
    
  8. 尋找 GetBrands() 方法,及其中的下列程式碼:

    var uri = $"{remoteServiceBaseUrl}catalogBrands";
    
  9. 若要呼叫新的記錄方法,請在該行後面插入下列程式碼:

    LogGetBrands(uri, logger);
    
  10. 若要儲存變更,請按 CTRL + S,或選取 [檔案]> [全部儲存]

測試檢測

現在,我們將測試編譯時間來源生成記錄:

  1. 在 Visual Studio 中,若要在偵錯模式中啟動應用程式,請按 F5,或選取 [偵錯] > [開始偵錯]

  2. 如果 [啟動 Docker 桌面] 訊息出現,請選取 [是]。 應用程式會在瀏覽器索引標籤中啟動並顯示 .NET Aspire 儀表板。

  3. 若要提出一些要求,請在 [資源] 列表中找出 webapp 專案,然後在 [端點] 資料行中選取其中一個項目:

    顯示 .NET Aspire 儀表板和 Webapp 端點連結位置的螢幕擷取畫面。

  4. 新的瀏覽器索引標籤隨即出現,並顯示北山首頁。 品牌清單包含在左側。 切換回 .NET Aspire 儀表板,然後在左側選取 [結構化]

  5. [篩選] 文本框中,輸入取得品牌。 頁面會顯示您記錄的事件:

    顯示 .NET Aspire 儀表板中已篩選事件的螢幕擷取畫面。

  6. 在事件的 [詳細資料] 資料行中,選取 [檢視]。 儀表板會開啟下方窗格,以顯示項目的詳細資料。

  7. 關閉瀏覽器索引標籤,並在 Visual Studio 中按 SHIFT + F5,或選取 [偵錯] > [停止偵錯]

  8. 關閉 Visual Studio。