零代码监控Azure SQL:Nightingale查询性能与存储全攻略

零代码监控Azure SQL:Nightingale查询性能与存储全攻略

【免费下载链接】nightingale Nightingale是一款开源的企业级监控系统,用于收集、展示及告警各种IT基础设施指标,如服务器性能、网络流量等,助力运维人员及时了解和处理问题。 【免费下载链接】nightingale 项目地址: https://gitcode.com/GitHub_Trending/ni/nightingale

痛点直击:Azure SQL监控的三大挑战

你是否正面临这些困境?Azure SQL数据库性能突降却无法定位瓶颈,存储容量预警但缺乏历史趋势分析,自建监控脚本维护成本高昂。本文将详解如何利用Nightingale开源监控系统,通过无代码配置与自定义脚本两种方案,实现Azure SQL查询性能与存储容量的全方位监控,配套完整告警规则与可视化大盘。

读完本文你将掌握:

  • 5分钟完成Azure SQL基础监控的配置方法
  • 10个关键性能指标的采集与解读
  • 3种自定义查询性能监控方案
  • 存储容量趋势预测模型的搭建
  • 开箱即用的告警规则与可视化模板

架构解析:Nightingale监控Azure SQL的实现原理

Nightingale通过数据源抽象层支持多类型数据库监控,其核心架构包含三大组件:

mermaid

关键技术路径

  1. 数据采集层:通过Exec插件执行TSQL查询或调用Azure Monitor API
  2. 数据处理层:PromQL函数计算性能指标的衍生指标
  3. 存储层:采用Prometheus或ClickHouse存储时序数据
  4. 展示层:自定义仪表盘展示性能与存储指标

环境准备:权限与前置条件

必要权限清单

角色权限说明适用场景
Azure SQL DB Contributor读取数据库元数据基础监控
Monitoring Reader访问Azure Monitor指标性能计数器采集
SQL Security Manager查看登录统计信息连接数监控

网络配置要求

  • 允许Nightingale服务器访问Azure SQL的3342端口
  • 配置Azure SQL防火墙规则,添加Nightingale服务器IP
  • 启用Azure Monitor API访问(如需云指标集成)

方案一:基于SQLServer插件的快速配置

虽然Nightingale官方SQLServer插件已移除Azure相关代码,但可通过修改配置文件恢复Azure SQL支持:

1. 恢复Azure SQL连接支持

# integrations/SQLServer/markdown/README.md
- 这里去掉了Azure相关部分监控,只保留了本地部署sqlserver情况
+ 恢复Azure SQL监控支持,请添加以下配置

2. 配置文件修改

创建etc/input.sqlserver/azure_sql.toml

[[instances]]
address = "yourserver.database.windows.net:1433"
username = "azureuser@yourserver"
password = "yourpassword"
database = "yourdatabase"
parameters = "encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net"

# 启用关键性能指标采集
extra_status_metrics = true
gather_schema_size = true

3. 验证连接

# 测试连接连通性
/opt/nightingale/cmd/cli/cli -test-sqlserver-connection \
  --address yourserver.database.windows.net:1433 \
  --username azureuser@yourserver \
  --password yourpassword

方案二:基于Exec插件的自定义监控

当SQLServer插件无法满足需求时,Exec插件提供更大灵活性,支持执行自定义TSQL脚本:

1. 创建Azure SQL监控脚本

/opt/nightingale/scripts/azure_sql/目录下创建collect_perf.sh

#!/bin/bash
# 采集查询性能指标
sqlcmd -S yourserver.database.windows.net -d yourdatabase \
  -U azureuser@yourserver -P yourpassword \
  -Q "SELECT 
        SUBSTRING(qt.text, (qs.statement_start_offset/2)+1, 
        ((CASE qs.statement_end_offset 
          WHEN -1 THEN DATALENGTH(qt.text) 
          ELSE qs.statement_end_offset 
         END - qs.statement_start_offset)/2)+1) AS query_text,
        qs.total_elapsed_time/1000000 AS total_seconds,
        qs.execution_count,
        qs.total_logical_reads,
        qs.total_logical_writes
      FROM sys.dm_exec_query_stats qs
      CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
      WHERE qs.total_elapsed_time > 1000000
      ORDER BY qs.total_elapsed_time DESC
      OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY" \
  -s "," -h -1 | awk -F ',' '{
    gsub(/ /, "_", $1);
    print "azure_sql_query_perf,query=" $1 " total_seconds=" $2 ",execution_count=" $3 ",logical_reads=" $4 ",logical_writes=" $5
  }'

2. 配置Exec插件

修改etc/input.exec/exec.toml

[[instances]]
commands = [
  "/opt/nightingale/scripts/azure_sql/collect_perf.sh",
  "/opt/nightingale/scripts/azure_sql/collect_storage.sh"
]
data_format = "influx"
timeout = 30
interval_times = 2

3. 脚本输出格式说明

脚本需输出InfluxDB行协议格式数据:

azure_sql_query_perf,query=SELECT_*_FROM_Orders total_seconds=2.5,execution_count=100,logical_reads=500,logical_writes=10
azure_sql_storage,database=Orders size_gb=12.5,growth_rate_mb_per_day=100

核心监控指标详解

查询性能指标

指标名称类型单位说明告警阈值
sqlserver.query.exec_time计数器查询执行时间>5
sqlserver.query.logical_reads计数器逻辑读次数>1000
sqlserver.query.executions计数器次/分钟查询执行频率>60
sqlserver.deadlock.count计数器次/小时死锁数量>0

存储指标

mermaid

关键存储指标计算公式:

  • 预估耗尽时间 = (剩余空间GB) / (日均增长GB)
  • 空间使用率 = (已用空间GB / 总空间GB) * 100%

自定义查询性能监控

使用动态管理视图(DMV)

推荐监控查询性能的核心DMV:

-- 执行时间最长的查询
SELECT TOP 10
  SUBSTRING(qt.text, (qs.statement_start_offset/2)+1,
  ((CASE qs.statement_end_offset
    WHEN -1 THEN DATALENGTH(qt.text)
    ELSE qs.statement_end_offset
   END - qs.statement_start_offset)/2)+1) AS query_text,
  qs.total_elapsed_time/1000000 AS total_seconds,
  qs.execution_count,
  qs.total_logical_reads
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
ORDER BY qs.total_elapsed_time DESC

慢查询追踪配置

通过修改数据库配置启用慢查询日志:

ALTER DATABASE [yourdatabase] SET QUERY_STORE = ON (OPERATION_MODE = READ_WRITE);
ALTER DATABASE [yourdatabase] SET QUERY_STORE (DATA_FLUSH_INTERVAL_SECONDS = 300);

在Nightingale中创建查询来监控慢查询:

topk(10, sqlserver.query.exec_time{database="yourdatabase"})

可视化大盘配置

导入官方模板

Nightingale提供MySQL监控大盘,可修改适配Azure SQL:

# 克隆MySQL仪表盘
cp -r integrations/MySQL/dashboards integrations/AzureSQL/
# 修改指标前缀
sed -i 's/mysql./azure_sql./g' integrations/AzureSQL/dashboards/*.json

自定义仪表盘示例

{
  "title": "Azure SQL性能监控",
  "rows": [
    {
      "panels": [
        {
          "title": "查询执行时间TOP10",
          "type": "table",
          "expr": "topk(10, sqlserver.query.exec_time)",
          "columns": ["query", "exec_time", "executions"]
        }
      ]
    }
  ]
}

存储趋势预测图表

使用PromQL预测存储增长:

predict_linear(sqlserver.database_size{database="yourdb"}[7d], 30*24*3600)

告警规则配置

关键告警规则

groups:
- name: azure_sql_alerts
  rules:
  - alert: HighQueryLatency
    expr: sqlserver.query.exec_time > 5
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "慢查询告警: {{ $labels.query }}"
      description: "查询执行时间超过5秒,执行次数: {{ $value }}"
  
  - alert: StorageLow
    expr: predict_linear(sqlserver.database_size[7d], 30*24*3600) > 90
    labels:
      severity: warning
    annotations:
      summary: "存储容量预警"
      description: "预计30天后空间使用率将超过90%"

告警通知渠道配置

在Nightingale中配置通知渠道:

  1. 进入"告警设置" -> "通知渠道"
  2. 添加Microsoft Teams/Webhook渠道
  3. 配置通知模板包含关键指标

高级功能:Azure Monitor API集成

对于需要更全面云指标的场景,可通过Exec插件调用Azure Monitor API:

#!/bin/bash
# 获取Azure Monitor指标
TOKEN=$(az account get-access-token --resource https://management.azure.com --query accessToken -o tsv)
curl -X GET "https://management.azure.com/subscriptions/$SUB_ID/resourceGroups/$RG/providers/Microsoft.Sql/servers/$SERVER/databases/$DB/providers/microsoft.insights/metrics?api-version=2018-01-01&metricnames=storage_percent&aggregation=Average" \
  -H "Authorization: Bearer $TOKEN" | jq -r '.value[] | "azure_sql.storage_percent value=\(.timeseries[0].data[0].average) \(.timeseries[0].data[0].timeStamp | fromdateiso8601)"'

最佳实践与优化建议

性能优化

  1. 指标采集频率调整

    • 核心指标:1分钟采集一次
    • 存储指标:5分钟采集一次
    • 慢查询:10分钟采集一次
  2. 数据保留策略

    • 原始数据保留7天
    • 聚合数据保留90天
    • 趋势数据保留1年

安全加固

  • 使用Azure Key Vault存储数据库凭证
  • 为监控账号配置最小权限原则
  • 启用TLS加密所有监控数据传输

总结与展望

通过本文介绍的两种方案,你已掌握Nightingale监控Azure SQL的完整流程。无论是快速配置的SQLServer插件方案,还是灵活强大的Exec自定义脚本方案,都能满足不同场景的监控需求。

后续发展方向:

  • 社区正在开发Azure SQL专用插件,预计Q4发布
  • 计划支持Azure AD认证集成
  • 将推出AI辅助的异常查询检测功能

立即行动:

  1. 收藏本文以备后续配置参考
  2. 关注项目更新获取Azure专用插件
  3. 尝试搭建测试环境并导入提供的监控模板

记住,有效的监控不仅能及时发现问题,更能通过趋势分析帮助你提前预防性能瓶颈和存储危机。开始你的Azure SQL监控之旅吧!

【免费下载链接】nightingale Nightingale是一款开源的企业级监控系统,用于收集、展示及告警各种IT基础设施指标,如服务器性能、网络流量等,助力运维人员及时了解和处理问题。 【免费下载链接】nightingale 项目地址: https://gitcode.com/GitHub_Trending/ni/nightingale

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值