你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

启用 SQL 见解(预览版)

适用于:Azure SQL 数据库Azure SQL 托管实例

本文介绍如何启用 SQL 见解(预览版)来监视 SQL 部署。 通过连接到 SQL 部署的 Azure 虚拟机来进行监视,并且该虚拟机使用动态管理视图 (DMV) 来收集监视数据。 可以使用监视配置文件控制要收集的数据集和收集频率。

注意

若要通过使用资源管理器模板创建监视配置文件和虚拟机来启用 SQL 见解(预览版),请参阅 SQL 见解(预览版)的资源管理器模板示例

若要了解如何启用 SQL 见解(预览版),还可以观看此“公开的数据”剧集。

创建 Log Analytics 工作区

SQL 见解将其数据存储在一个或多个 Log Analytics 工作区中。 在启用 SQL 见解前,需要创建一个工作区或选择一个现有工作区。 单个工作区可使用多个监视配置文件,但工作区和配置文件必须位于同一 Azure 区域。 若要启用并访问 SQL 见解中的功能,必须在工作区中拥有 Log Analytics 参与者角色

创建监视用户

需要在要监视的 SQL 部署中设置一个用户(登录名)。 针对不同类型的 SQL 部署,请按照以下过程进行操作。

下面的说明按照 SQL 类型介绍了你可以监视的过程。 若要使用此脚本一次对多个 SQL 资源完成此任务,请参阅以下自述文件示例脚本

Azure SQL 数据库

注意

SQL 见解(预览版)不支持以下 Azure SQL 数据库方案:

  • 弹性池:无法收集弹性池的指标。 无法收集弹性池中数据库的指标。
  • 低服务层级:无法收集基本、S0 和 S1 服务目标数据库的指标

SQL 见解(预览版)对以下 Azure SQL 数据库方案的支持有限:

  • 无服务器层级:可以收集使用无服务器计算层级的数据库的指标。 但是,指标收集过程会重置自动暂停延迟计时器,导致数据库无法进入“已自动暂停”状态。

在 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

连接到 Azure 虚拟机上的 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 Marketplace 映像。 有关详细信息,请参阅 Azure 中对 Linux 和开源技术的支持
  • 建议的最小 Azure 虚拟机大小:Standard_B2s(2 个 CPU、4 GiB 内存)
  • 部署在 Azure Monitor 代理支持的任何 Azure 区域,并满足所有 Azure Monitor 代理先决条件

注意

Standard_B2s(2 个 CPU、4 GiB 内存)虚拟机大小最多支持 100 个连接字符串。 一个虚拟机不得分配超过 100 个连接。

根据你的 SQL 资源的网络设置,可能需要将你的虚拟机放置在你的 SQL 资源所在的虚拟网络中,这样虚拟机便可以进行网络连接以收集监视数据。

配置网络设置

每种类型的 SQL 都会提供监视虚拟机安全访问 SQL 的方法。 以下各部分介绍基于 SQL 部署类型的各选项。

Azure SQL 数据库

SQL 见解支持通过其公共终结点以及虚拟网络访问 Azure SQL 数据库。

若要通过公共终结点访问,请在“防火墙设置”页和 IP 防火墙设置部分下添加一条规则。 若要指定通过虚拟网络访问,可以设置虚拟网络防火墙规则,并设置 Azure Monitor 代理所需的服务标记本文介绍这两种类型的防火墙规则之间的差异。

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 中,请参阅通过 Internet 连接到 SQL Server

在 Azure Key Vault 中存储监视密码

作为安全方面的最佳做法,我们强烈建议你将 SQL 用户(登录名)密码存储在 Key Vault 中,而不是将它们直接输入到监视配置文件连接字符串中。

设置用于 SQL 监视的配置文件时,需要对要使用的密钥保管库资源具有以下权限之一:

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

如果你拥有这些权限,则在创建使用指定 Key Vault 的 SQL Monitoring 配置文件时,将自动创建一个新的 Key Vault 访问策略。

重要

你需要确保网络和安全配置允许监视 VM 访问 Key Vault。 有关详细信息,请参阅访问防火墙保护下的 Azure Key Vault配置 Azure Key Vault 网络设置

创建 SQL 监视配置文件

打开 SQL 见解(预览版):在 Azure 门户中“Azure Monitor”菜单的“见解”部分选择“SQL (预览版)”。 选择“新建配置文件”。

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

该配置文件将存储要从 SQL 系统收集的信息。 它对以下各项有特定设置:

  • Azure SQL 数据库
  • Azure SQL 托管实例
  • 虚拟机上运行的 SQL Server

例如,可以创建两个配置文件,一个名为“SQL 生产”,一个名为“SQL 暂存”,对于数据收集频率、要收集的数据以及数据发送到哪个工作区,它们有不同的设置 。

此配置文件作为数据收集规则资源存储在所选订阅和资源组中。 每个配置文件都需要以下各项:

  • 名称: 创建后不能编辑。
  • 位置。 指的是 Azure 区域。
  • 用于存储监视数据的 Log Analytics 工作区。
  • 关于要收集的 SQL 监视数据的频率和类型的集合设置。

注意

配置文件的位置应与计划向其发送监视数据的 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 见解(预览版)在登录 SQL 收集监视数据时应使用的登录名。 如果要使用 Key Vault 来存储监视用户的密码,请提供 Key Vault URI 和包含密码的机密名称。

连接字符串根据 SQL 资源类型而异:

Azure SQL 数据库

网络路径上可能存在的任何防火墙或网络安全组 (NSG) 必须允许从监视计算机到数据库使用的 IP 地址和端口的 TCP 连接。 有关 IP 地址和端口的详细信息,请参阅 Azure SQL 数据库连接体系结构

在窗体中输入连接字符串:

"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 见解(预览版)疑难解答来查明问题。

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 见解(预览版)的“管理配置文件”选项卡来执行此操作。保存更新后,将在大约 5 分钟内应用更改。

后续步骤