共用方式為


在 Azure 儲存體中建立具有 event_file 目標的事件工作階段

適用於:Azure SQL Database Azure SQL 受控執行個體

本逐步解說中的高階步驟如下:

  1. 建立 Azure 儲存體 帳戶,或尋找要使用的現有適當帳戶。
  2. 在此記憶體帳戶中建立容器。
  3. 使用 RBAC 角色指派或 SAS 令牌,將所需的存取權授與容器 資料庫引擎。
  4. 在建立事件會話的資料庫或受控實例中建立認證。
  5. 建立、啟動及使用事件會話。

建立儲存體帳戶和容器

如需如何在 Azure 儲存體中建立儲存體帳戶的詳細描述,請參閱建立儲存體帳戶。 您將了解如何使用 Azure 入口網站、PowerShell、Azure SQL、ARM 範本或 Bicep 範本來建立儲存體帳戶。

建議您使用符合下列要求的帳戶:

  • Standard general-purpose v2 帳戶。
  • 其備援類型符合建立事件工作階段的 Azure SQL 資料庫、彈性集區或受控執行個體的備援。
  • 使用 Hot blob 存取層
  • 位於與 Azure SQL 資料庫、彈性集區或受控執行個體相同的 Azure 區域中。

下一步,使用 Azure 入口網站在此儲存體帳戶中建立容器。 也可以使用 PowerShell使用 Azure CLI 建立容器。

記下您建立的 記憶體帳戶容器 名稱。 您會在下列步驟中使用它們。

授與容器的存取權

若要讀取和寫入事件數據,資料庫引擎 需要容器的特定存取權。 您可以根據您選擇的驗證類型,以下列兩種方式之一授與此存取權:

使用受控識別授與存取權

  1. 在 Azure 入口網站 中,流覽至 Azure SQL 邏輯伺服器或 Azure SQL 受控實例的 [身分識別] 頁面,並確定已指派受控識別。 如需詳細資訊,請參閱適用於 Azure SQL 的 Microsoft Entra中的受控身分識別

  2. 在 Azure 入口網站 中,流覽至您想要儲存事件數據的記憶體容器。 在 [存取控制 (IAM) 頁面上,選取 [新增] 將記憶體 Blob 數據參與者 RBAC 角色指派給邏輯伺服器或 SQL 受控實例的受控識別。

    如果邏輯伺服器或 SQL 受控實例已啟用其系統指派的受控識別,請將角色指派給該身分識別。 如果系統指派的身分識別已停用,但有一或多個使用者指派的身分識別,請將角色指派給指定為主要身分識別的使用者指派身分識別。

    如需詳細資訊,請參閱指派 Azure 角色以存取 Blob 資料

  3. 建立認證,指示 資料庫引擎 使用特定容器 URL 的受控識別來驗證以 Azure 儲存體。

    建立資料庫範圍認證。 使用 SSMS 或 ADS 之類的用戶端工具,開啟新的查詢視窗、連線到您建立事件工作階段的資料庫,然後貼上下列 T-SQL 批次。 請確定您已連線到您的使用者資料庫,而不是連線到 master 資料庫。

    注意

    執行下列 T-SQL 批次需要 CONTROL 資料庫權限,此權限由資料庫擁有者 (dbo)、資料庫角色 db_owner 的成員和邏輯伺服器的系統管理員所持有。

    /*
    (Re-)create a database scoped credential.
    The name of the credential must match the URL of the blob container.
    */
    IF EXISTS (
              SELECT 1
              FROM sys.database_credentials
              WHERE name = 'https://<storage-account-name>.blob.core.windows.net/<container-name>'
              )
        DROP DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>];
    
    /*
    When using managed identity, the credential does not contain a secret
    */
    CREATE DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>]
    WITH IDENTITY = 'MANAGED IDENTITY';
    

    執行此批次之前,請進行下列變更:

    • 在所有三個出現的 https://<storage-account-name>.blob.core.windows.net/<container-name> 中,以儲存體帳戶的名稱取代 <storage-account-name>,並以容器的名稱取代 <container-name>

使用SAS令牌授與存取權

  1. 在 Azure 入口網站 中,流覽至您所建立的記憶體帳戶和容器。 選取容器,然後瀏覽至 [設定] > [共用存取權杖]

    SAS 令牌必須滿足下列需求:

    • 權限設定為Read、、DeleteWriteList
    • 開始時間和到期時間必須包含事件會話的存留期。 您建立的 SAS 權杖只能在此時間間隔內運作。
    • 沒有 IP 位址限制。

    選取 [產生 SAS 權杖和 URL] 按鈕。 SAS 權杖位於 [Blob SAS 權杖] 方塊中。 您可以複製它以在下一個步驟中使用。

    重要

    SAS 權杖會提供此容器的讀取和寫入存取權。 將它視為密碼或任何其他祕密進行處理。

    螢幕擷取畫面顯示 Azure 儲存體容器的 [共用存取權杖] 畫面,其中包含為範例容器產生的 SAS 權杖。

  2. 建立認證以儲存 SAS 令牌。

    將 SAS 權杖儲存在資料庫範圍認證中。 使用 SSMS 或 ADS 之類的用戶端工具,開啟新的查詢視窗、連線到您建立事件工作階段的資料庫,然後貼上下列 T-SQL 批次。 請確定您已連線到您的使用者資料庫,而不是連線到 master 資料庫。

    注意

    執行下列 T-SQL 批次需要 CONTROL 資料庫權限,此權限由資料庫擁有者 (dbo)、資料庫角色 db_owner 的成員和邏輯伺服器的系統管理員所持有。

    /*
    Create a master key to protect the secret of the credential
    */
    IF NOT EXISTS (
                  SELECT 1
                  FROM sys.symmetric_keys
                  WHERE name = '##MS_DatabaseMasterKey##'
                  )
    CREATE MASTER KEY;
    
    /*
    (Re-)create a database scoped credential.
    The name of the credential must match the URL of the blob container.
    */
    IF EXISTS (
              SELECT 1
              FROM sys.database_credentials
              WHERE name = 'https://<storage-account-name>.blob.core.windows.net/<container-name>'
              )
        DROP DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>];
    
    /*
    The secret is the SAS token for the container. The Read, Write, and List permissions are set.
    */
    CREATE DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>]
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
        SECRET = '<sas-token>';
    

    在執行此批次之前,請進行下列變更:

    • 在所有三個出現的 https://<storage-account-name>.blob.core.windows.net/<container-name> 中,以儲存體帳戶的名稱取代 <storage-account-name>,並以容器的名稱取代 <container-name>
    • 在 子句中 SECRET ,將 取代 <sas-token> 為您在上一個步驟中複製的SAS令牌。

建立、啟動和停止事件會話

建立認證之後,您可以建立事件會話。 與建立認證不同,建立事件會話不需要 CONTROL 許可權。 建立認證之後,即使擁有更多限制的許可權,您仍可建立事件會話。 請參閱權限,了解所需的特定權限。

若要在 SSMS 中建立新的事件工作階段,請展開 [擴充事件] 節點。 此節點位於 Azure SQL 資料庫的資料庫資料夾下,以及 Azure SQL 受控執行個體中的 [管理] 資料夾底下。 以滑鼠右鍵按一下 [工作階段] 資料夾,然後選取 [新增工作階段...]。在 [一般] 頁面上,輸入工作階段的名稱,在此範例中為 example-session。 在 [事件] 頁面上,選取要新增至工作階段的一個或多個事件。 在此範例中,我們選取了 sql_batch_starting 事件。

螢幕擷取畫面顯示 [新工作階段 SSMS] 對話方塊,其中顯示已選取sql_batch_starting 事件的事件選取頁面。

在 [資料儲存體] 頁面上,選取 event_file 作為目標型別,然後在 [儲存體 URL] 方塊中貼上儲存體容器的 URL。 在此 URL 結尾輸入斜線 (/),後面接著檔案 (blob) 名稱。 在我們的範例中,Blob 名稱為 example-session.xel,而整個 URL 為 https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel

注意

針對 SQL 受控執行個體,請使用 [指令碼] 按鈕來建立工作階段的 T-SQL 指令碼,而不是貼上 [資料儲存體] 頁面上的儲存體容器網址。 將容器 URL 指定為自變數 filename 的值,類似於下列 SQL 受控執行個體範例,然後執行指令碼來建立工作階段。

螢幕擷取畫面為 [新工作階段 SSMS] 對話方塊,顯示資料儲存體選取頁面,其中已選取 event_file 目標及輸入儲存體網址。

現在已設定工作階段,您可以選取 [指令碼] 按鈕來建立工作階段的 T-SQL 指令碼,以便稍後儲存。 以下是範例工作階段的指令碼:

CREATE EVENT SESSION [example-session] ON DATABASE
ADD EVENT sqlserver.sql_batch_starting
ADD TARGET package0.event_file(SET filename=N'https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel')
GO

選取 [確定] 以建立工作階段。

在 [物件總管] 中,展開 [工作階段] 資料夾,以查看您所建立的事件工作階段。 根據預設,工作階段不會在建立時啟動。 若要啟動工作階段,請以滑鼠右鍵按一下工作階段名稱,然後選取 [啟動工作階段]。 在工作階段執行之後,您稍後可採用類似做法,選取 [停止工作階段] 將其停止。

當 T-SQL 批次在此資料庫或受控實例中執行時,會話會將事件 example-session.xel 寫入記憶體容器中的 Blob。

若要停止工作階段,請以滑鼠右鍵按一下 [物件總管],然後選取 [停止工作階段]。

檢視事件資料

您可以在 SQL Server Management Studio (SSMS) 事件檢視器 UI 中檢視事件資料,其中可以使用篩選和彙總來分析所擷取的資料。 如需在 SSMS 中使用事件檢視器的詳細資訊,請參閱在 SSMS 中檢視事件資料

從 Azure 儲存體下載下載 xel 檔案

提示

如果您使用 SSMS v19.2 或更新版本,就不需要如本節所述下載 xel 檔案。 在這些版本中,SSMS 會直接從 Azure 儲存體讀取每個工作階段的 xel 檔案。 如需詳細資訊,請參閱改善 Azure SQL 中的擴充事件部落格。

從儲存體容器下載工作階段的 xel Blob,並將其儲存為本機檔案。 在 Azure 入口網站中,尋找您所使用的儲存體帳戶,選取 [資料儲存體] 下的 [容器],然後選取您為事件工作階段建立的容器。 工作階段的 Blob 以工作階段名稱做為其名稱的第一個部分,並加上數值後置詞。 選取省略號 (...) 以顯示 Blob 的特色選單,然後選取 [下載]。

您可以安裝 [Azure 儲存體總管],在一個作業中下載多個 xel Blob。

下載 xel 檔案之後,在 SSMS 中開啟它。 在 [SSMS] 主功能表上,移至 [檔案],然後選取 [開啟]。 如果您有單一 xel 檔案,請選取 [檔案...],然後瀏覽至您下載的檔案。 如果您有相同事件工作階段產生的多個 xel 檔案 (稱為換用檔案),您可以使用 [合併擴充事件檔案... ] 對話方塊,在事件檢視器中開啟所有檔案。

使用 T-SQL 檢視事件資料

若要使用 T-SQL 讀取事件工作階段資料,請使用 sys.fn_xe_file_target_read_file() 函式。 若要在資料庫或受控實例中使用此函式,與建立事件會話不同的實例,請使用事件數據 Blob 授與記憶體容器上 資料庫引擎 的存取權。

如需更詳細的逐步解說,請參閱在 SSMS 中建立事件工作階段