用Ubuntu+SecureCRT实现客户内网控制器的进程状态监控

一、使用场景描述:

    用户有一台控制器的三个组件需要进行端口监控,控制器主机因为跟办公网络未在同一个网络区域,因此不能使用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时将告警推送到飞书,以实现一部手机就能随时监控控制器的状态的目的。此部分代码自认为太垃圾,不再献丑了。

四、总结

    总的来说,这个方法解决了目前业务监控的需求,也避免了多次登录控制器执行重复的命令,释放了人力,节省了时间,空出来了
posted @ 2022-12-07 15:22  我爱编程到完  阅读(153)  评论(0编辑  收藏  举报