import paramiko
#获取ssh连接并执行shellcomand返回正确的结果
def doshell(hostname,port,username,password,shellcommand):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname,port,username,password)
stdin, stdout, stderr = ssh.exec_command(shellcommand)
result=stdout.readlines()
ssh.close()
return result
#查询内存情况
def check_mem(hostname,port,username,password):
shellcommand = ‘free -m‘
result=doshell(hostname,port,username,password,shellcommand)
line_number=0
for line in result:
rs = line.split()
if line_number == 0:
print(‘[主机地址]%s‘ % hostname)
print("[内存]")
elif line_number == 2:
print(‘程序使用:%s%s ‘ % (rs[2], ‘M‘))
print(‘系统挪用:%s%s ‘ % (rs[3], ‘M‘))
print("[swap]")
else:
print(‘总大小:%s%s ‘ % (rs[1], ‘M‘))
print(‘空闲内存:%s%s ‘ % (rs[3], ‘M‘))
line_number += 1
#检查硬盘情况
def check_disk(hostname,port,username,password,part):
shellcommand = ‘df -h ‘+part
result = doshell(hostname, port, username, password, shellcommand)
line_number = 0
for line in result:
rs = line.split()
if line_number == 0:
#print(‘[主机地址]%s‘ % hostname)
print("[硬盘]")
else :
print(‘分区:%s ‘ % (rs[0]))
print(‘总大小:%s ‘ % (rs[1]))
print(‘空闲空间:%s ‘ % (rs[3]))
line_number += 1
#检查表空间
def check_tablespace(hostname,port,username,password,sid):
shellcommand = "export ORACLE_HOME=/whmms/oracle/db11g/;export PATH=$ORACLE_HOME/bin:$PATH;export ORACLE_SID=MSPROD; sqlplus wuyang/wy123456@%s/%s </tmp/tablespace.sql"%(hostname,sid)
result=doshell(hostname,port,username,password,shellcommand)
print(‘[表空间]‘)
for line in result:
finded=line.find(‘DATA_TBS‘)
if finded != -1:
rs = line.split()
print(‘表空间名称:%sG‘ % (rs[0]))
print(‘总大小:%sG‘ % (rs[1]))
print(‘已使用:%sG‘ % (rs[2]))
print(‘空闲:%sG‘ % (rs[3]))
print(‘使用率:%sG‘ % (rs[4]))
新建一个文件调用写好的方法,每次执行main.py脚本会将检查结果记录在log.txt中 如何不存在log.txt 会报错,由于是简单检测所以没有写自动生成log.txt的代码 如果需要检测大量机器建议使用多线程
main.py
import check
import sys
import time
#主机列表
hosts=[‘172.16.1.20‘,‘172.16.1.21‘]
#端口号
port = 22
#用户名
username = ‘rzfb‘
#密码
password = ‘password‘
#需要检查的分区
part = ‘/dev/mapper/VolData-lvdata‘
#oracle_sid
sid = "MSPROD"
#将print输出保存到文件中
output=sys.stdout
outputfile=open("log.txt","a")
sys.stdout=outputfile
type = sys.getfilesystemencoding()
#记录执行时间
print(time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime(time.time())))
#逐个主机检查运行情况
for hostname in hosts:
if hostname == ‘172.16.1.21‘:
#两个数据库的sid不同所以在这里做了个判断
sid="WHMTST"
check.check_mem(hostname,port,username,password)
check.check_disk(hostname,port,username,password,part)
check.check_tablespace(hostname,port,username,password,sid)
print("\n\n")
python 简单监控内存/硬盘空间/以及oracle表空间使用情况
原文地址:http://blog.51cto.com/13466287/2113832