пятница, 27 ноября 2015 г.

Zabbix. Мониторим состояние Cluster Shared Volume на Hyper-V 2008

Делаем новый шаблон, новое правило обнаружения.
В правиле обнаружения указываем данный скрипт, например: cscript /nologo \\zabbix\zabbix_scripts\win32_volumes.vbs

Прототипы активные.
Первый прототип данных с ключом system.run["cscript /nologo \\zabbix\zabbix_scripts\win32_volumes.vbs {#VOLNAME} free"]
Второй прототип с ключом system.run["cscript /nologo \\zabbix\zabbix_scripts\win32_volumes.vbs {#VOLNAME} total"]
Третий прототип вычисляемый. Формула 100*last(system.run["cscript /nologo \\zabbix\zabbix_scripts\win32_volumes.vbs {#VOLNAME} free"])/last(system.run["cscript /nologo \\zabbix\zabbix_scripts\win32_volumes.vbs {#VOLNAME} total"])

Все, теперь мы видим все тома в Cluster Shared Volume нашего кластера и знаем процент свободного места к общему.
Триггеры и графики Вы и сами себе нарисуете.

Скрипт:

Set objArgs=Wscript.Arguments
If objArgs.Count<0 or objArgs.Count>2 Then Wscript.Quit
If objArgs.Count=2 Then
strVol=lcase(objArgs.Item(0))
strAction=lcase(objArgs.Item(1))
End IF
Set objWMI = GetObject("winmgmts:\\.\ROOT\MSCluster")
strQuery="select * from MSCluster_ClusterSharedVolume"
Set col = objWMI.ExecQuery(strQuery)
If objArgs.Count=0 Then
Wscript.Echo "{" & vbcrlf & vbTab & chr(34) & "data" & chr(34) & ":" & vbcrlf & vbTab & vbTab & "[" & vbcrlf
For Each obj in col
If msg<>"" Then msg=msg & ","
strArr=Split(obj.Name,"\")
strVolume=strArr(Ubound(strArr))
msg=msg & "{" & chr(34) & "{#VOLNAME}" & chr(34) &": " & chr(34) & strVolume & chr(34) & "}"
Next
Wscript.Echo msg & vbcrlf
Wscript.Echo vbcrlf & "]" & vbcrlf & "}"
Else
For Each obj In col
If Instr(1,lcase(obj.Name),strVol)>0 Then
strVolName=obj.VolumeName
If strAction="free" Then
Wscript.Echo GetFree(strVolName)
Elseif strACtion="total" Then
Wscript.Echo GetTotal(strVolName)
End If
End If
Next
End If
Wscript.Quit

Function GetFree(strVolName)
GetFree=0
strQuery="SELECT * FROM MSCluster_DiskPartition"
Set objFreeCol=objWMI.ExecQuery(strQuery)
For Each objPartition In objFreeCol
If lcase(strVolName)=lcase(objPartition.Path) Then GetFree=objPartition.FreeSpace
Next
End Function
Function GetTotal(strVolName)
GetTotal=0
strQuery="SELECT * FROM MSCluster_DiskPartition"
Set objFreeCol=objWMI.ExecQuery(strQuery)
For Each objPartition In objFreeCol
If lcase(strVolName)=lcase(objPartition.Path) Then GetTotal=objPartition.TotalSize
Next
End Function

2 комментария: