【他人原创】机房温度监控--SecureCrt的实现

jackxiang 2010-10-7 11:41 | |


    注:本文系博主原创文章,转载请注明出处。



===========================================一号分割线========================================

    思科、华为等多层交换机一般都自带了板卡温度检测功能,对于这些骨干机房,若没有安装温度报警远程监控等设备的,可以使用思科、华为设备的温度自检功能来实现对机房温度的控制。

    系统的实现的过程是,登陆相应的设备,使用show environment 命令,查询温度,再利用VB脚本功能,提取出相应的关键字,并判断温度。此外再结合计划任务功能,可以实现定时检测报警功能。

    这边仅以Cisco 7609,4006等设备为例,说明其实现的过程。

    -----------------------------------分割线------------------------------------------------

    第一步:SecureCRT脚本编写,代码如下

#$language = "VBScript"
#$interface = "1.0"

'||=================================||
'||Query BackBone Switch Temperature||
'||Edit By 王敩                     ||
'||2009-6-26                        ||
'||Ver 1.0                          ||
'||=================================||


'===========Start Define Global Parameters=========
Dim FSO
Dim line
Dim SwitchArr(4,3)  '设备列表,行数代表设备数量,列用于存放相关数据
Dim SplitKeyW(4,2) '取字符用关键字列表
Dim TempString '临时存放温度相关行
Dim NowRow '存放当前光标所在行号

'常量定义
Const ForReading = 1
Const ForAppending=8
Const ForWriting=2
Const HighTemperatureAlarmFile="D:\SecureScript\roomtemphigh.wav"
Const HighTemperatureShowFile="D:\温度过高.txt"
beep = chr(007)

'定义数据库连接
Set conn=CreateObject("ADODB.Connection")
conn.Open"driver={sql server};server=x.x.x.x;uid=sa;pwd=sa;"&"database=NMC;"

'数组定义
SwitchArr(0,0)="x.x.x.x"
SwitchArr(0,1)="19"  '代表温度关键字所在的行,用于SecureCRT
SwitchArr(0,2)="设备一"
SwitchArr(1,0)="y.y.y.y"
SwitchArr(1,1)="4"
SwitchArr(1,2)="设备二"
SwitchArr(2,0)="z.z.z.z"
SwitchArr(2,1)="4"
SwitchArr(2,2)="设备三"
SwitchArr(3,0)="w.w.w.w"
SwitchArr(3,1)="4"
SwitchArr(3,2)="设备四"

SplitKeyW(0,0)="temperature:"    '温度字符前面的字符
SplitKeyW(0,1)="C"               '温度字符后面的字符
SplitKeyW(1,0)="="
SplitKeyW(1,1)="degre"
SplitKeyW(2,0)="="
SplitKeyW(2,1)="degre"
SplitKeyW(3,0)="="
SplitKeyW(3,1)="degre"

'==============================Main Sub=======================================================
Sub main
    '数据库路径及连接参数
    pass="*******"      '登陆设备的密码
    username="*******"  '登陆设备的用户名

For i=0 To 3
   '连接设备,通过堡垒主机中转
  crt.Screen.WaitForString "2,3]"
  crt.Screen.Send "1" & VbCr
  crt.Screen.WaitForString "ip address and Enter:"
  crt.Screen.Send SwitchArr(i,0) & VbCr
  
  'crt.sleep 2000
  If (crt.Screen.WaitForString("Username:",5))=True Then
   crt.Screen.Send username & VbCr
   crt.Screen.WaitForString("Password:")
   crt.Screen.Send pass & VbCr
   crt.Screen.WaitForString ">",5
   crt.Screen.Send "show environment temperature" & VbCr
   crt.Screen.WaitForString ">",5
   NowRow=crt.Screen.CurrentRow '取得当前光标所在行号
   TempString=crt.Screen.Get2 (NowRow-Int(SwitchArr(i,1)),1,NowRow-Int(SwitchArr(i,1)),50)  '提取温度所在行

   KeyStringStart=InStr(TempString,SplitKeyW(i,0))
   KeyStringEnd=InStr(TempString,SplitKeyW(i,1))
   If KeyStringStart<>0 And KeyStringEnd<>0 Then
    TemperatureStr=Mid(TempString,KeyStringStart+Len(SplitKeyW(i,0)),KeyStringEnd-(KeyStringStart+Len(SplitKeyW(i,0))))

    '温度大于36度报警,一般36度对应机房温度在23度左右
    If Int(TemperatureStr)>36 Then
     set wshShell = CreateObject("wscript.Shell")
     '使用文本文件显示报警,同时播放五次声音
     WshShell.Run "cmd /c @echo 时间:{"&Now()&"}机房:{"&SwitchArr(i,2)&"温度过高:"&TemperatureStr&"度}>"&HighTemperatureShowFile
     WshShell.Run "notepad.exe "&HighTemperatureShowFile
     'WshShell.Run "cmd /c @echo " & beep& beep& beep& beep, 0
     WshShell.Run HighTemperatureAlarmFile
     crt.sleep 2000
     WshShell.Run HighTemperatureAlarmFile
     crt.sleep 2000
     WshShell.Run HighTemperatureAlarmFile
     crt.sleep 2000
     WshShell.Run HighTemperatureAlarmFile
     crt.sleep 2000
    End If

    '准备将温度写入数据库
    strSqlInsert="insert into AutoLog_RoomTemperature (TemperatureTime,Temperature,TemperatureRoom) values ('"&Now()&"','"&TemperatureStr&"','"&SwitchArr(i,2)&"')"
    conn.Execute(strSqlInsert)
   Else
    set wshShell = CreateObject("wscript.Shell")
    WshShell.Run "cmd /c @echo 时间:{"&Now()&"}机房:{"&SwitchArr(i,2)&"关键字出错,开始字符:{"&KeyStringStart&"}结束字符:{"&KeyStringEnd&"}"
    WshShell.Run "notepad.exe "&HighTemperatureShowFile
   End If
   crt.Screen.Send "exit" & VbCr
  End If
Next
crt.Screen.WaitForString "2,3]"
crt.Screen.Send "3" & VbCr
crt.session.disconnect()
crt.quit
End Sub

---------------------------------------分割线-----------------------------------------------

完了后保存为vbs文件,同时在SecureCrt里创建一会话,名字为checkTemperature,并勾选登陆脚本,选择该脚本。

然后再创建一计划任务,任务运行"C:\Program Files\SecureCRT\SecureCRT.EXE" /S checkTemperature,日程安排 里高级选项中使用重复任务,每20分钟检测一次。

然后就可以测试运行效果了。



总结:

    该脚本考虑到实际情况,一般监控中心肯定有人在的,所以没有加入登陆失败的处理代码;登陆出错时,人工操作一下就行了,一般是由于网络时延过大引起的。有需要的朋友可以自己加。

    华为的设备原理是一样的,只不过关键字可能不一样。大家可以自己根据情况添加。

    欢迎大家共同讨论与提高
来源:http://blog.sina.com.cn/s/blog_49cd61e70100drhx.html

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/3613/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]