当前位置 博文首页 > 磁盘IO利用率监控VBS脚本(windows)

    磁盘IO利用率监控VBS脚本(windows)

    作者:zhangrenfang 时间:2021-01-30 15:06

    核心代码

    '程序名称:      btlwchk_DiskIO.vbs
    '版权信息:      Copyright (c)  2011 guangzhou bluetech technology Incorporated.All rights reserved
    '程序用途:      监测windows主机IO利用率
    '创建日期:      2011-08-10
    '作者信息:      zhangkai
    '运行环境:      vbs
    '处理参数
    MonSubject="DiskIO"
    Set Args=WScript.Arguments
    If (Args.Count<1) Then
     Wscript.Echo MonSubject & " -1:command line error"
     WScript.Quit(3)
    End If
    strcid=Args(0)
    '获取工作目录
    tmparr=Split(Wscript.ScriptFullName,"\",-1)
    g_strworkdir=tmparr(0)
    narr=UBound(tmparr,1)
    For i=1 to narr-3
        g_strworkdir=g_strworkdir & "\" & tmparr(i)
    Next
    '装载公共库
    set g_fileSys = createObject ("Scripting.FileSystemObject")
    Sub includeFile (fSpec)
        dim file, fileData
        set file = g_fileSys.openTextFile (fSpec)
        fileData = file.readAll ()
        file.close
        executeGlobal fileData
        set file = nothing 
    end sub
    includeFile g_strworkdir & "\nagios\libexec\libcomm.vbs"
    
    '输出版本和帮助信息
    getverhelp strcid,"v1.00"," <cid>"
    
    strComputer = "."  
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
    
    '第1次采样IO
    Set colItems = objWMIService.ExecQuery("Select * from Win32_PerfRawData_PerfDisk_LogicalDisk where name='_Total' ",,48)
    For Each objItem in colItems
         DiskTime1 = objItem.PercentDiskTime
         BaseTime1 = objItem.PercentDiskTime_Base
      DiskBytes1 = objItem.DiskBytesPerSec
      DiskReadBytes1 = objItem.DiskReadBytesPerSec
      DiskWriteBytes1 = objItem.DiskWriteBytesPerSec
      AvgDiskTransfer1 = objItem.AvgDiskSecPerTransfer
      AvgDiskTransferBase1 = objItem.AvgDiskSecPerTransfer_Base
      AvgDiskRead1 = objItem.AvgDiskSecPerRead
      AvgDiskReadBase1 = objItem.AvgDiskSecPerRead_Base
      AvgDiskWrite1 = objItem.AvgDiskSecPerWrite
      AvgDiskWriteBase1 = objItem.AvgDiskSecPerWrite_Base
      TimeValue1 = objItem.Timestamp_PerfTime
      TimeBase = objItem.Frequency_PerfTime
    
    Next
    
    '第2次采样IO
    WScript.Sleep 1000
    Set colItems = objWMIService.ExecQuery("Select * from Win32_PerfRawData_PerfDisk_LogicalDisk where name='_Total' ",,48)
    For Each objItem in colItems
         DiskTime2 = objItem.PercentDiskTime
      BaseTime2 = objItem.PercentDiskTime_Base
      DiskBytes2 = objItem.DiskBytesPerSec
      DiskReadBytes2 = objItem.DiskReadBytesPerSec
      DiskWriteBytes2 = objItem.DiskWriteBytesPerSec
      AvgDiskTransfer2 = objItem.AvgDiskSecPerTransfer
      AvgDiskTransferBase2 = objItem.AvgDiskSecPerTransfer_Base
      AvgDiskRead2 = objItem.AvgDiskSecPerRead
      AvgDiskReadBase2 = objItem.AvgDiskSecPerRead_Base
      AvgDiskWrite2 = objItem.AvgDiskSecPerWrite
      AvgDiskWriteBase2 = objItem.AvgDiskSecPerWrite_Base
      TimeValue2 = objItem.Timestamp_PerfTime
            CurrentDiskQueueLength = objItem.CurrentDiskQueueLength
    Next
    
    '获取IO利用率
    If BaseTime2 - BaseTime1 = 0 Then
     strio ="Name=_Toltal"  & ",PercentDiskTime=0%"
    Else
     PercentDiskTime =(DiskTime2 - DiskTime1)/(BaseTime2 - BaseTime1)*100 
     strio = "Name=_Total"  & ",PercentDiskTime="  & PercentDiskTime
    End If
    
    '获取Disk Bytes/sec
    If TimeValue2 - TimeValue1 = 0 Then
        strdiskbyte = ",DiskBytesPerSec=0"
    Else
        DiskBytesPerSec = (DiskBytes2 - DiskBytes1) / ( (TimeValue2 - TimeValue1) / TimeBase)
        strdiskbyte = ",DiskBytesPerSec="  & DiskBytesPerSec
    End If
    
    '获取Disk Read Bytes/sec
    If TimeValue2 - TimeValue1 = 0 Then
        strdiskreadbyte = ",DiskReadBytesPerSec=0"
    Else
        DiskReadBytesPerSec = (DiskReadBytes2 - DiskReadBytes1) / ( (TimeValue2 - TimeValue1) / TimeBase)
        strdiskreadbyte = ",DiskReadBytesPerSec="  & DiskReadBytesPerSec
    End If
    
    '获取Disk Write Bytes/sec
    If TimeValue2 - TimeValue1 = 0 Then
        strdiskwritebyte = ",DiskWriteBytesPerSec=0"
    Else
        DiskWriteBytesPerSec = (DiskWriteBytes2 - DiskWriteBytes1) / ( (TimeValue2 - TimeValue1) / TimeBase)
        strdiskwritebyte = ",DiskWriteBytesPerSec="  & DiskWriteBytesPerSec
    End If
    
    '获取Avg. Disk sec/Transfer
    If AvgDiskTransferBase2 - AvgDiskTransferBase1 = 0 Then
        stravgdisktran = ",AvgDiskSecPerTransfer=0"
    Else
        AvgDiskSecPerTransfer = ((AvgDiskTransfer2 - AvgDiskTransfer1) / TimeBase) / (AvgDiskTransferBase2 - AvgDiskTransferBase1)
        stravgdisktran = ",AvgDiskSecPerTransfer="  & AvgDiskSecPerTransfer
    End If
    
    '获取Avg. Disk sec/Read
    If AvgDiskReadBase2 - AvgDiskReadBase1 = 0 Then
        stravgdiskread = ",AvgDiskSecPerRead=0"
    Else
        AvgDiskSecPerRead = ((AvgDiskRead2 - AvgDiskRead1) / TimeBase) / (AvgDiskReadBase2 - AvgDiskReadBase1)
        stravgdiskread = ",AvgDiskSecPerRead="  & AvgDiskSecPerRead
    End If
    
    '获取Avg. Disk sec/Write
    If AvgDiskWriteBase2 - AvgDiskWriteBase1 = 0 Then
        stravgdiskwrite = ",AvgDiskSecPerWrite=0"
    Else
        AvgDiskSecPerWrite = ((AvgDiskWrite2 - AvgDiskWrite1) / TimeBase) / (AvgDiskWriteBase2 - AvgDiskWriteBase1)
        stravgdiskwrite = ",AvgDiskSecPerWrite="  & AvgDiskSecPerWrite
    End If
    
    '获取Current Disk Queue Length
    strdisklength = ",CurrentDiskQueueLength="  & CurrentDiskQueueLength
    
    Wscript.Echo MonSubject & " 0:OK|" & strio & strdiskbyte & strdiskreadbyte & strdiskwritebyte & stravgdisktran & stravgdiskread & stravgdiskwrite & strdisklength

    用到了WMI,需要的朋友可以参考一下

    js