天天看點

用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、增加多線程實作方式