Prometheus监控SQL SERVER常用指标和PromQL预警

SQL Server是企业级广泛应用的数据库,通过简单的Prometheus exportor可以很容易地监控它。与所有数据库一样,SQL Server也有许多故障点,例如事务延迟或数据库中连接过多。本文介绍如何使用Prometheus监视SQL Server,包括常用的监控指标,从用户或消费者的角度提供实用的服务视图,包括检测可能直接影响应用程序行为的潜在问题。

在这里插入图片描述

sql_exporter

为了使用Prometheus监视SQL Server,我们将使用sql_export,这是SQL Server的特定exporter,它公开度一系列量指标,以便prometheus能够获得它们。此外,此导出器的灵活性支持根据业务创建任何自定义指标,因此它几乎可以监视所有内容。

假设你已经安装了Prometheus和sql_exporter,现在开始使用Prometheus监视SQL Server,让我们看看应该关注哪些指标并创建一些警报。

主要监控指标

启动状态

你可以使用up指标检查数据库是否启动并运行。让我们创建PromQL警报来检查数据库是否已启动:

Up {job="mssql"} == 0

死锁指标

你可以使用mssql_deadlocks指标检查数据库中是否没有死锁。当两个具有排他锁的进程想要访问相同的资源时,就会发生死锁。发生死锁情况,系统性能会显著下降,管理员需要关注并进行优化调整。

让我们创建警报查询,如果死锁的数量在一分钟的时间范围内增加到五个:

Increase (mssql_deadlocks[1m]) > 5

磁盘空间

磁盘上没有足够的空间将使数据库崩溃。为此,你需要使用mssql_disk_space_used_bytes_total指标,并结合mssql_disk_space_available_bytes_total,它将返回磁盘使用情况和可用空间总量(以字节为单位)。

让我们创建警报查询,如果数据库使用的可用空间超过85%:

sum(mssql_disk_space_available_bytes_total{job=~"mssql"})/sum(mssql_disk_space_total_bytes_total{job=~"mssql"})  < 0.15

创建自定义指标

还可以创建自定义查询来监视与业务有关的指标。例如,你可以创建度量来获取电子商务交易中今天的总发票金额。

为此,您需要在mssql-metrics-config 配置中为收集器创建新的数据条目:

apiVersion: v1
kind: ConfigMap
metadata:namespace: mssqlname: mssql-metrics-configlabels:app: mssql-exporter
data:sql_custom_invoice.collector.yml:collector_name: sql_custom_invoicemetrics:- metric_name: total_invoiced_todaytype: gaugehelp: 'Get total amount invoiced today.'values: [invoiced_today_sum]query_ref: total_invoiced_today_queryqueries:- query_name: total_invoiced_today_queryquery: | SELECT sum(total) AS invoiced_today_sum FROM Invoice where invoiceDate=CAST(GETDATE() AS date);

然后在 sql_exporter.yml 文件中修改目标收集器,指定 sql_custom_invoice:

target:collectors: [mssql_standard, sql_custom_invoice]

确保自定义收集器文件名称以collector.yml结尾。

其他常用指标

连接相关指标

  • 指标:连接数(Number of Connections)

    • 解释:这是指当前与 SQL Server 数据库建立的连接数量。连接数的监控很重要,因为过多的连接可能会耗尽数据库服务器的资源。例如,如果数据库配置的最大连接数是 1000,当连接数接近或超过这个阈值时,新的连接请求可能会被拒绝或者等待很长时间才能建立连接。

    • 预警设置:可以设置一个阈值,比如连接数达到最大连接数的 80% 时触发预警。这样系统运维人员就可以提前采取措施,如检查是否有异常的连接或者考虑增加数据库服务器的连接资源配置。

    • 连接数预警(假设连接数指标名为sql_server_connections,最大连接数为 1000,阈值设为 80%)

      查询语句:

      sql_server_connections > 1000 * 0.8
      

      这条 PromQL 语句检查sql_server_connections指标的值是否大于最大连接数(1000)的 80%(即 800)。如果满足这个条件,就会触发预警,表示连接数可能过多。

  • 指标:连接成功率(Connection Success Rate)

    • 解释:这是成功建立连接的数量与连接尝试总数的比率。它反映了数据库服务对连接请求的响应能力。如果连接成功率下降,可能表示网络问题、数据库配置错误或者服务器负载过高。例如,在网络波动时,客户端与数据库服务器之间的连接可能会频繁中断,导致连接成功率降低。

    • 预警设置:当连接成功率低于 95%(这个值可以根据实际情况调整)时发出预警,提醒运维人员检查网络、服务器状态以及数据库的配置参数。

    • 连接成功率预警(假设连接成功率指标名为sql_server_connection_success_rate,阈值设为 95%)

      查询语句:

      sql_server_connection_success_rate < 0.95
      

      sql_server_connection_success_rate指标的值小于 95%(0.95)时,这个查询条件就会满足,触发预警,表明连接成功率较低,可能存在网络或数据库配置等问题。

性能相关指标

  • 指标:查询执行时间(Query Execution Time)

    • 解释:记录每个查询从开始执行到结束所花费的时间。长查询执行时间可能是由于查询语句复杂、索引缺失、数据量过大或者服务器性能瓶颈等原因导致的。例如,一个没有合适索引的复杂关联查询可能会花费很长时间来执行,影响系统的响应速度。

    • 预警设置:对于关键业务查询,可以设置一个最大允许执行时间。如果查询执行时间超过这个阈值,如某个重要报表查询超过 5 秒(具体时间根据业务需求确定),就触发预警,促使运维人员优化查询或者数据库性能。

    • 查询执行时间预警(假设关键业务查询执行时间指标名为sql_server_query_execution_time,关键业务查询最大允许执行时间为 5 秒)

      查询语句:

      sql_server_query_execution_time > 5
      

      此查询检查sql_server_query_execution_time指标的值是否大于 5 秒。如果大于这个阈值,就意味着关键业务查询执行时间过长,触发预警,提醒运维人员优化查询。

  • 指标:CPU 使用率(CPU Utilization)

    • 解释:显示 SQL Server 进程占用服务器 CPU 资源的百分比。高 CPU 使用率可能是因为大量复杂查询同时执行、数据库内部的高负载操作(如索引重建)或者存在性能不佳的存储过程。例如,在数据仓库环境中,进行大规模数据加载和聚合操作时,CPU 使用率可能会显著上升。

    • 预警设置:当 CPU 使用率超过 80%(可根据服务器硬件资源和业务负载情况调整)持续一段时间(如 1 分钟),就发出预警,提醒运维人员检查是否有异常的查询或者考虑升级服务器硬件。

    • CPU 使用率预警(假设 CPU 使用率指标名为sql_server_cpu_utilization,阈值设为 80%,持续时间 1 分钟)

      查询语句:

      `sql_server_cpu_utilization > 0.8` `[1m]`
      

      这里sql_server_cpu_utilization指标的值大于 80%(0.8),并且这个条件持续 1 分钟([1m])就会触发预警。这有助于避免因短暂的 CPU 高峰而误报警,只有当 CPU 高使用率持续一段时间时才发出警告,提醒运维人员关注服务器性能。

  • 指标:内存使用率(Memory Usage)

    • 解释:反映 SQL Server 使用服务器内存的情况。SQL Server 会使用内存来缓存数据和执行计划等,合理的内存使用可以提高性能,但过高的内存使用率可能导致服务器内存不足,出现性能问题甚至系统崩溃。例如,如果数据库缓存了大量不常用的数据,而没有及时释放内存,可能会使内存使用率过高。

    • 预警设置:当内存使用率达到 90%(具体数值根据服务器内存大小和业务需求确定)时触发预警,运维人员可以检查内存分配情况,优化数据库内存管理策略或者增加服务器内存。

    • 内存使用率预警(假设内存使用率指标名为sql_server_memory_usage,阈值设为 90%)

      查询语句:

      `sql_server_memory_usage > 0.9`
      

      sql_server_memory_usage指标的值大于 90%(0.9)时,就会触发预警,提示运维人员内存使用率过高,需要检查内存分配情况等。

事务相关指标

  • 指标:事务吞吐量(Transaction Throughput)

    • 解释:指单位时间内成功完成的事务数量。它体现了数据库处理事务的能力。在高并发的业务场景下,如电商平台的订单处理系统,高事务吞吐量是保证系统高效运行的关键。如果事务吞吐量下降,可能表示数据库出现性能问题或者业务量发生变化。

    • 预警设置:设定一个基准事务吞吐量,当实际吞吐量低于这个基准的 80%(可根据业务高峰和低谷期调整)时,触发预警,以便运维人员查找原因,如是否有锁竞争或者资源瓶颈。

    • 事务吞吐量预警(假设事务吞吐量指标名为sql_server_transaction_throughput,基准事务吞吐量设为 100,阈值设为 80%)

      查询语句:

      sql_server_transaction_throughput < 100 * 0.8
      

      此查询检查sql_server_transaction_throughput指标的值是否小于基准事务吞吐量(100)的 80%(即 80)。如果满足这个条件,就触发预警,说明事务吞吐量可能下降,需要查找原因。

  • 指标 :事务回滚率(Transaction Rollback Rate)

    • 解释:这是回滚事务数量与总事务数量的比率。较高的事务回滚率可能表示应用程序逻辑错误、数据冲突或者数据库故障。例如,在并发更新同一数据时,如果没有正确的事务隔离级别和锁机制,可能会导致事务冲突和回滚。
    • 预警设置:当事务回滚率超过 5%(根据业务对数据准确性的要求调整)时,发出预警,运维人员可以检查应用程序代码和数据库事务配置。
  • 事务回滚率预警(假设事务回滚率指标名为sql_server_transaction_rollback_rate,阈值设为 5%)

​ 查询语句:

	sql_server_transaction_rollback_rate > 0.05

​ 当sql_server_transaction_rollback_rate指标的值大于 5%(0.05)时,就会触发预警,表明事务回滚率较高,可能存在应 用程序或数据库事务配置问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/472455.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML5实现俄罗斯方块小游戏

文章目录 1.设计来源1.1 主界面1.2 皮肤风格1.2 游戏中界面1.3 游戏结束界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/143788449 HTML5实现俄罗斯方块小游戏&#x…

从北美火到中国,大数据洞察品牌“STANLEY”的突围之路

保守直筒大头的“硬汉”外形&#xff0c;以百变颜色踩中时尚命脉&#xff0c;与各路大牌“梦幻联动”&#xff0c;不少时尚弄潮儿没能逃过其“真香”诱惑。 这就是今年以来从北美火到中国的STANLEY&#xff0c;在“巨无霸”水杯中突围出属于自己的一条路。 最近STANLEY又整活…

linux逻辑卷练习

目录 知识点&#xff1a; 常用命令 题目&#xff1a; 解题&#xff1a; 1&#xff09;分区 2&#xff09;创建物理卷 3&#xff09;创建卷组 4&#xff09;生成逻辑卷 "要带参数 -n" 5&#xff09;扩容 6&#xff09;格式化(添加文件系统) 7&#xff09;挂…

java版嘎嘎快充汽车单车充电系统源码系统jeecgboot

汽车使用云快充1.6 1.5协议&#xff0c;单车用的铁塔协议 前端uniapp、后端jeecgbootvue2

【Vitepress报错】Error: [vitepress] 8 dead link(s) found.

原因 VitePress 在编译时&#xff0c;发现 死链接(dead links) 会构建失败&#xff01;具体在哪我也找不到… 解决方案 如图第一行蓝色提示信息&#xff0c;设置 Vitepress 属性 ignoredeadlinks 为 true 可忽略报错。 .vuepress/config.js export default defineConfig(…

《Django 5 By Example》阅读笔记:p105-p164

《Django 5 By Example》学习第5天&#xff0c;p105-p164总结&#xff0c;总计60页。 一、技术总结 1.文章标签功能 Django自带django-taggit。 2.自定义template tags 3.roadmap功能 4.RSS功能 5.full-text搜索功能 这里使用的是Postgresql,使用pip install psycopg安…

awk(常用)

这个有点难 O.o 一、awk # 语法 awk 参数 模式 {动作} 文件# 第一列&#xff0c;包含p的 $1~"p" # 第一列&#xff0c;不包含p的 $1!~"p" # 开始时干嘛&#xff0c;结束时干嘛 awk BEGIN{开始时做的事}END{结束时做的事}{print $0} 文件 1、内置变量&…

数据结构—栈和队列

目录 1.栈底层结构的选择 2.栈的实现 3.栈 3.1入栈 3.2出栈 3.3栈顶删除 4.队列 4.1队列介绍 4.2队列初始化 4.3入队列 4.4队头删除 1.栈底层结构的选择 栈是一种数据结构 具有“后进先出的”的特点 现在面临的两种选择&#xff0c;一种是顺序表&#xff0c;另一种…

安装paddle

网址&#xff1a;飞桨PaddlePaddle-源于产业实践的开源深度学习平台 或者找对应python和cuda版本的paddle下载后安装&#xff1a; https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html 你想要安装paddlepaddle - gpu2.6.1.post112版本。在你提供的文件列表中&am…

【解决】Layout 下创建槽位后,执行 Image 同步槽位位置后表现错误的问题。

开发平台&#xff1a;Unity 6.0 编程语言&#xff1a;CSharp 编程平台&#xff1a;Visual Studio 2022   一、问题背景 | 开发库存系统 图1 位置同步失败问题 图2 位置正常同步效果表现 黑框 作用于 UnityEngine.UI.GridLayoutGruop&#xff0c;形成 4x6 布局&#xff0c;如…

电商系统开发:Spring Boot框架实战

3 系统分析 当用户确定开发一款程序时&#xff0c;是需要遵循下面的顺序进行工作&#xff0c;概括为&#xff1a;系统分析–>系统设计–>系统开发–>系统测试&#xff0c;无论这个过程是否有变更或者迭代&#xff0c;都是按照这样的顺序开展工作的。系统分析就是分析系…

深度神经网络DNN反向传播BP算法公式推导

深度神经网络DNN反向传播BP算法推导、δ法则 文章目录 前言一、单个神经元的内部结构二、前向传播三、反向传播总结 前言 \;\;\;\;\; 本文详细推导深度神经网络DNN反向传播BP算法中对权重w和偏置b的更新公式。通过图片和一步步的数学公式推导深刻理解反向传播BP算法&#xff0c…

借助Excel实现Word表格快速排序

实例需求&#xff1a;Word中的表格如下图所示&#xff0c;为了强化记忆&#xff0c;希望能够将表格内容随机排序&#xff0c;表格第一列仍然按照顺序编号&#xff0c;即编号不跟随表格行内容调整。 乱序之后的效果如下图所示&#xff08;每次运行代码的结果都不一定相同&#x…

HarmonyOS 开发环境搭建

HarmonyOS&#xff08;鸿蒙操作系统&#xff09;作为一种面向全场景多设备的智能操作系统&#xff0c;正逐渐在市场上崭露头角。为了进入HarmonyOS生态&#xff0c;开发者需要搭建一个高效的开发环境。本文将详细介绍如何搭建HarmonyOS开发环境&#xff0c;特别是如何安装和配置…

Fish Agent V0.13B:Fish Audio的语音处理新突破,AI语音助手的未来已来!

近日&#xff0c;Fish Audio公司发布了一款全新的语音处理模型——Fish Agent V0.13B&#xff0c;这款模型以其高效、精确的语音生成和处理能力&#xff0c;尤其是在模拟或克隆不同声音方面的表现&#xff0c;引起了广泛关注。这不仅意味着我们在拥有一个声音自然、反应迅速的A…

Shell基础2

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团…

系统架构师考试18天极限备考复盘(2024年11月)

前言 写下这篇复盘笔记的时候还没有出成绩。泽崽目前是在读研究生&#xff0c;在经过 大概2周多个全日 的极限备考之后&#xff0c;于11月10日参加了软考的系统架构师考试&#xff08;高级&#xff09;。目前12月下旬才会出成绩&#xff0c;对于“基础知识-案例分析-论文”的估…

Tessy学习笔记—requirement(需求)的管理

1&#xff1a;什么是需求 Tessy中的requirement&#xff08;需求&#xff09;是&#xff0c;我们还是跟着Tessy官方的文档&#xff0c;继续学习&#xff0c;打开官方自带的工程Is Value In Range Requirement.project。 按照官方自带的操作手册&#xff0c;导入txt类型的需求…

web——sqliabs靶场——第六关——报错注入和布尔盲注

这一关还是使用报错注入和布尔盲注 一. 判断是否有sql注入 二. 判断注入的类型 是双引号的注入类型。 3.报错注入的检测 可以使用sql报错注入 4.查看库名 5. 查看表名 6.查看字段名 7. 查具体字段的内容 结束 布尔盲注 结束