天天看点

用Python实现的一个小的端口监控脚本

背景:由于负责基础云平台,部署在云上的业务调试中,遇到很多的问题(如端口不通),中间会出现一些扯皮的事,背锅不断,有没证据,于是临时写了一个Python脚本来作为端口监控,以便做到有理有据

解释:开始想用多线程去做了,但是由于赶飞机,就没去实现。其实任何时候用最简单的才是最稳定和可靠的

import os
import telnetlib
import sys
import time
import logging
from logging import handlers
import threading
//这里可以用配置文件去实现,临时用这种方式替代(以后有时间优化)
db1_ip='10.47.97.137'
db1_port='1433'
db2_ip='10.47.97.138'
db2_port='1433'
//获取当前系统时间,并格式化
currtime =  time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())
//创建日志类
class loggerClient(object):
    def __init__(self, filename):
       self.logger = logging.getLogger(filename)
       fmt = '%(asctime)s-%(pathname)s[line:%(lineno)d]-%(levelname)s:%(message)s'
       format_str = logging.Formatter(fmt)
       self.logger.setLevel(logging.DEBUG)
       sh = logging.StreamHandler()
       sh.setFormatter(format_str)
       th = handlers.TimedRotatingFileHandler(filename='/home/log/'+filename, when='D',backupCount=1,encoding='utf-8')
       th.setFormatter(format_str)
       self.logger.addHandler(sh)
       self.logger.addHandler(th)
//创建telnet类
class TelnetClient(object):
    def __init__(self,log):
      self.tn=telnetlib.Telnet()
      self.log = log
    def telnet_exec(self,host_ip,o_port):
      try:
         self.tn.open(host_ip,port=o_port)
	 print host_ip
         log.logger.info('%s %s successfully connection host ' %(host_ip,o_port))
     except:
         log.logger.warning('%s %s fail to  connection ' %(host_ip, o_port)) 
  if __name__=='__main__':
  //日志输出
   log = loggerClient('zztest.log')
   telnet_client = TelnetClient(log)
   #import pdb;pdb.set_trace()
//端口监测
   o_telnet=telnet_client.telnet_exec(db1_ip,db1_port)
   o_telnet=telnet_client.telnet_exec(db2_ip,db2_port)
   o_telnet=telnet_client.telnet_exec(db3_ip,db3_port)

           

将该程序放到crontab定时计划任务,就可以通过日志监控了,在扯皮的时候,可以根据日期看日志。

该小程序虽然low了点,但是实用,灵活。

后续优化方向:

1、增加配置文件,优化可用性

2、增加多线程实现方式