背景:由于负责基础云平台,部署在云上的业务调试中,遇到很多的问题(如端口不通),中间会出现一些扯皮的事,背锅不断,有没证据,于是临时写了一个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、增加多线程实现方式