前往小程序,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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
采集SQL Server自定义指标并上报到pushgateway
默认的各种exporter有时候用起来都不够顺手,特殊情况下,我们还可以自己写sql然后通过python包装下,将metrics发送到pushgateway,进而上报到Prometheus里面。
保持热爱奔赴山海
2024/01/27
2250
SQLServer中的锁等待巡检
在日常运维sqlserver的过程中,偶发慢事务或存储过程与DDL语句(改表或者修改索引)需要锁定相同的资源,造成锁等待,如果不及时发现和处理,将影响到业务系统的稳定性。
保持热爱奔赴山海
2024/10/01
1150
采集Linux服务器上内存占用Top的进程信息
建议采集下Linux服务器上内存占用Top的进程信息,在内存抖动的时候便于排查问题。
保持热爱奔赴山海
2024/03/11
3770
破茧成蝶:PgBouncer在GreenPlum中的部署与优化,携手Prometheus+Grafana构建全方位性能仪表板
PgBouncer工具可以用于PostgreSQL和Greenplum数据库连接的连接池。
AiDBA宝典
2024/04/25
4950
破茧成蝶:PgBouncer在GreenPlum中的部署与优化,携手Prometheus+Grafana构建全方位性能仪表板
python 获取mysql数据库列表以及用户权限
一、需求分析 需要统计出当前数据库的所有数据库名,以及每个用户的授权信息。 获取所有数据库 在mysql里面,使用命令: show databases 就可以获取所有数据库了 获取所有用户 执行命令: select User from mysql.user 注意:需要排除到默认的用户,比如: "root", "mysql.sys", "mysql.session" 获取用户权限 语法: show grants for 用户名; 比如: show grants for test; 执行输出: GRANT US
py3study
2020/02/25
5.5K0
数据采集export使用prometheus_client 和 Flask实现
一、export 1、安装库 pip install prometheus_client flask 2、demo.py from atexit import register import mimetypes from prometheus_client.core import CollectorRegistry from prometheus_client import Gauge,Counter,Info,Enum,generate_latest,start_http_server from fl
master_lu
2022/04/09
1.6K0
SQLServer中批量导出的存储过程明细
使用sqlserver management客户端可以导出存储过程的明细,但是如果要大批量导出则很不方便,这种情况下,可以使用python脚本来实现
保持热爱奔赴山海
2024/08/13
2720
django-prometheus使用及源码分析
在django服务运行过程中,希望可以对其获取promethues指标进行监控,这样可以实时知道其运行状态,当它运行异常时可以及时进行告警,并且帮助我们可以对其针对性进行优化。比如请求量过大是否要进行限流或者扩容,再或者发现接口过慢,可能是数据库访问太慢,出现了慢sql,需要及时进行优化等等。
编程黑洞
2024/09/18
2120
django-prometheus使用及源码分析
利用MySQL系统数据库做性能负载诊断
1,在稳定性层面来说,更多的是关注高可用、读写分离、负载均衡,灾备管理等等high level层面的措施(就好比要保证生活的稳定性)
星哥玩云
2022/08/18
2.2K0
利用MySQL系统数据库做性能负载诊断
统计PG中的sequence的使用情况
需要注意的是,需要先set search_path 把各个schema都拼起来,不然可能遇到sql提示找不到某个sequence的情况。
保持热爱奔赴山海
2024/03/05
2720
Python操作MSSQL
Python连接SQL Server数据库 - pymssql使用基础:https://www.cnblogs.com/baiyangcao/p/pymssql_basic.html
py3study
2020/01/09
3K0
使用sql_exporter+Prometheus监控sql server
最近接管了一套sql server alwayson集群,需要加些监控和告警,简单研究了下github的方案,发现了这种sql_exporter这种更简单,扩展性也超级强。(另一种是通过nodejs的方案监控,费事点,可扩展性也不太好,这里直接pass掉)。
保持热爱奔赴山海
2023/07/20
1.9K8
使用sql_exporter+Prometheus监控sql server
MSSQL查询脱敏的思路
下面代码的核心在于引用了一个外部的jar包用于sql解析(暂未确认企业环境是否可以直接使用)。
保持热爱奔赴山海
2024/07/19
1140
pymysql ︱mysql的基本操作与dbutils+PooledDB使用
python3.6 使用 pymysql 连接 Mysql 数据库及 简单的增删改查操作
悟乙己
2021/12/07
5K0
pymysql ︱mysql的基本操作与dbutils+PooledDB使用
python 持续查杀符合条件的sql会话
生产上,某些情况下,可能会出现异常sql大量查询数据库,占用大量的cpu或者磁盘IO,这种情况下需要适当的止损。
保持热爱奔赴山海
2024/07/04
1570
python开发_python操作mysql数据库
如果你还没有准备好开发环境,你不妨花上一小点时间去看看:python开发_mysqldb安装
Hongten
2018/09/13
1.9K1
python开发_python操作mysql数据库
python-MySQLdb的二三事
追寻 介绍 mysqldb是python操作mysql数据库的一个库.mysql的几乎所有的操作都可以实现,另外,mysqldb的一些比较的option让数据操作更符合pythonic风格.在python2系列使用Mysqldb,在python3系列使用pymysql和mysql.connect. Mysqldb的安装 下面按python2系列安装 1. pip方式安装 pip install MySQL-python 2. yum安装 sudo yum install python-mysqldb
若与
2018/04/25
2.9K1
python-MySQLdb的二三事
7.Prometheus监控进阶之自定义监控业务应用
描述: Prometheus 可以通过直接测控或者客户端库来测控业务或者应用,目前我们可以采用多种不同语言编写客户端库包括(GO/Python/Java/Ruby)等客户端;
全栈工程师修炼指南
2022/09/29
2.2K0
7.Prometheus监控进阶之自定义监控业务应用
python利用pymssql连接SQL
首先需要安装pymssql模块 配置下freetds #cat /usr/local/freetds/etc/freetds.conf # $Id: freetds.conf,v 1.12 2007/12/25 06:02:36 jklowden Exp $ # # This file is installed by FreeTDS if no file by the same # name is found in the installation directory. # # For infor
py3study
2020/01/08
2.1K0
通过Python实现MySQL和PG数据比对
生产上,有个需要从MySQL异构复制数据到PG中的需求。 数据同步组件用的是go-mysql-postgres (两位前同事基于社区开源的go-mysql-elasticsearch上做的PG功能补丁)。
保持热爱奔赴山海
2022/11/28
7660
通过Python实现MySQL和PG数据比对
相关推荐
采集SQL Server自定义指标并上报到pushgateway
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验