磁盘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,需要的朋友可以参考一下