Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SQLServer采集data和log的体积推送到prometheus

SQLServer采集data和log的体积推送到prometheus

原创
作者头像
保持热爱奔赴山海
发布于 2024-10-01 01:25:37
发布于 2024-10-01 01:25:37
9500
代码可运行
举报
文章被收录于专栏:数据库相关数据库相关
运行总次数:0
代码可运行

生产上需要采集各个库的datasize和logsize,便于DBA提前介入优化(例如数据文件最近为啥体积暴涨、事务日志为啥一直在涨or收缩失败?)

这种情况下,可以使用下面的脚本采集下datasize和logsize,并推送到pushgateway中:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# -*-coding:utf-8 -*-

import datetime
import json
import os
import sys

import requests

import pymssql
from prometheus_client import CollectorRegistry, Gauge, push_to_gateway


def get_db_list(host, port, db, user, passwd):
    conn = pymssql.connect(
        host=host, port=port, user=user, password=passwd, database=db, charset="utf8"
    )
    cursor = conn.cursor()
    sql = """select database_id,name,state from sys.databases where [state] not in(1,2,3,4,6) and name not in ('master','model','tempdb','msdb') ORDER BY name asc"""

    cursor.execute(sql)
    res = cursor.fetchall()

    db_list = []

    for i in res:
        db_list.append(i[1])

    return db_list


def push_metrics(host, port, db, user, passwd, db_list):
    for db in db_list:
        # print(db)
        conn = pymssql.connect(
            host=host,
            port=port,
            user=user,
            password=passwd,
            database='master',
            charset="utf8",
        )
        cursor = conn.cursor()

        detail_sql = "USE [" + str(db) + "];" +  """
            SELECT
                DB_NAME() AS [Database Name]
                ,SUM(size * 8.0 / 1024) AS [Total_Size]
                ,SUM(CASE WHEN type_desc = 'ROWS' THEN size * 8.0 / 1024 ELSE 0 END) AS [Data Size]
                ,SUM(CASE WHEN type_desc = 'LOG' THEN size * 8.0 / 1024 ELSE 0 END) AS [Log Size]
                ,@@SERVERNAME as instance
            FROM sys.master_files 
            WHERE type in (0,1) AND state = 0 AND database_id = DB_ID('""" + str(db) + "');"

        try:
            cursor.execute(detail_sql)
        except:
            continue

        res = cursor.fetchall()

        for row in res:            
            Database_Name = str(row[0])
            Total_Size = str(row[1])
            Data_Size = str(row[2])
            Log_Size = str(row[3])
            instance = str(row[4])

            print(f"节点 {instance}, 库名 {Database_Name}, Total_Size: {Total_Size}, Data_Size: {Data_Size}, Log_Size: {Log_Size} ")

            # 把指标格式化成prometheus识别的格式
            labels = ["Metrics"]

            registry = CollectorRegistry()

            db_metrics = Gauge("Data_Size", "MSSQL基础指标", labels, registry=registry)
            db_metrics.labels("Data_Size").set(Data_Size)

            db_metrics = Gauge("Log_Size", "MSSQL基础指标", labels, registry=registry)
            db_metrics.labels("Log_Size").set(Log_Size)


            push_to_gateway(
                gateway='http://192.168.31.181:9091',
                job="MSSQLBasicMetrics",
                # 注意这里的grouping_key是关键,写的有问题会导致不同instance的指标覆盖
                grouping_key={
                    "instance": instance,
                    "Database_Name":Database_Name
                },
                registry=registry,
                timeout=5,
            )
            

if __name__ == "__main__":
    port = "1433"
    db = "master"
    user = "sa"
    passwd = "Abcd1234"

    host_list = ["192.168.31.181","192.168.31.17"]

    for host in host_list:
        print("当前解析的是 ---- ",host)
        db_list = get_db_list(host, port, db, user, passwd)

        push_metrics(host, port, db, user, passwd, db_list)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数据库连接工具DBeaver
dbeaver是免费和开源(GPL)为开发人员和数据库管理员通用数据库工具。
Learning_斌
2019/09/05
3.4K0
数据库连接工具DBeaver
卸载Navicat!操作所有的数据库靠它就够了
虽然有很多 SQL Client 可以操作数据库,但若仔细观察会发现能满足跨平台、支持众多主流数据库系统、以图形化接口操作数据、提供多种汇入输出方式且以独立应用程序运作的选择还真没几个,可能很多程序员都倾向于选择Navicat。
Java技术江湖
2021/01/18
1.3K0
卸载Navicat!操作所有的数据库靠它就够了
dbeaver数据库连接工具,免费获取、跨平台,白嫖真香!
dbeaver数据库管理工具,可提供界面化、免费、跨平台的数据库管理。作为网工、系统管理员、数据库管理员,都可能会遇到数据库管理的工作,可能经常会创库、查表或者对表进行简单的管理。但是传统数据库指令晦涩难懂,指令操作错误容易造成不好的影响,那么这时要是有简单好用的数据库连接工具就舒服了。阿祥今天就介绍这个dbeaver工具,它简单的数据库界面化对接、查看、管理。别着急退出,建议收藏,看完用完都说真香!
ICT系统集成阿祥
2024/12/03
3290
dbeaver数据库连接工具,免费获取、跨平台,白嫖真香!
DBeaver,一款数据库管理工具
前不久,由于Navicat爆出了一些漏洞,具体参考:NAVICAT PREMIUM,公司要求必须卸载Navicat,即便是免安装版也不让使用,那么除了Navicat外,还有哪些可视化的数据库管理工具呢?大体搜索了下,不管是官方的Workbench,还是其他的一些软件,使用体验上都不是很好,偶然间,同事推荐了DBeaver。
xiangzhihong
2022/11/30
2.3K0
DBeaver – 一款免费开源的通用数据库工具
2021-04-17 更新:DBeaver 提供了一个基于 Web 的浏览器版本:CloudBeaver。
全栈程序员站长
2022/09/15
7.1K1
DBeaver – 一款免费开源的通用数据库工具
狂揽 42.9k 星!神级数据库连接工具,再见 Navicat,太炸了!
每天面对不同数据库的查询和管理工作,常常需要记忆各种不同的操作界面和命令语法,耗费大量时间和精力。
IT可乐
2025/04/09
1200
27.8k stars的开源数据库连接工具DBeaver
DBeaver是一个SQL客户端和数据库管理工具。支持多种不同数据库,分为社区版(免费)和企业版(付费)。对于关系数据库,它使用JDBC API通过JDBC驱动程序与数据库交互。对于其他数据库,它使用专有数据库驱动程序。它提供了一个编辑器,支持代码完成和语法高亮。 支持的数据库 支持超多数据库 MySQL/MariaDB PostgreSQL Greenplum Oracle DB2 LUW Exasol SQL Server Sybase/SAP ASE SQLite Firebird H2 HSQLDB
开源日记
2023/03/10
1.2K0
27.8k stars的开源数据库连接工具DBeaver
DBeaver Ultimate 22.1.0 连接数据库(MySQL+Mongo+Clickhouse)
继续书接上文 Docker Compose V2 安装常用数据库MySQL+Mongo,部署安装好之后我本来是找了一个web端的在线连接数据库的工具,但是使用过程中并不丝滑,最终还是选择了使用 DBeaver ,然后发现 mongo 还需要许可,又折腾整理了半下午,终于大功告成。
易墨
2023/10/08
1.2K0
DBeaver Ultimate 22.1.0 连接数据库(MySQL+Mongo+Clickhouse)
2021开始用DBeaver连接各种数据库:强烈推荐这款免费开源的通用数据库工具
平常用微软的SQL Server(MSSQL)数据库最多,用的是微软的SQL Server Management Studio (SSMS) 客户端,免费的。
崔文远TroyCui
2021/09/09
3.7K0
Mac 安装数据库管理软件 DBeaver
大家好,我是阿常。今天阿常和大家分享——Mac 安装数据库管理软件DBeaver。
程序媛淼淼
2022/09/01
3.2K0
Mac 安装数据库管理软件 DBeaver
DBeaverEE for Mac(数据库管理工具)
DBeaverEE 是一款功能强大的数据库管理工具,支持多种数据库类型,包括 MySQL、Oracle、PostgreSQL 等。它是 DBeaver 社区版的商业版本,在社区版的基础上增加了更多高级特性和技术支持。
皮西歪
2023/03/21
8240
DBeaverEE for Mac(数据库管理工具)
超强数据库管理软件推荐-没有之一-还在用Navicat管理本地数据库的吗?还在为Navicat寻求绿色版或者购买正版的费用望而却步吗?DBeaver让你解决所有
Navicat大家都不陌生,非常好用,但是有个核心问题,付费啊!!!将多少穷苦码农挡在外面! 而且每次去找绿色版也要花费时间的,现在越来越不好找并且,本文推荐重磅免费软件DBeaver,并且!支持——简体中文!
卓伊凡
2025/01/13
2060
CentOS7下yum方式安装MySQL5.7数据库
之前有介绍CentOS6下安装MySQL5.7.25二进制版本,不过有时为了方便,采用yum方式快速搭建MySQL数据库,下面简单介绍具体步骤
yuanfan2012
2021/02/25
9440
CentOS7下yum方式安装MySQL5.7数据库
DBeaver:强大实用的跨平台数据库工具 | 开源日报 No.71
DBeaver 是一个免费的多平台数据库工具,适用于开发人员、SQL 程序员、数据库管理员和分析师。它支持任何有 JDBC 驱动程序的数据库,并且商业版本还支持非-JDBC 数据源 (如 MongoDB、Cassandra 等)。该项目基于 Eclipse 平台,使用插件架构为各种数据库提供额外功能。主要特点包括元数据编辑器、SQL 编辑器、富文本数据编辑器以及 ER 图等。
小柒
2023/11/02
6680
DBeaver:强大实用的跨平台数据库工具 | 开源日报 No.71
再见收费的Navicat,操作所有数据库就靠它了!
作为一名开发者,免不了要和数据库打交道,于是我们就需要一款顺手的数据库管理工具。很长一段时间里,Navicat 都是我的首选,但最近更换了一台新电脑,之前的绿色安装包找不到了。
沉默王二
2022/03/07
1.8K0
再见收费的Navicat,操作所有数据库就靠它了!
数据库管理:数据库的安装和配置详解
在现代IT运维中,数据库是信息系统的核心组件之一。如何正确地安装和配置数据库,直接关系到系统的性能和可靠性。本文将详细介绍数据库的安装和配置过程,以MySQL为例,带你从零开始构建一个高效的数据库管理系统。
Echo_Wish
2024/10/21
2300
数据库管理:数据库的安装和配置详解
跨平台数据库管理器DbGate本地部署并实现无公网IP远程访问
现在主流的数据库管理工具有Navicat、DBeaver、RedisDesktop、SQLyog等,今天要介绍的DbGate支持MySQL、MongoDB、Redis、SQLite等多种数据库,可以在Linux、Windows、MacOS、Web浏览器等平台运行,遵循MIT开源协议,内置丰富的插件,模式比较工具,图表可视化等功能。
YIN_尹
2024/05/26
1770
跨平台数据库管理器DbGate本地部署并实现无公网IP远程访问
推荐一款免费的数据库管理工具,比Navicat还要好用,功能还很强大!
DBeaver 是一个基于 Java 开发,免费开源的通用数据库管理和开发工具,使用非常友好的 ASL 协议。可以通过官方网站或者 Github 进行下载。
Java团长
2020/09/22
14.8K0
推荐一款免费的数据库管理工具,比Navicat还要好用,功能还很强大!
Navicat 17 正版直装教程:2025最新下载渠道+性能优化配置技巧
Navicat Premium 17 是多数据库管理工具,支持 MySQL/MariaDB/Oracle/PostgreSQL/SQL Server 等主流数据库,提供可视化数据建模、SQL编辑、数据同步等功能。其试用版提供14天全功能体验,商业版支持跨平台使用。
万里顾一诚
2025/03/05
3471
Navicat 17 正版直装教程:2025最新下载渠道+性能优化配置技巧
Otter-入门篇2(Manager安装配置)
Otter-入门篇2(Manager安装配置) 前言 上一节已经简单介绍了Otter的基本信息,本节我们就来开准备搭建一个我们自己的Otter环境,因为一个Otter需要Manage+node+数据库
喵了个咪233
2018/03/02
1.5K0
Otter-入门篇2(Manager安装配置)
推荐阅读
相关推荐
数据库连接工具DBeaver
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验