python 实现多台UNIX服务器自动巡检
2012年01月06日
工作需要,每天要对系统内的多台LINUX服务器做巡检,主要检查的内容有CPU,内存,进程,硬盘空间等。
想来想去觉得还是用PYTHON来实现比较容易。平台移植性比较好。
查了很多关于PYTHON SSH联接的文档。需要用到pexpect 或paramiko 中的一个包,后来发现这两个包安装到WINDOW下比较麻烦。
经过多次偿试未成功。(实在没办法,很好的东西,哪位高手用成功了,可以交流交流。)最终选定用TELENET来实现,还好平台内网都支持TELNET。
进入正题:
思路如下:每天自动联接到服务器上运行服务器的命令。然后把结果存储到文件中,最后把结果发邮件出来。
主程序:autoMonitor.py
import ConfigParser
import base64,time,telnetlib,os,struct,smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
def WriteLog(filename,tmpstr):
time_str = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
logstr = str(tmpstr) + '\n'
f = open(filename,"a")
f.write(logstr)
f.close()
def getConfigFile(configFile):
iconfs=[]
Config = ConfigParser.ConfigParser()
Config.read(configFile)
confFiles=Config.items("Config")
for conf in confFiles:
iconfs.append(conf[1])
return iconfs
def readConfig(configFile):
coms=[]
Config = ConfigParser.ConfigParser()
Config.read(configFile)
host = Config.get("BASEINFO","HOST")
user = Config.get("BASEINFO","USERNAME")
pwd = base64.b64decode(Config.get("BASEINFO","PASSWORD"))
poi = Config.get("BASEINFO","POINTING")
commands = Config.items("COMMANDS")
for com in commands:
coms.append(com[1])
return host,user,pwd,poi,coms
def TelNet(host,user,pwd,poi,coms,outprintFile):
time_str = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
WriteLog(outprintFile,host+" \n" + time_str)
tn=telnetlib.Telnet(host)
tn.read_until("login:")
tn.write(user+"\n")
if pwd:
tn.read_until("Password:")
tn.write(pwd + "\n")
# print "tn.pwd\n"
tn.write("vt100\n")
tn.read_until(poi)
for com in coms:
# if poi=="$":
print poi
tn.write(com + "\n")
abc = tn.read_until(poi)
print abc
WriteLog(outprintFile,abc)
# time.sleep(1)
tn.write("exit\n")
# print "exit\n"
# print "test\n"
#print tn.read_all()
# tn.interact()
WriteLog(outprintFile,tn.read_all())
tn.close
WriteLog(outprintFile,"======================================================================================\n")
print "host=" + host + "checked OK!"
def getMailConfig(configFile):
coms=[]
Config = ConfigParser.ConfigParser()
Config.read(configFile)
host = Config.get("FROM","HOST")
user = Config.get("FROM","USERNAME")
subject = Config.get("FROM","SUBJECT")
pwd = base64.b64decode(Config.get("FROM","PASSWORD"))
commands = Config.items("TO")
for com in commands:
coms.append(com[1])
return host,user,pwd,subject,coms
def SendMail(configFile,sendfile):
host,user,pwd,subject,coms=getMailConfig(configFile)
_tos=""
for _to in coms:
_tos = _tos + _to + ";"
msg = MIMEMultipart()
# att = MIMEText("test mail")
att = MIMEText(open(sendfile,'rb').read(),'base64','gb2312')
att["Content-Type"] ='application/octet-stream'
att["Content-Disposition"]='attachment;filename="'+sendfile+'"'
# msg.attach(att)
# msg['to']=coms
msg['from']=user
msg['to']=_tos
msg['subject']=subject
msg.attach(att)
try:
smtp_svr=smtplib.SMTP()
smtp_svr.connect(host,"25")
except (smtplib.SMTPConnectError,socket.error):
print "connect error"
try:
smtp_svr.login(user,pwd)
except smtplib.SMTPAuthenticationError:
print "authentication error\n"
try:
smtp_svr.sendmail(user,coms,msg.as_string())
except (smtplib.SMTPRecipientsRefused,smtplib.SMTPDataError,smtplib.SMTPServerDisconnected):
print "send mail error"
smtp_svr.close
if __name__=='__main__':
iconfs=getConfigFile("ini/auto.ini")
logfile = "log/" + time.strftime("%Y-%m-%d",time.localtime())+"_log.txt"
for iconf in iconfs:
host,user,pwd,poi,coms = readConfig("ini/" + iconf)
# print host,user,pwd
TelNet(host,user,pwd,poi,coms,logfile)
time.sleep(5)
SendMail("ini/Mail.ini",logfile)
print "send mail ok"
#print base64.b64encode("ff")
配置文件:
auto.ini:需要巡检的服务器
;基本的配置信息
[Config]
machines1=1.ini
machines2=2.ini
machines3=3.ini
machines4=4.ini
machines5=5.ini
machines6=6.ini
Mail.ini:发邮件设置
;基本的配置信息
[FROM]
;主机IP
HOST = 163.com
;远程ssh主机用户名
USERNAME = XXX@163.com
;远程ssh主机密码,做base64加密处理
PASSWORD = aahhefdnaA==
;邮件标题
SUBJECT = 邮件标题
;命令列表
[TO]
1:aaa@163.com
2:aaa1@163.com
3:aaa2@163.com
最后建auto.ini里面配置的具体服务器配置
;基本的配置信息
[BASEINFO]
;主机IP
HOST = 192.168.1.119
;远程ssh主机用户名
USERNAME = oracle
;远程ssh主机密码,做base64加密处理
PASSWORD = ZaZjc3ekYlAdMjAxMM8=
;远程ssh主机端口
PORT = 22
;SH提示符
POINTING = $
;命令列表
[COMMANDS]
1:./shell/checksys.sh
;1:/usr/sbin/swapinfo -a | grep memory |awk '{print $5}'
;2:bdf
;3:ps -ef |grep java | grep -v grep|wc -l
;4:ps -ef |grep agent| grep -v grep|wc -l
注:命令列表里写的是你想要查的内容。
建议还是把所有的内容写在服务器的一个SH里。。这里只调用一个sh即可。
我的checksys.sh
echo "***********CPU***********"
vmstat | sed -n 3p |awk '{print "CPU_ider="$18"%\nCPU_System_Use="$17"%\nCPU_User_Use="$16"%\n"}'
echo "**********Memory*********"
/usr/sbin/swapinfo -a | grep memory |awk '{print "Memory_used="$5"\n"}'
echo "***********disk**********"
bdf
echo "**********agent**********"
ps -ef |grep agent|grep -v grep |wc -l|awk '{print "agentCount="$1}'
所有事情都完成后,用py2exe把成exe包。就可以在window平台上用了。
其实应用的地方挺广的。还有很大的改进空间。欢迎交流。
发表评论
-
C和C++之间库的互相调用
2012-01-20 12:20 643C和C++之间库的互相调用 2011年01月19日 1. ... -
linux文件缓冲区
2012-01-20 12:20 990linux文件缓冲区 2011年01 ... -
字母大小写转换可以不用循环吗
2012-01-20 12:20 716字母大小写转换可以不用循环吗 2011年03月22日 2 ... -
VC6下将ANSI程序转化为UNICODE基本步骤
2012-01-20 12:20 1220VC6下将ANSI程序转化为UNI ... -
Linux0.11内核--汇编和C语言混合编程之参数传递
2012-01-20 12:20 770Linux0.11内核--汇编和C语言混合编程之参数传递 2 ... -
3月编程语言排行榜:C#超Python和PHP
2012-01-19 17:01 8043月编程语言排行榜:C#超Python和PHP 2011年0 ... -
python os模块
2012-01-19 17:01 1015python os模块 2011年05月22日 os.l ... -
2010年IT薪酬报告:java,apex,python,windows技术最赚钱
2012-01-19 17:01 7722010年IT薪酬报告:java,apex ... -
初学Python有感!!!
2012-01-19 17:01 566初学Python有感!!! 2011年01月25日 ... -
VC++6.0实现超链接
2012-01-17 06:46 1203VC++6.0实现超链接 2011年 ... -
经典的串口调试助手源代码(一)
2012-01-17 06:46 838经典的串口调试助手源代码(一) 2011年05月26日 ... -
经典的串口调试助手源代码(一)
2012-01-17 06:46 1123经典的串口调试助手源代码(一) 2011年04月26日 ... -
转 Windows API 函数在VFP中的运用
2012-01-17 06:46 1178转 Windows API 函数在VFP中的运用 2010年 ... -
VB-2.1
2012-01-17 06:46 679VB-2.1 2011年09月26日 Option E ... -
越南攻略
2012-01-16 05:36 566越南攻略 2010年07月02日 ... -
去越南相亲吧~~~~~
2012-01-16 05:36 588去越南相亲吧~~~~~ 2011年05月04日 越南,一 ... -
谷歌找客户的方法
2012-01-16 05:35 566谷歌找客户的方法 2011年12月16日 Wind怎么利 ...
相关推荐
NULL 博文链接:https://lichuanbao.iteye.com/blog/1855057
通过Python脚本,自动巡检网络设备,并将巡检结果输出到附件,邮件发送。使用的是Python的telnetlib模块
目前Linux下有一些使用Python语言编写的Linux系统监控工具比如inotify-sync(文件系统安全监控软件)、glances(资源监控工具)在实际工作中,Linux系统管理员可以根据自己使用的服务器的具体情况编写一下简单实用的...
基于python写的服务器资源巡检程序,每日定时巡检指定服务器资源、服务情况,输出execl,问题故障标红显示等
根据主机信息和自定义的shell命令,批量巡检操作系统,并将巡检结果汇总到一个excel文件中。
学习Python网络通信的时候发现书上只有一个服务端对应一个客户端的情形,于是自己想自己动手实现一个服务端响应多个客户端。 首先建立服务器的socket来监听客户端的请求: tcpSerSock=socket(AF_INET,SOCK_STREAM) ...
最近发现Python课器做很多事情,在监控服务器有其独特的优势,耗费资源少,开发周期短。 首先我们做一个定时或者实时脚本timedtask.py,让其定时监控目标服务器,两种方式: 第一种: #!/usr/bin/env python # -*- ...
此脚本功能主要是远程服务器进行日常巡检,比如CPU型号,内存,网络,系统版本,系统名称,登录错误日志,当前登录的数量,以及dmesg错误日志,会输入到表格中,适合运维人员,需要在此脚本的目录下创建名为"Linux监控信息.xlsx...
python实现自动贪吃蛇效果实现python实现自动贪吃蛇效果实现python实现自动贪吃蛇效果实现python实现自动贪吃蛇效果实现python实现自动贪吃蛇效果实现python实现自动贪吃蛇效果实现python实现自动贪吃蛇效果实现...
使用python编写的轻量级查看日志工具 可以实现同时查看多台服务器日志 使用paramiko模块 首先下载多台服务器日志到本地,然后在本地查询并显示查询结果 config.py文件中配置服务器信息 demo.py文件为项目入口
基于python轻松实现批量ssh工具管理多台linux服务器.docx
基于python实现的京东预约商品自动下单源码(下载即用).zip 基于python实现的京东预约商品自动下单源码(下载即用).zip 基于python实现的京东预约商品自动下单源码(下载即用).zip 基于python实现的京东预约商品...
基于python实现的linux后台日志监控小项目
这里的代理服务器,是指二级代理服务器。比如:A可以访问B,B可以访问C,A不能直接访问C。这时,如果在B开一个二级代理,就可实现A访问C。现有的工具有CCProxy。...这里就是使用Python简单的实现一个二级代理。
Python实现邮箱(以QQ邮箱为例)自动化处理,包括自动发送、读取、删除、定时发送等等 目录 1 模块介绍与安装 2 利用Python发送邮件 2.1 发送一封简单的电子邮件 2.2 发送含HTML样式的电子邮件 2.3 发送带附件的...
python使用ssh实时得监多台服务器信息,能做到及时预防得效果,不至于那台服务器宕机了还要排查一下
python实现桌面壁纸自动更换(附源码) 轻松实现桌面壁纸自动切换
主要使用了python 来实现获取旺旺用户的聊天内容 然后过滤得到用户聊天内容,实现 消息发送 发送email 或者 向聊天内容发送图片 只需要调整相应参数即可,可供参考
通过telnet自动登录设备,自动分析巡检命令输出,然后汇总异常的信息到指定文件,同时记录整个登录的会话日志
一个个的录入十分麻烦,而且容易出错,于是我使用PYTHON写了一个从EXCEL里面读出成绩,然后自动录入到网页里的小程序,原来半个小时的工作,一下子缩短到只有一分钟不到。就非常NICE。 使用方法: 1,安装openpyxl ...