在 Azure 儲存體中建立具有 event_file 目標的事件工作階段
適用於:Azure SQL Database Azure SQL 受控執行個體
本逐步解說中的高階步驟如下:
- 建立 Azure 儲存體 帳戶,或尋找要使用的現有適當帳戶。
- 在此記憶體帳戶中建立容器。
- 使用 RBAC 角色指派或 SAS 令牌,將所需的存取權授與容器 資料庫引擎。
- 在建立事件會話的資料庫或受控實例中建立認證。
- 建立、啟動及使用事件會話。
建立儲存體帳戶和容器
如需如何在 Azure 儲存體中建立儲存體帳戶的詳細描述,請參閱建立儲存體帳戶。 您將了解如何使用 Azure 入口網站、PowerShell、Azure SQL、ARM 範本或 Bicep 範本來建立儲存體帳戶。
建議您使用符合下列要求的帳戶:
- 為
Standard general-purpose v2
帳戶。 - 其備援類型符合建立事件工作階段的 Azure SQL 資料庫、彈性集區或受控執行個體的備援。
- 針對本地備援 Azure SQL 資源,請使用 LRS、GRS 或 RA-GRS。 針對區域備援 Azure SQL 資源,請使用 ZRS、GZRS 或 RA-GZRS。 如需更多資訊,請參閱 Azure 儲存體備援。
- 使用
Hot
blob 存取層。 - 位於與 Azure SQL 資料庫、彈性集區或受控執行個體相同的 Azure 區域中。
下一步,使用 Azure 入口網站在此儲存體帳戶中建立容器。 也可以使用 PowerShell 或使用 Azure CLI 建立容器。
記下您建立的 記憶體帳戶 和 容器 名稱。 您會在下列步驟中使用它們。
授與容器的存取權
若要讀取和寫入事件數據,資料庫引擎 需要容器的特定存取權。 您可以根據您選擇的驗證類型,以下列兩種方式之一授與此存取權:
如果使用受控識別搭配 Microsoft Entra 驗證,您可以將容器的記憶體 Blob 數據參與者 RBAC 角色指派給 Azure SQL 邏輯伺服器或 Azure SQL 受控實例的受控識別。
注意
搭配擴充事件會話的受控識別使用處於預覽狀態。
如果使用秘密型驗證,您可以建立 容器的 SAS 令牌 。
若要使用此驗證類型, 必須啟用 [允許記憶體帳戶密鑰存取 ] 選項。 如需詳細資訊,請參閱防止 Azure 儲存體帳戶使用共用金鑰授權。
使用受控識別授與存取權
在 Azure 入口網站 中,流覽至 Azure SQL 邏輯伺服器或 Azure SQL 受控實例的 [身分識別] 頁面,並確定已指派受控識別。 如需詳細資訊,請參閱適用於 Azure SQL 的 Microsoft Entra中的受控身分識別。
在 Azure 入口網站 中,流覽至您想要儲存事件數據的記憶體容器。 在 [存取控制 (IAM) 頁面上,選取 [新增] 將記憶體 Blob 數據參與者 RBAC 角色指派給邏輯伺服器或 SQL 受控實例的受控識別。
如果邏輯伺服器或 SQL 受控實例已啟用其系統指派的受控識別,請將角色指派給該身分識別。 如果系統指派的身分識別已停用,但有一或多個使用者指派的身分識別,請將角色指派給指定為主要身分識別的使用者指派身分識別。
如需詳細資訊,請參閱指派 Azure 角色以存取 Blob 資料。
建立認證,指示 資料庫引擎 使用特定容器 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令牌授與存取權
在 Azure 入口網站 中,流覽至您所建立的記憶體帳戶和容器。 選取容器,然後瀏覽至 [設定] > [共用存取權杖]。
SAS 令牌必須滿足下列需求:
- 權限設定為
Read
、、Delete
Write
、List
。 - 開始時間和到期時間必須包含事件會話的存留期。 您建立的 SAS 權杖只能在此時間間隔內運作。
- 沒有 IP 位址限制。
選取 [產生 SAS 權杖和 URL] 按鈕。 SAS 權杖位於 [Blob SAS 權杖] 方塊中。 您可以複製它以在下一個步驟中使用。
重要
SAS 權杖會提供此容器的讀取和寫入存取權。 將它視為密碼或任何其他祕密進行處理。
- 權限設定為
建立認證以儲存 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
事件。
在 [資料儲存體] 頁面上,選取 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 受控執行個體範例,然後執行指令碼來建立工作階段。
現在已設定工作階段,您可以選取 [指令碼] 按鈕來建立工作階段的 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 中建立事件工作階段。