磁盘IO利用率监控VBS脚本(windows)
核心代码
'程序名称: btlwchk_DiskIO.vbs
'版权信息: Copyright(c) 2011guangzhoubluetechtechnologyIncorporated.Allrightsreserved
'程序用途: 监测windows主机IO利用率
'创建日期: 2011-08-10
'作者信息: zhangkai
'运行环境: vbs
'处理参数
MonSubject="DiskIO"
SetArgs=WScript.Arguments
If(Args.Count<1)Then
Wscript.EchoMonSubject&"-1:commandlineerror"
WScript.Quit(3)
EndIf
strcid=Args(0)
'获取工作目录
tmparr=Split(Wscript.ScriptFullName,"\",-1)
g_strworkdir=tmparr(0)
narr=UBound(tmparr,1)
Fori=1tonarr-3
g_strworkdir=g_strworkdir&"\"&tmparr(i)
Next
'装载公共库
setg_fileSys=createObject("Scripting.FileSystemObject")
SubincludeFile(fSpec)
dimfile,fileData
setfile=g_fileSys.openTextFile(fSpec)
fileData=file.readAll()
file.close
executeGlobalfileData
setfile=nothing
endsub
includeFileg_strworkdir&"\nagios\libexec\libcomm.vbs"
'输出版本和帮助信息
getverhelpstrcid,"v1.00",""
strComputer="."
SetobjWMIService=GetObject("winmgmts:"&"{impersonationLevel=impersonate}!\\"&strComputer&"\root\cimv2")
'第1次采样IO
SetcolItems=objWMIService.ExecQuery("Select*fromWin32_PerfRawData_PerfDisk_LogicalDiskwherename='_Total'",,48)
ForEachobjItemincolItems
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.Sleep1000
SetcolItems=objWMIService.ExecQuery("Select*fromWin32_PerfRawData_PerfDisk_LogicalDiskwherename='_Total'",,48)
ForEachobjItemincolItems
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利用率
IfBaseTime2-BaseTime1=0Then
strio="Name=_Toltal" &",PercentDiskTime=0%"
Else
PercentDiskTime=(DiskTime2-DiskTime1)/(BaseTime2-BaseTime1)*100
strio="Name=_Total" &",PercentDiskTime=" &PercentDiskTime
EndIf
'获取DiskBytes/sec
IfTimeValue2-TimeValue1=0Then
strdiskbyte=",DiskBytesPerSec=0"
Else
DiskBytesPerSec=(DiskBytes2-DiskBytes1)/((TimeValue2-TimeValue1)/TimeBase)
strdiskbyte=",DiskBytesPerSec=" &DiskBytesPerSec
EndIf
'获取DiskReadBytes/sec
IfTimeValue2-TimeValue1=0Then
strdiskreadbyte=",DiskReadBytesPerSec=0"
Else
DiskReadBytesPerSec=(DiskReadBytes2-DiskReadBytes1)/((TimeValue2-TimeValue1)/TimeBase)
strdiskreadbyte=",DiskReadBytesPerSec=" &DiskReadBytesPerSec
EndIf
'获取DiskWriteBytes/sec
IfTimeValue2-TimeValue1=0Then
strdiskwritebyte=",DiskWriteBytesPerSec=0"
Else
DiskWriteBytesPerSec=(DiskWriteBytes2-DiskWriteBytes1)/((TimeValue2-TimeValue1)/TimeBase)
strdiskwritebyte=",DiskWriteBytesPerSec=" &DiskWriteBytesPerSec
EndIf
'获取Avg.Disksec/Transfer
IfAvgDiskTransferBase2-AvgDiskTransferBase1=0Then
stravgdisktran=",AvgDiskSecPerTransfer=0"
Else
AvgDiskSecPerTransfer=((AvgDiskTransfer2-AvgDiskTransfer1)/TimeBase)/(AvgDiskTransferBase2-AvgDiskTransferBase1)
stravgdisktran=",AvgDiskSecPerTransfer=" &AvgDiskSecPerTransfer
EndIf
'获取Avg.Disksec/Read
IfAvgDiskReadBase2-AvgDiskReadBase1=0Then
stravgdiskread=",AvgDiskSecPerRead=0"
Else
AvgDiskSecPerRead=((AvgDiskRead2-AvgDiskRead1)/TimeBase)/(AvgDiskReadBase2-AvgDiskReadBase1)
stravgdiskread=",AvgDiskSecPerRead=" &AvgDiskSecPerRead
EndIf
'获取Avg.Disksec/Write
IfAvgDiskWriteBase2-AvgDiskWriteBase1=0Then
stravgdiskwrite=",AvgDiskSecPerWrite=0"
Else
AvgDiskSecPerWrite=((AvgDiskWrite2-AvgDiskWrite1)/TimeBase)/(AvgDiskWriteBase2-AvgDiskWriteBase1)
stravgdiskwrite=",AvgDiskSecPerWrite=" &AvgDiskSecPerWrite
EndIf
'获取CurrentDiskQueueLength
strdisklength=",CurrentDiskQueueLength=" &CurrentDiskQueueLength
Wscript.EchoMonSubject&"0:OK|"&strio&strdiskbyte&strdiskreadbyte&strdiskwritebyte&stravgdisktran&stravgdiskread&stravgdiskwrite&strdisklength
用到了WMI,需要的朋友可以参考一下