[原創]磁碟IO利用率監控VBS指令碼(W…
'程式名稱:
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