单位所使用的电话报修的录音盒子是力盈力泰的,盒子有一个web管理终端。为了监控盒子的状态,当盒子网络中断或恢复时希望能收到消息通知。

设计思路是这样的,通过python的列表data存储服务检测状态。
data = [False, False]
两个字段,第一个字段存上次检测结果,第二个字段存此次检测结果。如果两次结果不同则发告警消息,如果相同说明状态没有变化,不发消息。再通过cPickle将列表结果存入文件,做数据持久化,方便下次读取检测状态。
测试代码如下:
# -*- coding: utf-8 -*-#!/bin/pythonimport telnetlibimport sysimport cPickleimport unioutimport osdatafile = sys.argv[1]# 第一个字段存上一次测试结果# 第二个字段存此次测试结果data = [False, False]# 初始化if not os.path.exists(datafile):f = open(datafile,'w')cPickle.dump(data, f)f.close()fin = open(datafile)data = cPickle.load(fin)fin.close()m = Truetry:telnetlib.Telnet(sys.argv[1], port='80', timeout=3)except:data[1] = Falseelse:data[1] = Trueif data[0] == data[1]:# print('do not send msg')m = Trueelse:if data[1]:print(sys.argv[1] + ' 设备网络恢复!')else:print(sys.argv[1] + ' 设备网络不通!')data[0] = data[1]m = Falsefou = open(datafile, 'w')cPickle.dump(data, fou)fou.close()if m:exit(0)else:exit(-1)
第一次执行时数据初始化,默认为设备不通。执行结果为:
root@ns-xxzx-svr:~/scripts# python cip.py 192.168.23.26192.168.23.26 设备网络恢复!
当状态没有变化时返回0,状态有变化时,shell返回值为255,并打印设备状态变化。
检测设备状态的脚本已准备好了,下面准备把它包一层给钉钉发消息。钉钉群机器人API可接收Post请求,然后将收到的消息转发到钉钉群里。
首先我们要在钉钉群里添加一个机器人

因为我们有三部电话录音盒子要监控状态

所以我们在脚本里将三次告警的信息组合成一条。当三个设备中任意一个设备出现网络中断时,将通过钉钉发送告警。
#!/bin/bashcd root/scriptsS0=`/usr/bin/python cip.py 192.168.23.26`M0=$?S1=`/usr/bin/python cip.py 10.3.41.196`M1=$?S2=`/usr/bin/python cip.py 172.18.19.150`M2=$?if test $[M0+M1+M2] = "0" ; thenexit 0fiS=""if test $M0 = "0" ; thenS=""elseS=$S" \n\n "$S0fiif test $M1 = "0" ; thenS=$S""elseS=$S" \n\n "$S1fiif test $M2 = "0" ; thenS=$S""elseS=$S" \n\n "$S2fifilec=`mktemp`FORTUNE=`fortune`DATE=/bin/dateN=`awk -v min=1 -v max=500 'BEGIN{srand(); print int(min+rand()*(max-min+1))}'`TIMEA=`$DATE +"%Y-%m-%d %H:%M"`variable=$(cat <<SETVAR{"msgtype": "markdown", "markdown":{ "title":"监控报警","text": "$FORTUNE \n\n*更新时间: ${TIMEA}*\n\n## 维保保设备状态监听:\n $S \n" }}SETVAR)param="'"$variable"'"ACCESS_TOKEN=XXXXXXXXXXXX #your access tokencat >$filec <<EOFcurl "https://oapi.dingtalk.com/robot/send?access_token=$ACCESS_TOKEN" \-H 'Content-Type: application/json' \-d $paramEOFecho $filecbash $filececho "#============CLEAN TEMP FILE==========="rm -v $filec
最终钉钉群将收到告警消息:

文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




