背景:由于負責基礎雲平台,部署在雲上的業務調試中,遇到很多的問題(如端口不通),中間會出現一些扯皮的事,背鍋不斷,有沒證據,于是臨時寫了一個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、增加多線程實作方式