一、使用场景描述:
用户有一台控制器的三个组件需要进行端口监控,控制器主机因为跟办公网络未在同一个网络区域,因此不能使用ssh进行直连进行监控。客户现场环境如下(见下图):
【1】办公区域网络与用户区的一台跳板机网络互通
【2】用户区跳板机能ssh登录DMZ区一台测试主机
【3】DMZ测试主机能ssh登录DMZ区的生产控制器主机
为了实现控制器主机进程端口的监控,做了本监控方案,来节省运维时间
二、实现思路分析
本实验想要达到的目的是使用脚本登录控制器,然后获取控制器返回值得到控制器进程端口状态是否正常。
如上设想的第一步及计划使用pexpect模块编写脚本以实现所想要的数据,但是在实现到控制器查询的步骤时,因为控制器系统的限制,脚本无法返回查询数据,因此本设想的实现到此失败。
第二个设想是利用SecureCRT的自动登录查询并记录session日志,然后通过python脚本分析session日志来实现控制器进程状态的监控。
这个设想的可行性比较大,因此做了进一步实现,如下步骤均为本设想实现的操作步骤。
三、环境准备
1、ubuntu主机
本设想的实现需要有一台ubuntu 20.04.3LTS 桌面的主机,主要是安装SecureCRT,跑CRT的定时查询以及python分析脚本,SecureCRT在ubuntu上的安装不在赘述,自行百度就好。
这里使用ubuntu上的CRT主要是因为在命令行中调用CRT的session极其简单。
2、CRT创建session
【1】编辑登录脚本
选择想要自动登录的session----右键---properties---logon actions,勾选automate logon
【2】添加登录规则
这里需要注意的是,在发送密码的时候需要在密码后添加换行符\r,以实现输入密码后自动键入回车
【3】测试自动登录规则
【4】记录session日志
勾选start log upon connect
勾选overwrite file
填写生成的日志文件(文件的名称可以随意,固定格式或者按照执行时间进行记录均可),本实验中使用固定文件名
【5】使用定时任务进行登录查询
这一部分比较有趣,操作起来比windows上要简单一些,主要分以下两个步骤:
(1)使用命令启动CRT,并且调用刚才编辑好的session,这个操作非常简单,如下:
/usr/bin/SecureCRT /S "192.168.2.104" &
(2)使用定时任务调用session,实现定时巡检的目的,这一块直接crontab就可以,不再赘述
注意:本步骤中的session启动后不会自己停止,所以session启动一段时间后需要自己添加一个kill进程的动作来杀死已经运行的进程,以免CRT进程启动过多而导致ubuntu主机被拖垮。
如下是我的脚本中使用的方式,仅供参考。
os.system('/usr/bin/SecureCRT /S "192.168.2.104" &')
os.system('/usr/bin/SecureCRT /S "192.168.2.105" &')
time.sleep(20)
os.system("ps -ef |grep SecureCRT|grep 192.168.2.104|awk '{print $2}'|xargs kill -9 ")
os.system("ps -ef |grep SecureCRT|grep 192.168.2.105|awk '{print $2}'|xargs kill -9 ")
【6】编写python或shell脚本
这一部分主要是针对session日志进行处理,获取自己想要的数据即可。
我的脚本需求是获取控制器端口状态,状态为up时跳过,状态为down时将告警推送到飞书,以实现一部手机就能随时监控控制器的状态的目的。此部分代码自认为太垃圾,不再献丑了。
四、总结
总的来说,这个方法解决了目前业务监控的需求,也避免了多次登录控制器执行重复的命令,释放了人力,节省了时间,空出来了
标签:控制器,登录,CRT,session,监控,Ubuntu,SecureCRT
From: https://www.cnblogs.com/xieqisheng666/p/16963193.html