Sql server 如何使用Zabbix监视数据库文件大小

Sql server 如何使用Zabbix监视数据库文件大小,sql-server,zabbix,Sql Server,Zabbix,我需要能够监控Zabbix中的数据库文件空间。我已经试用了许多用于监视SQL Server的模板,但它们似乎并没有达到我所需要的效果。从本质上讲,我需要知道特定数据库的数据库文件或日志文件(.mdf或.ldf)何时在满的一定百分比范围内 基本上,我希望: 发现服务器上每个数据库中的所有数据和日志文件 为每个文件创建两个项目,使用的空间和最大空间(考虑自动增长) 为每个文件创建一个触发器,当数据或日志文件在满的一定百分比范围内时向我发出警报(例如,80%满警告,90%严重) 由于我们环境的大小和网

我需要能够监控Zabbix中的数据库文件空间。我已经试用了许多用于监视SQL Server的模板,但它们似乎并没有达到我所需要的效果。从本质上讲,我需要知道特定数据库的数据库文件或日志文件(.mdf或.ldf)何时在满的一定百分比范围内

基本上,我希望:

  • 发现服务器上每个数据库中的所有数据和日志文件
  • 为每个文件创建两个项目,使用的空间和最大空间(考虑自动增长)
  • 为每个文件创建一个触发器,当数据或日志文件在满的一定百分比范围内时向我发出警报(例如,80%满警告,90%严重)
  • 由于我们环境的大小和网络的限制,使用ODBC不是一个选项。我相信我需要某种类型的使用PowerShell的发现脚本,然后是另一个脚本来获取项的值,但我不确定

    不知道Zabbix是什么(我稍后会看一看),但在SQL Server中,您有
    sp_MSforeachdb

    在这里,我们创建一个
    #Temp
    表来收集服务器上每个数据库的结果

    示例

    Use Master;
    Create table #Temp (DBName varchar(150),FileType varchar(50),MBytes bigint,MBytesMax bigint)
    
    EXEC sp_MSforeachdb '
     Insert Into #Temp
     Select DBName    = ''?''
           ,FileType  = case when physical_name like ''%.mdf'' then ''Database'' else ''Log'' end
           ,MBytes    = try_convert(bigint,size) * 8 / 1024   
           ,MBytesMax = try_convert(bigint,max_size) * 8 / 1024   
      From  [?].sys.database_files 
    '
    
    Select *
          ,Pct = convert(decimal(10,1),(MBytes *100.0) / nullif(MBytesMax,0))
     From  #Temp
    
    返回

    DBName  FileType    MBytes  MBytesMax   Pct
    master  Database    4       0           NULL
    master  Log         1       0           NULL
    tempdb  Database    816     0           NULL
    tempdb  Log         894     0           NULL
    msdb    Database    201     0           NULL
    msdb    Log         19      2097152     0.0
    xxxxxxx Database    761     4096        18.6
    xxxxxxx Log         1       2097152     0.0
    yyyyyyy Database    533     4096        13.0
    yyyyyyy Log         1       2097152     0.0
    zzzzzzz Database    1641    4096        40.1
    zzzzzzz Log         1       2097152     0.0