python 简单监控内存/硬盘空间/以及oracle表空间使用情况

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 简单监控内存/硬盘空间/以及oracle表空间使用情况相关的知识,希望对你有一定的参考价值。

由于使用的是内网环境,所以使用用户名密码验证,建议使用密钥认证
check.py

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/[email protected]%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表空间使用情况的主要内容,如果未能解决你的问题,请参考以下文章

实时监控本机内存和硬盘剩余空间,剩余内存小于 500M根分区剩余空间小于 1000M 时,发送报警

Zabbix 监控ESXi服务器非虚拟机CPU内存硬盘网络带宽

zabbix监控orace

Python全栈之路Day5(补)

服务器性能检测脚本(CPU内存硬盘空间)

操作系统性能监控之内存监控