
知识是人生的灯塔,只有不断学习,才能照亮前行的道路
📢 大家好,我是 WeiyiGeek,一名深耕安全运维开发(SecOpsDev)领域的技术从业者,致力于探索DevOps与安全的融合(DevSecOps),自动化运维工具开发与实践,企业网络安全防护,欢迎各位道友一起学习交流、一起进步 🚀,若此文对你有帮助,一定记得倒点个关注⭐与小红星❤️,收藏学习不迷路 😋 。
-
0x00 前言简述
-
-
前置知识
-
Categraf SQLServer 指标介绍
-
Categraf SQLServer 自定义指标
-
-
0x01 实践步骤
-
-
1.采集实践
-
2.监控实践
-
3.告警实践
-
0x00 前言简述
上一章《Categraf | 国产化采集器实战:MySQL 指标采集、可视化、异常告警全流程》,作者带领各位读者一起实践了 MySQL 数据库的采集、可视化及告警的全流程,趁热打铁,本章节将继续实现 MsSQL 的采集、可视化及告警全流程。
Microsoft SQL Server 数据库作为 Oracle 、MySQL 之后的第三大关系型数据库,简称 MsSQL / SQLServer,由强大的微软公司主导,通常安装部署在 Windows Server 操作系统至上,在传统的国内外企业中占有不小比重,因此在生产环境中对其进行监控预警也是必不可少的,文中作者将以 SQL Server 2008 R2 数据库为采集对象,通过二开夜莺团队开发的国产采集器 Agent 工具 Categraf,实现自定义采集 MsSQL 数据库基础信息、性能信息、用户信息,以及备份信息等香港指标到 VM (VictoriaMetrics)时序库,然后使用 Grafana 进行可视化展示,最后在夜莺监控平台编写对应的规则进行告警。
这里不卖关子了, 先来给大家看看,学习完本章后可让看友企业中实现 SQL Server 数据库可视化监控与告警通知效果截图。
weiyigeek.top-Grafana MsSQL可视化面板页1图
weiyigeek.top-Grafana MsSQL可视化面板页2图
weiyigeek.top-Grafana MsSQL可视化面板页3图
weiyigeek.top-企微与钉钉告警通知图
温馨提示:若文章代码块中存在乱码或不能复制,请联系作者,也可通过文末的阅读原文链接,推荐加入知识星球中阅读,原文链接:https://articles.zsxq.com/id_w26wf65ep6nx.html
OK,在开始学习之前,我们先来看看 MsSQL 监控告警的前置知识,以及 Categraf sqlserver 插件的缺省的相关指标介绍。
前置知识
温馨提示:授人以鱼不如授人以渔,一篇文章不可能将细节全部包含,各位看友在实践前需要了解基础知识以及准备相应环境,作者安装学习顺序整理如下:
-
OpenEuler 24.04 LTS:
-
Grafana v12.0.2:从零到云:Grafana 12.x 全新可观测性监控平台初识到云原生环境下部署实践
-
Nightingale v8.3.1 :国产化监控新选择!夜莺Nightingale在OpenEuler上的极简部署指南
-
VictoriaMetrics v1.129.1:
-
Categraf v0.4.22:Categraf | 国产化ALL-IN-ONE采集工具:初识部署与Linux监控夜莺可视化实战
温馨提示:下面实践中作者采用了自行修改源代码后的 categraf 采集工具,以采集更多的 SQL Server 数据库相关指标,当然你也采用官方提供的二进制包部署实践不会影响实践,采用夜莺监控平台自带的监控面板,若要使用作者设计的 Grafana 看板模板,则需要修改 categraf 源代码编译后使用,本文实践的相关配置、监控面板、预警规则都放在作者网盘中了,各位看友请在文末或者作者知识星球原文中获取下载地址。
weiyigeek.top-MSSQL监控告警工具配置图
Categraf SQLServer 指标介绍
Categraf 是一款 All-in-One 的数据采集器,支持指标、日志采集;支持物理机、虚拟机、交换机、容器、K8s、多种中间件/数据库的数据采集,支持混合云架构、云原生架构、多云架构。同时,Categraf 期望不止提供采集能力,还附带提供仪表盘和告警规则,力求开箱即用。
Categraf 采集器中 SQLServer 插件 (源码地址: https://github.com/flashcatcloud/categraf/tree/main/inputs/mysql ),其连接 MsSQL 数据库依托于 Github 中 denisenkom 提供的 go-mssqldb (https://github.com/denisenkom/go-mssqldb) 库,其内置采集的指标包括数据库状态、性能、抓取、IO、内存和备份等,其参考了 telegraf/sqlserver (https://github.com/influxdata/telegraf/tree/master/plugins/inputs/sqlserver) ,其只是去掉 Azure 相关部分监控,只保留了本地部署的 sqlserver 一些指标,作者简单梳理了其内置采集的指标,如下所示:
go
# 数据库状态指标 (建议启用)
sqlserver_up
# sqlServerPerformanceCounters 常量定义:数据库性能指标(建议启用)
sqlserver_performance_value
# 数据库抓取指标
sqlserver_scrape_use_seconds
# 数据库系统空闲时间百分百指标(作者已用自定义 sqlserver_syscpu_.* 替换,作者未启用)
sqlserver_cpu_system_idle_cpu
sqlserver_cpu_sqlserver_process_cpu
sqlserver_cpu_other_process_cpu
# sqlServerDatabaseIO 常量定义: 数据库IO指标(建议启用)
sqlserver_database_io_reads
sqlserver_database_io_writes
# 数据库IO延迟指标
sqlserver_database_io_reads_latency_ms
sqlserver_database_io_write_latency_ms
# 数据库IO字节
sqlserver_database_io_read_bytes
sqlserver_database_io_write_bytes
# sqlServerMemoryClerks:数据库内存指标(作者已用自定义 sqlserver_sysmemory_.* 进行替代,作者未启用)
sqlserver_memory_clerks_size_kb
# sqlServerRecentBackups 常量定义:数据库备份指标(按需求启用,作者已启用)
sqlserver_recentbackup_database_id
sqlserver_recentbackup_full_backup_size_bytes
sqlserver_recentbackup_last_full_backup_time
# sqlServerRequests 常量定义:数据库请求相关指标(占用指标,不建议采集,作者未启用)
sqlserver_requests_writes
sqlserver_requests_request_id
sqlserver_requests_session_id
sqlserver_requests_cpu_time_ms
sqlserver_requests_wait_time_ms
sqlserver_requests_total_elapsed_time_ms
sqlserver_requests_logical_reads
sqlserver_requests_open_transaction
sqlserver_requests_percent_complete
sqlserver_requests_granted_query_memory_pages
# sqlServerSchedulers 常量定义:数据库任务相关指标(按需求启用,作者未启用)
sqlserver_schedulers_is_online
sqlserver_schedulers_is_idle
sqlserver_schedulers_load_factor
sqlserver_schedulers_yield_count
sqlserver_schedulers_work_queue_count
sqlserver_schedulers_active_workers_count
sqlserver_schedulers_current_tasks_count
sqlserver_schedulers_current_workers_count
sqlserver_schedulers_context_switches_count
sqlserver_schedulers_runnable_tasks_count
sqlserver_schedulers_pending_disk_io_count
sqlserver_schedulers_preemptive_switches_count
# sqlServerWaitStatsCategorized 常量定义: 数据库线程等待信息指标(按需求启用, 作者已启用)
sqlserver_waitstats_wait_time_ms
sqlserver_waitstats_max_wait_time_ms
sqlserver_waitstats_resource_wait_ms
sqlserver_waitstats_signal_wait_time_ms
sqlserver_waitstats_waiting_tasks_count
# sqlServerProperties 常量定义:数据库属性指标(作者已用自定义 sqlserver_sysinfo_.* 替换)
{__name__=~"sqlserver_server_properties.*"}
# sqlServerDatabaseReplicaStates 常量定义:数据库复制状态指标 (我这里没有主从环境,所以不展示,请自行测试)
# sqlServerAvailabilityReplicaStates 常量定义:数据库可用性状态指标 (我这里没有主从环境,所以不展示,请自行测试)
{__name__=~"sqlserver_hadr_dbreplica_states.*"}
# sqlServerVolumeSpace 常量定义:数据库卷空间指标,由于其语句不兼容 SQL Server 2008,所以不展示,请自行测试)
{__name__=~"sqlserver_volume_space.*"}
经过作者在 SQL Server 2008 R2 中测试后发现其采集的指标并不全面,并且在夜莺自带的模板中展示也存在缺失,比如:数据库基础信息指标、性能指标等,如下图所示:
weiyigeek.top-夜莺缺省MsSQL监控面板图
因此作者只有对其进行二次开发,使其能够采集到更多的 MsSQL 数据库的相关指标,结合作者当前企业内部监控体系,作者抽取了自行设计了基于 VictoriaMetrics 时序库 Grafana MsSQL 数据 指标可视化面板,以及编写的 MsSQL 数据库告警规则,利用夜莺监控平台进行告警,最终实现 MsSQL 的全方位监控预警。
Categraf SQLServer 自定义指标
作者在对 Categraf 的 MsSQL 插件进行二次开发时,对原有指标进行了替换和新增,以下是作者自定义的几个重要指标,主要用于采集数据的基础信息、CPU、内存,以及数据库用户相关数据等信息。
sqlServerSysInfo 相关指标查询:采集数据库相关基础信息。
go
# 指标查询示例:
{__name__=~"sqlserver_sysinfo_.*"}
# 示例输出:
sqlserver_sysinfo_uptime # 表示系统运行时间,单位为秒
sqlserver_sysinfo_servertime # 表示当前数据库时间,单位为秒
# 此外,还包括其SQL Server系统信息等标签,如:
"servername": "WIN-6CG7I95ROEG"
"edition": "Enterprise Edition (64-bit)",
"hostname": "TestDB-08",
"instancename": "master",
"productlevel": "RTM",
"productname": "Microsoft SQL Server 2008 R2 (RTM) ",
"productversion": "10.50.1600.1",
"collation": "Chinese_PRC_CI_AS",