啟用 SQL Insights (預覽版)

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

本文說明如何啟用 SQL Insights (預覽版),以監視您的 SQL 部署。 監視是從 Azure 虛擬機器執行,此虛擬機器會連線到您的 SQL 部署,並使用動態管理檢視 (DMV) 來收集監視資料。 您可以使用監視設定檔來控制收集的資料集和收集頻率。

注意

若要藉由使用 Resource Manager 範本建立監視設定檔和虛擬機器來啟用 SQL Insights (預覽版),請參閱 SQL Insights (預覽版) 的 Resource Manager 範本範例

若要了解如何啟用 SQL Insights (預覽版),您也可以參考這集《Data Exposed》。

建立 Log Analytics 工作區

SQL Insights 會將其資料儲存在一或多個 Log Analytics 工作區。 您必須先建立工作區或選取現有的工作區,才能啟用 SQL 深入解析。 單一工作區可與多個監視設定檔搭配使用,但工作區與設定檔必須位於相同的 Azure 區域。 若要啟用並存取 SQL Insights 中的功能,您必須在工作區中具備 Log Analytics 參與者角色

建立監視使用者

在想監視的 SQL 部署上,您需要有使用者 (登入)。 請依照下列程序進行不同類型的 SQL 部署。

下列指示涵蓋您可以監視的每個 SQL 類型的程序。 若要一次在數個 SQL 資源上使用指令碼來完成此作業,請參閱下列讀我檔案範例指令碼

Azure SQL Database

注意

SQL Insights (預覽版) 不支援下列 Azure SQL Database 情節:

  • 彈性集區:無法收集彈性集區的計量。 無法為彈性集區內的資料庫收集計量。
  • 低服務層級:無法為基本、S0 和 S1 服務物件上的資料庫收集計量

SQL Insights (預覽版) 對於下列 Azure SQL Database 情節的支援有限:

  • 無伺服器層級:可使用無伺服器計算層為資料庫收集計量。 不過,收集計量的程序會重設自動暫停延遲計時器,以防止資料庫進入自動暫停狀態。

透過 Azure 入口網站中的 SQL Server Management Studio查詢編輯器 (預覽版),或其他 SQL 用戶端工具,連線至 Azure SQL 資料庫。

執行下列指令碼,以建立具有必要權限的使用者。 以使用者名稱取代 user,並以強式密碼取代 mystrongpassword。

CREATE USER [user] WITH PASSWORD = N'mystrongpassword'; 
GO 
GRANT VIEW DATABASE STATE TO [user]; 
GO 

Screenshot of the Query Editor with a create telegraf user script.

確認使用者已建立完成。

Screenshot of the Query Editor query window verifying the telegraf user script.

select name as username,
       create_date,
       modify_date,
       type_desc as type,
       authentication_type_desc as authentication_type
from sys.database_principals
where type not in ('A', 'G', 'R', 'X')
       and sid is not null
order by username

Azure SQL 受控執行個體

使用 SQL Server Management Studio 或類似工具連線至Azure SQL 受控執行個體,並執行下列指令碼,建立具有所需權限的監視使用者。 以使用者名稱取代 user,並以強式密碼取代 mystrongpassword。

USE master; 
GO 
CREATE LOGIN [user] WITH PASSWORD = N'mystrongpassword'; 
GO 
GRANT VIEW SERVER STATE TO [user]; 
GO 
GRANT VIEW ANY DEFINITION TO [user]; 
GO 

SQL Server

在您的虛擬機器上連線至 SQL Server,並使用 SQL Server Management Studio 或類似工具來執行下列指令碼以建立具有所需權限的監視使用者。 以使用者名稱取代 user,並以強式密碼取代 mystrongpassword。

USE master; 
GO 
CREATE LOGIN [user] WITH PASSWORD = N'mystrongpassword'; 
GO 
GRANT VIEW SERVER STATE TO [user]; 
GO 
GRANT VIEW ANY DEFINITION TO [user]; 
GO

確認使用者已建立完成。

select name as username,
       create_date,
       modify_date,
       type_desc as type
from sys.server_principals
where type not in ('A', 'G', 'R', 'X')
       and sid is not null
order by username

建立 Azure 虛擬機器

您必須建立一或多個 Azure 虛擬機器,以用於收集資料來監視 SQL。

注意

監視設定檔會指定要從您想要監視的不同類型 SQL 收集哪些資料。 每個監視虛擬機器只能有一個與其相關的監視設定檔。 如果您需要多個監視設定檔,則必須為每個設定檔建立虛擬機器。

Azure 虛擬機器需求

Azure 虛擬機器具有下列需求:

  • 作業系統:使用 Azure Marketplace 映像的 Ubuntu 18.04。 不支援自訂映像。 若要取得此 Ubuntu 版本的延長安全性維護 (ESM),建議使用 Ubuntu Pro 18.04 LTS 市集映像。 如需詳細資訊,請參閱 Azure 中對 Linux 及開放原始碼技術的支援
  • 建議的 Azure 虛擬機器大小下限:Standard_B2 (2 個 CPU、4-GiB 記憶體)
  • 部署在 Azure 監視器代理程式所支援的任何 Azure 區域中,並符合所有 Azure 監視器代理程式的必要條件

注意

Standard_B2 (2 個 CPU,4 GiB 記憶體) 虛擬機器大小可支援最多 100 個連接字串。 您不應該為單一虛擬機器配置超過 100 個連線。

根據您 SQL 資源的網路設定,虛擬機器可能需要放置在與您 SQL 資源相同的虛擬網路中,以便建立網路連線來收集監視資料。

設定網路設定

每種類型的 SQL 都會提供方法,讓監視虛擬機器安全地存取 SQL。 下列各節涵蓋以 SQL 部署類型為基礎的選項。

Azure SQL Database

SQL 深入解析支援透過其公用端點以及其虛擬網路存取您的 Azure SQL Database。

若要透過公用端點存取,請在 [防火牆設定] 頁面和 [IP 防火牆設定] 區段下新增規則。 若要指定虛擬網路的存取權,您可以設定虛擬網路防火牆規則,並設定 Azure 監視器代理程式所需的服務標籤本文說明這兩種類型的防火牆規則之間的差異。

Screenshot of an Azure SQL Database page in the Azure portal. The Set server firewall button is highlighted.

Screenshot of an Azure SQL Database Firewall settings page in the Azure portal. Firewall settings.

Azure SQL 受控執行個體

如果您的監視虛擬機器與 SQL MI 資源位於相同的 VNet 中,請參閱相同 VNet 內的連線。 如果您的監視虛擬機器位於與 SQL MI 資源不同的 VNet 中,請參閱不同 VNet 內的連線

SQL Server

如果您的監視虛擬機器位於與 SQL 虛擬機器資源相同的 VNet 中,請參閱連線至虛擬網路內的 SQL Server。 如果您的監視虛擬機器會位於與 SQL 虛擬機器資源不同的 VNet 中,請參閱透過網際網路連線至 SQL Server

將監視密碼儲存在 Azure Key Vault

我們強烈建議您採用安全性最佳做法,將 SQL 使用者 (登入) 密碼儲存在 Key Vault 中,而不是直接輸入監視設定檔連接字串。

在為 SQL Monitoring 設定設定檔時,您需要在打算使用的 Key Vault 資源上具備下列權限之一:

  • Microsoft.Authorization/roleAssignments/write
  • Microsoft.Authorization/roleAssignments/delete

如果您具備這些權限,系統會自動在建立 SQL Monitoring 設定檔 (使用您指定 Key Vault 的設定檔) 的同時,建立新的 Key Vault 存取原則。

重要事項

您必須確保網路和安全性設定允許監視 VM 存取 Key Vault。 如需詳細資訊,請參閱存取防火牆後方的 Azure Key Vault設定 Azure Key Vault 網路設定

建立 SQL 監視設定檔

從 Azure 入口網站中 [Azure 監視器] 功能表的 [深入解析] 區段中,選取 [SQL (預覽版)],以開啟 SQL Insights (預覽版)。 選取 [建立新設定檔]

Screenshot of the Azure Monitor page in Azure portal. The create new profile button is highlighted.

設定檔會儲存您想要從 SQL 系統收集的資訊。 其具備特定設定,適用於:

  • Azure SQL Database
  • Azure SQL 受控執行個體
  • 在虛擬機器上執行的 SQL Server

例如,您可能會建立一個名為 SQL Production 的設定檔,和另一個名為 SQL Staging 的設定檔,以設定不同的資料收集頻率、要收集的資料內容,以及傳送資料的目的地工作區。

設定檔會在您選取的訂閱和資源群組中儲存為資料收集規則資源。 每個設定檔都需要下列項目:

  • Name: 建立之後便無法編輯。
  • 位置。 這是 Azure 區域。
  • 儲存監視資料的 Log Analytics 工作區。
  • 收集 SQL Monitoring 資料的頻率和類型的收集設定。

注意

設定檔的位置應該與您打算傳送監視資料的目的地 Log Analytics 工作區位於相同的位置。

A screenshot of the Create new profile details page in the Azure portal.

輸入監視設定檔的詳細資料後,選取 [建立監視設定檔]。 部署設定檔最多可能需要一分鐘的時間。 如果您沒有看到 [監視設定檔] 下拉式方塊中列出新的設定檔,請選取 [重新整理] 按鈕,新設定檔應該會在部署完成後顯示。 選取新的設定檔之後,請選取 [管理設定檔] 索引標籤,以新增與設定檔相關聯的監視機器。

新增監視機器

選取 [新增監視機器] 開啟 Add monitoring virtual machine 內容面板,選擇虛擬機器,以監視您的 SQL 執行個體,並提供連接字串。

選取監視虛擬機器的訂閱和名稱。 如果您使用金鑰保存庫來儲存監視登入的密碼 (強烈建議),請選取 Key vault subscriptions 下該金鑰保存庫的訂用帳戶,然後選取 KeyVault 下儲存祕密的金鑰保存庫。 在 Connection strings 欄位中,輸入要用於連接字串中每個密碼的保存庫 URI 和祕密名稱。

例如,如果金鑰保存庫 URI 為 https://mykeyvault.vault.azure.net/,且祕密名稱為 sqlPassword1sqlPassword2,則 Connection strings 欄位中的 JSON 將包含下列內容:

{
   "secrets": {
      "telegrafPassword1": {
         "keyvault": "https://mykeyvault.vault.azure.net/",
         "name": "sqlPassword1"
      },
      "telegrafPassword2": {
         "keyvault": "https://mykeyvault.vault.azure.net/",
         "name": "sqlPassword2"
      }
   }
}

您現在可以在 Connection strings 欄位中進一步參考這些祕密。 在下列範例中,兩個連接字串會參考之前定義的 telegrafPassword1telegrafPassword2 祕密:

{
   "sqlAzureConnections": [
      "Server=mysqlserver.database.windows.net;Port=1433;Database=mydatabase;User Id=telegraf;Password=$telegrafPassword1;"
   ],
   "sqlVmConnections": [
      "Server=mysqlserver1;Port=1433;Database=master;User Id=telegraf;Password=$telegrafPassword2;"
   ]
}

A screenshot of the Azure portal Add monitoring virtual machine page. Choose the VM, specify the KV url (if used) and the secret name. Enter connection strings for each system to monitor. Choose the KV where you created the secret used in the connection strings.

如需識別不同 SQL 部署的連接字串的詳細資料,請參閱下一節。

新增連接字串

連接字串會指定 SQL Insights (預覽版) 在登入 SQL 以收集監視資料時應使用的登入名稱。 如果您使用 Key Vault 來儲存監視使用者的密碼,請提供包含密碼的 Key Vault URI 和祕密名稱。

連接字串會視每種 SQL 資源類型而有所不同:

Azure SQL Database

從監視機器到資料庫所使用的 IP 位址和連接埠的 TCP 連線,都必須受到可能存在於網路路徑上的任何防火牆或網路安全性群組 (NSG) 允許。 如需 IP 位址和連接埠的詳細資料,請參閱 Azure SQL Database 連線架構

以下列格式輸入連接字串:

"sqlAzureConnections": [
   "Server=mysqlserver1.database.windows.net;Port=1433;Database=mydatabase;User Id=$username;Password=$password;",
   "Server=mysqlserver2.database.windows.net;Port=1433;Database=mydatabase;User Id=$username;Password=$password;"
]

從 [連接字串] 頁面取得詳細資料,以及資料庫的適當 ADO.NET 端點。

若要監視可讀取次要,請將 ;ApplicationIntent=ReadOnly 附加至連接字串。 SQL 深入解析支援監視單一次要。 收集的資料將會加上標記,以反映主要或次要。

Azure SQL 受控執行個體

可能存在於網路路徑上的任何防火牆或網路安全性群組 (NSG) 都必須允許從監視機器到受控執行個體所使用之 IP 位址和連接埠的 TCP 連線。 如需 IP 位址和連接埠的詳細資料,請參閱 Azure SQL 受控執行個體連線類型

以下列格式輸入連接字串:

"sqlManagedInstanceConnections": [
   "Server= mysqlserver1.<dns_zone>.database.windows.net;Port=1433;User Id=$username;Password=$password;",
   "Server= mysqlserver2.<dns_zone>.database.windows.net;Port=1433;User Id=$username;Password=$password;" 
] 

從 [連接字串] 頁面取得詳細資料,以及受控執行個體的 ADO.NET 端點。 如果使用受控執行個體公用端點,請將連接埠 1433 取代為 3342。

若要監視可讀取次要,請將 ;ApplicationIntent=ReadOnly 附加至連接字串。 SQL Insights 支援監視指定主要資料庫的單一高可用性 (HA) 次要複本。 收集的資料將會加上標記,以反映主要或次要。

SQL Server

您必須針對您想要監視的 SQL Server 執行個體啟用 TCP/IP 通訊協定。 可能存在於網路路徑上的任何防火牆或網路安全性群組 (NSG) 都必須允許從監視機器到 SQL Server 執行個體所使用之 IP 位址和連接埠的 TCP 連線。

如果您想要監視設為高可用性的 SQL Server (使用可用性群組或容錯移轉叢集執行個體),建議個別監視叢集中的每個 SQL Server 執行個體,而不是透過可用性群組接聽程式或容錯移轉叢集名稱進行連線。 這可確保無論目前執行個體角色 (主要或次要) 為何,都會收集監視資料。

以下列格式輸入連接字串:

"sqlVmConnections": [
   "Server=SQLServerInstanceIPAddress1;Port=1433;User Id=$username;Password=$password;",
   "Server=SQLServerInstanceIPAddress2;Port=1433;User Id=$username;Password=$password;"
] 

使用 SQL Server 執行個體接聽的 IP 位址。

如果您的 SQL Server 執行個體設為接聽非預設連接埠,請將 1433 取代為連接字串中的連接埠號碼。 如果您使用 Azure 虛擬機器 上的 SQL Server,可以在資源的 [安全性] 頁面上看到要使用的連接埠。

A screenshot of the SQL virtual machine Security page in the Azure portal. The SQL virtual machine security page has a Security & networking section with a Port field.

對於任何 SQL Server 執行個體,只要至少有一個 TCP 連線到該執行個體,您就可以藉由連線至執行個體並執行下列 T-SQL查詢,來確認其正在接聽的所有 IP 位址和連接埠:

SELECT DISTINCT local_net_address, local_tcp_port
FROM sys.dm_exec_connections
WHERE net_transport = 'TCP'
      AND
      protocol_type = 'TSQL';

已建立監視設定檔

選取 [新增監視虛擬機器],以設定虛擬機器來收集 SQL 資源的資料。 請勿返回 [概觀] 索引標籤。幾分鐘之後,[狀態] 資料行應會變更為 [正在收集],您應該會看見您選擇監視的 SQL 資源的資料。

如果您沒看見資料,請參閱為 SQL Insights (預覽版) 疑難排解,以找出問題。

A screenshot of the Azure portal page for Azure Monitor for SQL. In the Insights menu, SQL is selected. A profile is shown to have been created.

注意

如果您需要在監視的 VM 上更新監視設定檔或連接字串,您可以透過 SQL Insights (預覽版) 的 [管理設定檔] 索引標籤來執行此操作。儲存更新之後,變更大約會在 5 分鐘內套用。

後續步驟