python实现服务器系统监控

python实现服务器系统监控,第1张

参考文章:python系统性能统计(CPU占用率,磁盘使用率,内存占用率,系统平均负载
参考文章:Python运维自动化psutil 模块详解(超级详细)

模块导入:import psutil

  • 获取服务器内存信息
def bytes2human(n):
    """
    内存单位转换
    :param n:
    :return:
    """
    symbols = ('K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y')
    prefix = {}
    for i, s in enumerate(symbols):
        prefix[s] = 1 << (i + 1) * 10
    for s in reversed(symbols):
        if n >= prefix[s]:
            value = float(n) / prefix[s]
            return '%.1f%s' % (value, s)
    return '%sB' % n
    
def ge_mem_info():
    """
    获取内存信息
    """
    virtual_memory = psutil.virtual_memory()
    virtual_memory_count = bytes2human(virtual_memory.total)
    used_memory = bytes2human(virtual_memory.used)
    free_memory = bytes2human(virtual_memory.free)
    aval_memory = bytes2human(virtual_memory.available)
    memory_percent = virtual_memory.percent
    print(virtual_memory)
    memory_info = "总共内存:%s, 可用内存:%s, 内存使用:%s,使用率%0.1f%%,剩余内存:%s" % (virtual_memory_count,aval_memory,used_memory, memory_percent, free_memory)
    print(memory_info)
   
ge_mem_info()


参考文章:python统计电脑内存,cpu,磁盘使用情况

  • 获取服务器cpu信息
def get_cpu_info():
    """
    获取cpu信息
    """
    # 查看cpu物理个数的信息
    print(u"物理CPU个数: %s" % psutil.cpu_count(logical=False))
    # cpu的使用率
    cpu = (str(psutil.cpu_percent(1))) + '%'
    print("cup使用率: %s" % cpu)
    
get_cpu_info()

参考文章:python 获取内存和cpu的使用率

  • 获取磁盘信息
def get_disk_info():
    """
    获取磁盘信息
    """
    F_BSIZE = 0
    F_BLOCKS = 2
    F_BAVAIL = 4
    # 循环磁盘分区
    for disk in psutil.disk_partitions():
        # 读写方式 光盘 or 有效磁盘类型
        if 'cdrom' in disk.opts or disk.fstype == '':
            continue
        disk_name_arr = disk.device.split(':')
        disk_name = disk_name_arr[0]
        disk_mount = disk.mountpoint
        vfs=os.statvfs(disk_mount)
        print(disk_mount,"--",vfs)
        total_disk=vfs[F_BLOCKS]*vfs[F_BSIZE]
        free_disk=vfs[F_BAVAIL]*vfs[F_BSIZE]
        used_disk=total_disk - free_disk
        used_per=round((float(used_disk)/total_disk)*100, 4)
        # 当前磁盘使用率和剩余空间G信息
        disk_info = "%s盘使用率:%s%%, 剩余空间:%iG" % (disk_name, str(used_per), free_disk//1024//1024//1024)
        print(disk_info)
        
get_disk_info()

  • 获取网络信息
def get_net_info():
    """
    获取网络信息
    """
    # 获取网卡信息,可以得到得到网卡属性,连接数,当前数据等信息
    net = psutil.net_io_counters()
    bytes_sent = '{0:.2f} Mb'.format(net.bytes_recv / 1024 / 1024)
    bytes_rcvd = '{0:.2f} Mb'.format(net.bytes_sent / 1024 / 1024)
    print("网卡接收数据 %s 网卡发送数据 %s" % (bytes_rcvd, bytes_sent))

get_net_info()

参考文章:Python编程——psutil模块的使用详解

服务器系统监控脚本

import psutil
import datetime
import time

def get_sys_info():
    """
    获取系统信息
    """
    # 当前时间
    now_time = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime(time.time()))
    print("当前时间:",now_time)
    # 获取系统启动时间
    print("系统启动时间: %s" % datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S"))
    # 获取系统用户
    users_count = len(psutil.users())
    users_list = ",".join([u.name for u in psutil.users()])
    print("当前有%s个用户,分别是 %s" % (users_count, users_list))

def get_cpu_info():
    """
    获取cpu信息
    """
    # 查看cpu物理个数的信息
    print(u"物理CPU个数: %s" % psutil.cpu_count(logical=False))
    # cpu的使用率
    cpu = (str(psutil.cpu_percent(1))) + '%'
    print("cup使用率: %s" % cpu)

def bytes2human(n):
    """
    内存单位转换
    :param n:
    :return:
    """
    symbols = ('K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y')
    prefix = {}
    for i, s in enumerate(symbols):
        prefix[s] = 1 << (i + 1) * 10
    for s in reversed(symbols):
        if n >= prefix[s]:
            value = float(n) / prefix[s]
            return '%.1f%s' % (value, s)
    return '%sB' % n

def ge_mem_info():
    """
    获取内存信息
    """
    virtual_memory = psutil.virtual_memory()
    virtual_memory_count = bytes2human(virtual_memory.total)
    used_memory = bytes2human(virtual_memory.used)
    free_memory = bytes2human(virtual_memory.free)
    aval_memory = bytes2human(virtual_memory.available)
    memory_percent = virtual_memory.percent
    print(virtual_memory)
    memory_info = "总共内存:%s, 可用内存:%s, 内存使用:%s,使用率%0.1f%%,剩余内存:%s" % (virtual_memory_count,aval_memory,used_memory, memory_percent, free_memory)
    print(memory_info)

def get_disk_info():
    """
    获取磁盘信息
    """
    F_BSIZE = 0
    F_BLOCKS = 2
    F_BAVAIL = 4
    # 循环磁盘分区
    for disk in psutil.disk_partitions():
        # 读写方式 光盘 or 有效磁盘类型
        if 'cdrom' in disk.opts or disk.fstype == '':
            continue
        disk_name_arr = disk.device.split(':')
        disk_name = disk_name_arr[0]
        disk_mount = disk.mountpoint
        vfs=os.statvfs(disk_mount)
        print(disk_mount,"--",vfs)
        total_disk=vfs[F_BLOCKS]*vfs[F_BSIZE]
        free_disk=vfs[F_BAVAIL]*vfs[F_BSIZE]
        used_disk=total_disk - free_disk
        used_per=round((float(used_disk)/total_disk)*100, 4)
        # 当前磁盘使用率和剩余空间G信息
        disk_info = "%s盘使用率:%s%%, 剩余空间:%iG" % (disk_name, str(used_per), free_disk//1024//1024//1024)
        print(disk_info)

def get_pid_info():
    """
    获取进程信息
    """
    # 查看系统全部进程
    for pnum in psutil.pids():
        p = psutil.Process(pnum)
        print("进程名 %-20s  内存利用率 %-18s 进程状态 %-10s 创建时间 %-10s " % (p.name(), p.memory_percent(), p.status(), p.create_time()))

def get_net_info():
    """
    获取网络信息
    """
    # 获取网卡信息,可以得到得到网卡属性,连接数,当前数据等信息
    net = psutil.net_io_counters()
    bytes_sent = '{0:.2f} Mb'.format(net.bytes_recv / 1024 / 1024)
    bytes_rcvd = '{0:.2f} Mb'.format(net.bytes_sent / 1024 / 1024)
    print("网卡接收数据 %s 网卡发送数据 %s" % (bytes_rcvd, bytes_sent))

get_sys_info()
get_cpu_info()
ge_mem_info()
get_disk_info()
get_pid_info()
get_net_info()

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/868371.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存