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

排查 SQL 见解(预览版)问题

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

若要排查 SQL 见解(预览版)中的数据收集问题,请在“管理配置文件”选项卡上检查监视计算机的状态。状态包括:

  • 正在收集
  • 未收集
  • 收集时出现错误

选择状态可查看有助于解决问题的日志和更多详细信息。

屏幕截图,显示了监视虚拟机状态。

状态:未收集

如果在过去 10 分钟内 SQL 的“InsightsMetrics”中没有任何数据,则监视虚拟机的状态为“未收集”。

注意

请确保你在尝试从受支持的 SQL 版本收集数据。 例如,尝试使用有效的配置文件和连接字符串从不受支持的 Azure SQL 数据库版本收集数据会导致“未收集”状态。

SQL 见解(预览版)使用以下查询来检索此信息:

InsightsMetrics 
    | extend Tags = todynamic(Tags) 
    | extend SqlInstance = tostring(Tags.sql_instance) 
    | where TimeGenerated > ago(10m) and isnotempty(SqlInstance) and Namespace == 'sqlserver_server_properties' and Name == 'uptime' 

检查 Telegraf 中是否有任何日志可帮助确定问题的根本原因。 如果有日志条目,则可以选择“未收集”并查看日志和故障排除信息以排查常见问题。

如果没有日志条目,则查看监视虚拟机上的日志来排查两个虚拟机扩展安装的以下服务的问题:

  • Microsoft.Azure.Monitor.AzureMonitorLinuxAgent
    • 服务:mdsd
  • Microsoft.Azure.Monitor.Workloads.Workload.WLILinuxExtension
    • 服务:wli
    • 服务:telegraf
    • 服务:fluent-bit
    • 检查安装失败的扩展日志:/var/log/azure/Microsoft.Azure.Monitor.Workloads.Workload.WLILinuxExtension/wlilogs.log

wli 服务日志

服务日志:/var/log/wli.log

查看最近的日志:tail -n 100 -f /var/log/wli.log

如果看到以下错误日志,则表明 mdsd 服务出现问题:2021-01-27T06:09:28Z [Error] Failed to get config data. Error message: dial unix /var/run/mdsd/default_fluent.socket: connect: no such file or directory

Telegraf 服务日志

服务日志:/var/log/telegraf/telegraf.log

查看最近的日志:tail -n 100 -f /var/log/ms-telegraf/telegraf.log

查看最近的错误和警告日志:tail -n 1000 /var/log/ms-telegraf/telegraf.log | grep "E\!\|W!"

Telegraf 使用的配置由 wli 服务生成,置于 /etc/ms-telegraf/telegraf.d/wli

如果生成了错误的配置,ms-telegraf 服务可能无法启动。 请使用此命令检查 ms-telegraf 服务是否正在运行:service ms-telegraf status

若要查看 telegraf 服务提供的错误消息,请使用以下命令手动运行此服务:

/usr/bin/ms-telegraf --config /etc/ms-telegraf/telegraf.conf --config-directory /etc/ms-telegraf/telegraf.d/wli --test 

mdsd 服务日志

查看适用于 Azure Monitor 代理的先决条件

在 Azure Monitoring 代理 v1.12 之前,mdsd 服务日志位于:

  • /var/log/mdsd.err
  • /var/log/mdsd.warn
  • /var/log/mdsd.info

从 v1.12 开始,服务日志位于:

  • /var/opt/microsoft/azuremonitoragent/log/
  • /etc/opt/microsoft/azuremonitoragent/

查看最近的错误:tail -n 100 -f /var/log/mdsd.err

如果需要联系支持部门,请收集以下信息:

  • /var/log/azure/Microsoft.Azure.Monitor.AzureMonitorLinuxAgent/ 中的日志
  • /var/log/waagent.log 中的日志
  • 登录 /var/log/mdsd* 或,登录 /var/opt/microsoft/azuremonitoragent/log//etc/opt/microsoft/azuremonitoragent/
  • /etc/mdsd.d/ 中的文件
  • File /etc/default/mdsd

监视虚拟机配置无效

处于“未收集”状态的一个原因是监视虚拟机的配置无效。 下面是最简单的配置形式:

{
    "version": 1,
    "secrets": {
        "telegrafPassword": {
            "keyvault": "https://mykeyvault.vault.azure.net/",
            "name": "sqlPassword"
        }
    },
    "parameters": {
        "sqlAzureConnections": [
            "Server=mysqlserver.database.windows.net;Port=1433;Database=mydatabase;User Id=telegraf;Password=$telegrafPassword;"
        ],
        "sqlVmConnections": [
        ],
        "sqlManagedInstanceConnections": [
        ]
    }
}

此配置指定要在监视虚拟机的配置文件配置中使用的替换令牌。 它还允许引用 Azure 密钥保管库中的机密,因此无需在任何配置中保留机密值(强烈建议这样做)。

在此配置中,数据库连接字符串包括 $telegrafPassword 替换令牌。 SQL Insights 将此令牌替换为从 Key Vault 检索的 SQL 身份验证密码。 Key Vault URI 是在 secrets 下的 telegrafPassword 配置部分中指定的。

机密

机密是令牌,可在运行时从 Azure 密钥保管库检索其值。 机密是由包括密钥保管库 URI 和机密名称的值对定义的。 此定义使 SQL Insights 能够在运行时获取机密的值,并在下游配置中使用它。

可以按需定义多个机密,包括存储在多个密钥保管库中的机密。

   "secrets": {
        "<secret-token-name-1>": {
            "keyvault": "<key-vault-uri>",
            "name": "<key-vault-secret-name>"
        },
        "<secret-token-name-2>": {
            "keyvault": "<key-vault-uri-2>",
            "name": "<key-vault-secret-name-2>"
        }
    }

用于访问密钥保管库的权限会提供给监视虚拟机上的托管标识。 必须为托管标识授予针对监视配置文件配置中引用的所有 Key Vault 机密的 Get 权限。 可以通过 Azure 门户、PowerShell、Azure CLI 或 Azure 资源管理器模板来实现。

参数

参数是可以在配置文件配置中通过 JSON 模板引用的令牌。 参数具有名称和值。 值可以是任意 JSON 类型,包括对象和数组。 参数是在配置文件配置中使用 .Parameters.<name> 约定按其名称引用的。

参数可以使用相同的约定引用密钥保管库中的机密。 例如,sqlAzureConnections 使用约定 $telegrafPassword 引用机密 telegrafPassword

在运行时,会解析所有参数和机密并将其与配置文件配置合并,以构造要在监视虚拟机上使用的实际配置。

注意

sqlAzureConnectionssqlVmConnectionssqlManagedInstanceConnections 的参数名称在配置中都是必需的,即使你没有为其中一些参数名称提供连接字符串。

状态:收集时出现错误

如果至少有一条最近的 InsightsMetrics 日志,但 Operation 表中也存在错误,则监视虚拟机的状态将为“收集时出现错误”。

SQL Insights 使用以下查询来检索此信息:

InsightsMetrics 
    | extend Tags = todynamic(Tags) 
    | extend SqlInstance = tostring(Tags.sql_instance) 
    | where TimeGenerated > ago(240m) and isnotempty(SqlInstance) and Namespace == 'sqlserver_server_properties' and Name == 'uptime' 
WorkloadDiagnosticLogs
| summarize Errors = countif(Status == 'Error')

注意

如果在 WorkloadDiagnosticLogs 中看不到任何数据,则可能需要更新监视配置文件。 在 Azure 门户的 SQL Insights 中,选择“管理配置文件”>“编辑配置文件”>“更新监视配置文件” 。

一般情况下,日志视图中提供了故障排除提示:

Azure 门户中用于 SQL 日志故障排除的 Azure Monitor 页面的屏幕截图。

已知问题

在 SQL Insights 预览期间,可能会遇到以下已知错误。

  • 连接到服务器或数据库时出现“登录失败”错误

    在保存在监视 VM 配置中或 Key Vault 中的 SQL 身份验证密码中使用某些特殊字符可能会阻止监视 VM 连接到 SQL 服务器或数据库。 这组字符包括圆括号、方括号和大括号、美元符号、正斜杠和反斜杠,以及点 ([ { ( ) } ] $ \ / .)。

  • 数据库连接字符串属性中的空格可能替换为特殊字符,从而导致数据库连接失败。 例如,如果 User Id 属性中的空格替换为特殊字符,则连接将失败,并显示“用户登录失败”错误。 若要解决此问题,请编辑监视配置文件配置,并删除出现在空格位置的每个特殊字符。 有的特殊字符看起来可能很难与空格分辨,因此需要删除每个空格字符,然后再次键入空格并保存配置。

  • 如果监视虚拟机的 OS 计算机名不同于监视虚拟机名称,则数据收集和可视化可能无法正常工作。

  • 即使 WLI 扩展是最新的,系统也可能会错误地显示消息:“此计算机上的 WLI 扩展低于推荐版本 [...]”。

  • 如果安装了 SQL Server 的虚拟机的 OS 计算机名与 SQL Server 元数据中的服务器名称不匹配,则数据收集和可视化可能无法正常工作。 有关详细信息,请参阅重命名托管 SQL Server 独立实例的计算机

最佳做法

  • 确保从监视 VM 访问 Key Vault。 如果使用 Key Vault 存储 SQL 身份验证密码(强烈推荐),则需要确保网络和安全配置允许监视 VM 访问 Key Vault。 有关详细信息,请参阅访问防火墙保护下的 Azure Key Vault配置 Azure Key Vault 网络设置。 若要验证监视 VM 能否访问 Key Vault,可以从连接到 VM 的 SSH 会话执行以下命令。 你应该能够成功检索访问令牌和机密。 将 [YOUR-KEY-VAULT-URL][YOUR-KEY-VAULT-SECRET][YOUR-KEY-VAULT-ACCESS-TOKEN] 替换为实际值。

    # Get an access token for accessing Key Vault secrets
    curl 'http://[YOUR-KEY-VAULT-URL]/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true
    
    # Get Key Vault secret
    curl 'https://[YOUR-KEY-VAULT-URL]/secrets/[YOUR-KEY-VAULT-SECRET]?api-version=2016-10-01' -H "Authorization: Bearer [YOUR-KEY-VAULT-ACCESS-TOKEN]"
    
  • 更新监视 VM 上的软件。 强烈建议定期更新监视 VM 上的操作系统和扩展。 如果扩展支持自动升级,请启用该选项。

  • 保存以前的配置。 如果要更改监视配置文件或监视 VM 配置,建议先保存配置数据的工作副本。 在 Azure 门户的 SQL Insights 页面中,选择“管理配置文件”>“编辑配置文件”,然后将“当前监视配置文件配置”中的文本复制到文件 。 同样,针对监视 VM 选择“管理配置文件”>“配置”,然后将“当前监视配置”中的文本复制到文件 。 如果在配置更改后发生数据收集错误,可以使用文本差异工具将新的配置与已知的工作配置进行比较,帮助查找可能影响收集的任何更改。

后续步骤