磁盘IO利用率监控VBS脚本(windows)
- 作者: 闲的蛋掉毛
- 来源: 51数据库
- 2021-07-05
核心代码
'程序名称: 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,需要的朋友可以参考一下
推荐阅读
