news 2026/9/15 19:57:38

Nightingale 集成 SQL Server 监控:Categraf 采集配置、权限授予与告警验证实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Nightingale 集成 SQL Server 监控:Categraf 采集配置、权限授予与告警验证实战

Nightingale 集成 SQL Server 监控:Categraf 采集配置、权限授予与告警验证实战

【免费下载链接】nightingaleNightingale is to monitoring and alerting what Grafana is to visualization.项目地址: https://gitcode.com/GitHub_Trending/ni/nightingale

Nightingale 通过内置的 SQL Server 集成(integration)提供了对本地部署 SQL Server 的监控能力,采集端基于 Categraf 的 sqlserver input 实现,其查询逻辑源自 Telegraf SQL Server input,利用 DMV 与性能计数器获取实例、数据库、IO、内存等维度的指标。本篇指南以 integrations/SQLServer/markdown/README.md 为主体,结合仓库内真实配置文件、告警规则与监控面板,完整讲解从只读监控账号创建、Categraf 配置到数据验证的落地流程,并深入解析database_typeinclude_query/exclude_queryhealth_metric等关键参数,以及 SQL Server 2022 与 Always On 环境下的特殊处理。读完本文,你将能够在自己的 SQL Server 实例上复现一套可观测、可告警的完整监控链路。

采集原理:基于 DMV 与性能计数器的 Categraf input

SQL Server 集成并非通过插件式 API 或第三方 agent 实现,而是直接复用 Categraf 的 sqlserver input 插件。该插件的采集逻辑基于 Telegraf SQL Server input,通过连接 SQL Server 实例后执行一系列动态管理视图(DMV)查询与读取性能计数器来获取监控数据。

根据仓库中 integrations/SQLServer/collect/sqlserver/sqlserver.toml 的注释说明,以database_type = "SQLServer"为例,默认启用以下查询组:

  • SQLServerPerformanceCounters:性能计数器,如Percent Log UsedPage life expectancyNumber of Deadlocks/secProcesses blockedMemory Grants Pending
  • SQLServerWaitStatsCategorized:分类汇总的等待统计
  • SQLServerDatabaseIO:数据库级 IO 延迟与读写计数
  • SQLServerProperties:实例属性,如数据库状态(SUSPECT/OFFLINE 计数)
  • SQLServerMemoryClerks:内存分配情况
  • SQLServerSchedulers:调度器状态
  • SQLServerRequests:当前请求
  • SQLServerVolumeSpace:数据卷剩余空间
  • SQLServerCpu:CPU 使用
  • SQLServerRecentBackups:最近备份状态

另有SQLServerAvailabilityReplicaStatesSQLServerDatabaseReplicaStates两个查询组默认关闭,仅在需要监控 Always On 可用性组时按需启用(详见后文"Always On 环境的处理")。README 说明该方案已使用SQL Server 2022 与 Categraf 完成真实采集验证,因此在 2022 及相近版本上可以直接按本文步骤落地。

第一步:创建只读监控账号

SQL Server 集成需要一个具备只读权限的登录账号,用于执行上述 DMV 查询。请master数据库中执行以下 SQL:

USE [master]; GO CREATE LOGIN [categraf] WITH PASSWORD = N'<strong-password>'; GO GRANT VIEW SERVER STATE TO [categraf]; GRANT VIEW ANY DEFINITION TO [categraf]; GO

各语句的作用如下:

  • CREATE LOGIN:创建名为categraf的服务器级登录账号,密码请替换为强密码;
  • GRANT VIEW SERVER STATE:允许账号查看服务器状态,这是执行 DMV 查询的基础权限;
  • GRANT VIEW ANY DEFINITION:允许账号查看服务器上任意对象的元数据定义,支撑SQLServerProperties等查询。

SQL Server 2022 及以上版本还需要额外为性能 DMV 授予VIEW SERVER PERFORMANCE STATE权限,否则相关性能查询会因权限不足而失败:

GRANT VIEW SERVER PERFORMANCE STATE TO [categraf]; GO

安全注意事项:不要在文档或仓库中保存真实密码;示例中的<strong-password>仅为占位符。若企业安全策略要求更细粒度的授权,可结合实际启用的查询组进一步收敛权限(例如去掉VIEW ANY DEFINITION),但需以采集验证通过为前提。

第二步:Categraf 配置详解

SQL Server 监控的 Categraf 配置文件为conf/input.sqlserver/sqlserver.toml,仓库内提供了完整模板:integrations/SQLServer/collect/sqlserver/sqlserver.toml。核心配置如下:

interval = 15 [[instances]] servers = [ "Server=10.19.1.1;Port=1433;User Id=categraf;Password=<strong-password>;app name=categraf;log=1;" ] auth_method = "connection_string" database_type = "SQLServer" include_query = [] exclude_query = [ "SQLServerAvailabilityReplicaStates", "SQLServerDatabaseReplicaStates" ] health_metric = true

下面结合模板注释逐项说明参数含义与取值。

interval

全局采集间隔,单位为秒,示例为15,即每 15 秒执行一轮查询。采集间隔与后文告警规则的评估周期、sqlserver_up的时效性直接相关,建议保持 15~30 秒量级。

servers:连接串列表

servers是一个连接串数组,每个元素对应一个被监控的 SQL Server 实例,格式为 ADO.NET 风格连接字符串,连接库为 go-mssqldb。所有参数均可选,默认 host 为localhost、默认端口1433(TCP):

servers = ["Server=server.xxx.com;Port=1433;User Id=monitor;Password=xxxxxx;app name=categraf;log=1;"]
  • Server:主机名或 IP;Port:端口,默认 1433;
  • User Id/Password:上一步创建的categraf账号;
  • app name:应用程序名,建议设为categraf,便于在 SQL Server 侧识别连接来源;
  • log=1:启用连接日志,便于排查;
  • TLS 连接可通过encrypt=true;certificate=<cert>;hostNameInCertificate=<SqlServer host fqdn>追加配置。

auth_method:认证方式

auth_method = "connection_string"

合法取值:"connection_string""AAD"。本地部署的 SQL Server 使用connection_string(账号密码写在连接串中);AAD用于 Azure Active Directory 认证场景。

database_type:查询集选择器

database_type = "SQLServer"

database_type决定启用哪一组预设查询。可能取值为:"SQLServer""AzureSQLDB""AzureSQLManagedInstance""AzureSQLPool"。指定该参数后会取代旧版的azuredb = true/falsequery_version = 2机制(旧机制在模板中已被标记为 deprecated,仅兼容旧版查询风味时使用)。若需要同时监控多种数据库类型,应在配置文件中重复该 plugin 小节,每个database_type对应一组servers

include_query / exclude_query:查询集裁剪

include_query = [] exclude_query = [ "SQLServerAvailabilityReplicaStates", "SQLServerDatabaseReplicaStates" ]
  • include_query:显式包含的查询列表;为空表示使用database_type对应的全部默认查询;
  • exclude_query:显式排除的查询列表,优先级高于默认查询集。

默认启用的查询组已在前文列出。两个副本状态查询(SQLServerAvailabilityReplicaStatesSQLServerDatabaseReplicaStates)默认被排除,如果实例配置了 Always On 且需要监控副本状态,可从exclude_query中删除这两项;未配置 Always On 时排除它们,可以避免无意义的权限报错或空结果问题。

health_metric:健康指标开关

health_metric = true

默认关闭(false)。置为true时,会额外产生一条名为sqlserver_telegraf_health的指标,记录每个实例尝试执行的查询数与成功执行的查询数,用于帮助识别连接或查询层面的问题——例如实例可达但某类查询持续失败时,通过该指标可以快速定位。同时,采集插件本身会输出sqlserver_up指标标识实例是否成功采集。

第三步:验证采集结果

配置完成后,使用 Categraf 的测试模式验证单次采集是否正常:

./categraf --test --inputs sqlserver

验证通过的标准:

  1. --test输出中包含预期的 sqlserver 指标(无查询报错);
  2. 在时序库中确认sqlserver_up为 1
  3. 指标带有模板使用的sql_instance标签,用于区分多个实例。

需要特别强调的是:只验证 TCP 1433 端口可连接并不能证明采集成功。连接可达只是前置条件,DMV 权限不足、查询语法与版本不匹配、Always On 查询返回空结果等问题只有在实际执行采集时才会暴露,因此必须以--test输出与sqlserver_up的数值为准。

第四步:配套告警规则与监控面板

集成目录下除了采集配置,还提供了可直接导入 Nightingale 的告警规则与监控面板,形成"采集 → 可视化 → 告警"的完整闭环。

告警规则

integrations/SQLServer/alerts/sqlserver_by_categraf.json 内置了 12 条基于 PromQL 的告警规则(默认disabled: 1,需按需启用),覆盖实例可用性与性能风险:

告警名称PromQL 要点级别
SQL Server 实例不可达sqlserver_up == 0严重
SQL Server 存在 SUSPECT 状态的数据库sqlserver_server_properties_db_suspect > 0严重
SQL Server 存在 OFFLINE 状态的数据库sqlserver_server_properties_db_offline > 0警告
SQL Server 数据卷剩余空间不足sqlserver_volume_space_available_space_bytes / total * 100 < 10严重
SQL Server 事务日志使用率过高sqlserver_performance_value{counter="Percent Log Used", ...} > 85严重
SQL Server 页面生命周期过短sqlserver_performance_value{counter="Page life expectancy", ...} < 300警告
SQL Server 存在等待内存授予的查询sqlserver_performance_value{counter="Memory Grants Pending"} > 0警告
SQL Server 阻塞进程数过高sqlserver_performance_value{counter="Processes blocked"} > 5警告
SQL Server 发生死锁increase(sqlserver_performance_value{counter="Number of Deadlocks/sec"}[10m]) > 0警告
SQL Server 数据文件读延迟过高rate(sqlserver_database_io_read_latency_ms[5m]) / rate(reads[5m]) > 50警告
SQL Server 数据文件写延迟过高rate(sqlserver_database_io_write_latency_ms[5m]) / rate(writes[5m]) > 50警告

值得关注的是,每条规则的annotations.action都内置了可执行的排障 SOP(如查看sys.databases状态、log_reuse_wait_desc判断日志膨胀原因、sys.dm_exec_query_memory_grants定位内存授予等待等),告警触发后可直接按步骤处理,这对值班排障非常实用。对应规则的英文文案与排障步骤翻译可在 integrations/SQLServer/i18n/en_US.json 中查看。

监控面板

integrations/SQLServer/dashboards/sqlserver.json 提供了名为SQLServer的监控面板,包含以下核心视图:

  • Server resource overview:服务器资源总览(CPU、内存、磁盘等)
  • Summary:实例级概要
  • 当前数据库连接(Current Database Connections):连接数趋势
  • DB Log growth since last restart:重启以来的日志增长
  • Number of Deadlocks/sec:死锁速率
  • 硬盘空闲空间(Disk Free Space):卷剩余空间
  • CPU:CPU 使用
  • Total wait time of I/O stall / Database I/O wait of stall:IO 等待时间

面板使用prometheus数据源(datasourceValue: ${datasource}),并提供datasourceinstance两个变量,导入后按实际环境绑定数据源即可使用。

集成资源在 Nightingale 中的加载方式

上述采集模板、告警规则、面板与 README 均位于仓库的 integrations/SQLServer 目录下,其目录结构(collect/alerts/dashboards/i18n/markdown/)遵循 Nightingale 内置集成资源的组织约定。从源码结构看(参见 center/integration/init.go),Nightingale center 在启动时会对integrations目录做初始化扫描,加载各组件的内置 payload(告警规则、采集模板)与 README 文档,i18n 词条则按语言(如en_US)稀疏存储并在读取时回退到默认语言,Readmes中记录的是README.<lang>.md的内容——这也是README.md(中文)与README.en_US.md(英文)并存的机制来源。因此这套 SQL Server 集成可以直接在 Nightingale 平台上完成从采集模板下发、面板导入到告警规则启用的全流程。

常见问题与注意事项

  1. SQL Server 2022 上性能查询失败:多半是缺少VIEW SERVER PERFORMANCE STATE授权,按第一步补齐即可;
  2. 副本状态查询报错或返回空:未配置 Always On 时,建议保留exclude_query中的两项排除,避免无效查询;
  3. sqlserver_up不为 1:使用./categraf --test --inputs sqlserver查看具体查询错误,优先排查账号权限与连接串(端口、app namelog=1);
  4. 启用了health_metric但未看到sqlserver_telegraf_health:确认该指标是否被采集侧过滤,或检查health_metric = true是否位于正确的[[instances]]小节内;
  5. 多实例监控:在servers数组中增加连接串即可,注意利用sql_instance标签区分实例。

按照本指南完成账号授权、Categraf 配置与验证后,即可在 Nightingale 中看到 SQL Server 的性能指标,并通过内置告警规则第一时间感知实例不可达、日志膨胀、IO 延迟等问题,形成一套完整的 SQL Server 可观测性方案。

【免费下载链接】nightingaleNightingale is to monitoring and alerting what Grafana is to visualization.项目地址: https://gitcode.com/GitHub_Trending/ni/nightingale

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 19:56:29

STM32精准测NTC温度:分段B值算法与工程实践

简介&#xff1a;本资源是面向STM32嵌入式开发者的NTC热敏电阻温度测量专用库NTC_Thermistor-2.0.2&#xff0c;聚焦工业测温、IoT终端及低功耗设备中的高精度温度采集需求&#xff0c;适用于具备C语言基础与STM32 HAL/Standard Peripheral库使用经验的中级开发者。压缩包共16个…

作者头像 李华
网站建设 2026/9/15 19:56:22

发票钓鱼邮件攻击全解析:从诱饵设计到企业防护

中午刚过&#xff0c;财务小林的邮箱里跳出一封标题为“[请确认] 贵司欠款发票&#xff0c;金额 48650.00 元”的邮件。发件人显示名是合作了三年的供应商老熟人“华信科技-张姐”&#xff0c;正文里还带了一句“这是上季度最后一批开票&#xff0c;麻烦今天下班前确认&#xf…

作者头像 李华
网站建设 2026/9/15 19:54:31

DSP28335上SVPWM实现:扇区切换时序与ePWM寄存器协同

简介&#xff1a;本资源是一份基于TI TMS320F28335 DSP实现空间电压矢量脉宽调制&#xff08;SVPWM&#xff09;电机控制的完整工程代码包&#xff0c;面向嵌入式电机控制初学者与电力电子方向开发者&#xff0c;解决SVPWM算法在浮点DSP平台上的落地难点&#xff0c;涵盖从底层…

作者头像 李华
网站建设 2026/9/15 19:54:24

deck.gl 与 Leaflet 叠加可视化实战:基于纯 JS 示例的完整指南

deck.gl 与 Leaflet 叠加可视化实战&#xff1a;基于纯 JS 示例的完整指南 【免费下载链接】deck.gl WebGL2 powered visualization framework 项目地址: https://gitcode.com/GitHub_Trending/de/deck.gl ## 导读 本指南围绕仓库中 examples/get-started/pure-js/leafle…

作者头像 李华