1.系统资源监控

系统资源相关

pip install psutil

● psutil 获取服务器的硬件信息

○ cpu的核心数 psutil.cpu_count()

○ cpu的使用率 psutil.cpu_percent(interval=0.5)

○ 内存信息 psutil.virtual_memory()

○ 内存的使用率 psutil.virtual_memory().percent

○ 硬盘的分区信息:psutil.disk_partitions()

○ 硬盘的指定路径的硬盘信息:psutil.disk_usage("/")

○ 硬盘的使用率:psutil.disk_usage("/").percent

○ 网络数据信息:

收到的字节数:psutil.net_io_counters().bytes_recv

发送的字节数:psutil.net_io_counters().bytes_sent

基础资源信息查询

# 导入模块
import psutil
import datetime

# 获取cpu核心数
print(psutil.cpu_count())
# 获取cpu物理核心数
print(psutil.cpu_count(logical=False))
# 获取cpu每个核心的使用率
print(psutil.cpu_percent(interval=0.5, percpu=True))
# 定义变量保存CPU的使用率
cpu_per = psutil.cpu_percent(interval=0.5)

# 获取内存使用率
print(psutil.virtual_memory().percent)
# 定义变量保存内存信息
memory_info = psutil.virtual_memory()

# 获取硬盘信息
print(psutil.disk_partitions())
# 定义变量保存硬盘的信息
disk_info = psutil.disk_usage("c:/")
# 查看磁盘的使用率
print(psutil.disk_usage("d:/").percent)

# 网络收到的数据包数量
print(str(psutil.net_io_counters().bytes_recv/1024/1024/1024) + "G")
# 网络发送的数据包数量
print(psutil.net_io_counters().bytes_sent)
# 定义变量保存网络的信息
net_info = psutil.net_io_counters()

# 获取开机时间
print(psutil.boot_time())
print(datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H-%M-%S"))

# 获取当前用户
print(psutil.users())

# 获取系统当前时间
current_time = datetime.datetime.now().strftime("%F %T")

# 拼接字符串显示
log_str = "|-------------------|------------|-------------|-------------|----------------------------|\n"
log_str += "|      监控时间      |  CPU使用率  |   内存使用率  |   硬盘使用率  |          网络收发量          |\n"
log_str += "|                   | (共%d核CPU)  |  (总计%dG内存) | (总计%dG硬盘)|                            |\n" % (psutil.cpu_count(logical=False), memory_info.total/1024/1024/1024, disk_info.total/1024/1024/1024)
log_str += "|-------------------|------------|-------------|-------------|----------------------------|\n"
log_str += "|%s|    %s%%   |    %s%%    |    %s%%    |   收:%s/发:%s  |\n" % (current_time, cpu_per, memory_info.percent, disk_info.percent, net_info.bytes_recv, net_info.bytes_sent)
log_str += "|-------------------|------------|-------------|-------------|----------------------------|\n"
print(log_str)

# 保存监控信息到日志文件
f = open("log.txt", "w", encoding="UTF-8")
f.write(log_str + "\n\n")
f.close()
16
8
[0.0, 0.0, 0.0, 6.2, 3.1, 0.0, 3.1, 3.1, 6.2, 3.1, 0.0, 46.9, 6.2, 3.1, 25.0, 6.2]
32.3
[sdiskpart(device='C:\\', mountpoint='C:\\', fstype='NTFS', opts='rw,fixed', maxfile=255, maxpath=260), sdiskpart(device='D:\\', mountpoint='D:\\', fstype='NTFS', opts='rw,fixed', maxfile=255, maxpath=260), sdiskpart(device='E:\\', mountpoint='E:\\', fstype='NTFS', opts='rw,fixed', maxfile=255, maxpath=260)]
14.0
3.4521494517102838G
484339024
1709171042.5419745
2024-02-29 09-44-02
[suser(name='xxx', terminal=None, host=None, started=1709171051.759514, pid=None)]
监控时间 CPU使用率 内存使用率 硬盘使用率 网络收发量
(共8核CPU) (总计60G内存) (总计299G硬盘) (Mb)
------------------- ------------ ------------- ------------- ----------------------------
2024-02-29 17:02:32 2.1% 32.3% 45.8% 收:3535.0010385513306/发:461.9016876220703
------------------- ------------ ------------- ------------- ----------------------------

系统性能定时监控

# 导入必要模块
import psutil
import datetime

# 定义一个函数,实现信息的显示和日志的保存
def host_monitor(time):
    # 1、导入模块

    # 2、定义变量保存CPU的使用率
    cpu_per = psutil.cpu_percent(interval=time)

    # 3、定义变量保存内存信息
    memory_info = psutil.virtual_memory()

    # 4、定义变量保存硬盘的信息
    disk_info = psutil.disk_usage("/")

    # 5、定义变量保存网络的信息
    net_info = psutil.net_io_counters()

    # 获取系统当前时间
    current_time = datetime.datetime.now().strftime("%F %T")

    # 6、拼接字符串显示
    log_str = "|-------------------|------------|-------------|-------------|----------------------------|\n"
    log_str += "|      监控时间      |  CPU使用率  |   内存使用率  |   硬盘使用率  |          网络收发量          |\n"
    log_str += "|                   | (共%d核CPU)  |  (总计%dG内存) | (总计%dG硬盘)|                            |\n" % (psutil.cpu_count(logical=False), memory_info.total/1024/1024/1024, disk_info.total/1024/1024/1024)
    log_str += "|-------------------|------------|-------------|-------------|----------------------------|\n"
    log_str += "|%s|    %s%%   |    %s%%    |    %s%%    |   收:%s/发:%s  |\n" % (current_time, cpu_per, memory_info.percent, disk_info.percent, net_info.bytes_recv, net_info.bytes_sent)
    log_str += "|-------------------|------------|-------------|-------------|----------------------------|\n"
    print(log_str)

    # 7、保存监控信息到日志文件
    f = open("log.txt", "a", encoding="UTF-8")
    f.write(log_str + "\n\n")
    f.close()

# 定义一个死循环,每隔一段时间显示一次
def main():
    """程序的入口"""
    while True:
        host_monitor(5)

# __name__值:如果程序所有py文件被其他文件导入,些时__name__指的是些py文件本身名字,如果直接运行py文件,此时__name__值是__main__。
if __name__ == '__main__':
    main()

终端运行

#!/usr/bin/python
# 解析环境配置,如果有虚拟环境使用虚拟环境路径。例: #!/python_venv_manage/python-study/bin/python
# cat host_monitor.py
# 导入必要模块
import psutil
import datetime

# 定义一个函数,实现信息的显示和日志的保存
def host_monitor(time):
    # 1、导入模块

    # 2、定义变量保存CPU的使用率
    cpu_per = psutil.cpu_percent(interval=time)

    # 3、定义变量保存内存信息
    memory_info = psutil.virtual_memory()

    # 4、定义变量保存硬盘的信息
    disk_info = psutil.disk_usage("/")

    # 5、定义变量保存网络的信息
    net_info = psutil.net_io_counters()

    # 获取系统当前时间
    current_time = datetime.datetime.now().strftime("%F %T")

    # 6、拼接字符串显示
    log_str = "|-------------------|------------|-------------|-------------|----------------------------|\n"
    log_str += "|      监控时间      |  CPU使用率  |   内存使用率  |   硬盘使用率  |          网络收发量          |\n"
    log_str += "|                   | (共%d核CPU)  |  (总计%dG内存) | (总计%dG硬盘)|                            |\n" % (psutil.cpu_count(logical=False), memory_info.total/1024/1024/1024, disk_info.total/1024/1024/1024)
    log_str += "|-------------------|------------|-------------|-------------|----------------------------|\n"
    log_str += "|%s|    %s%%   |    %s%%    |    %s%%    |   收:%s/发:%s  |\n" % (current_time, cpu_per, memory_info.percent, disk_info.percent, net_info.bytes_recv, net_info.bytes_sent)
    log_str += "|-------------------|------------|-------------|-------------|----------------------------|\n"
    print(log_str)

    # 7、保存监控信息到日志文件
    f = open("log.txt", "a", encoding="UTF-8")
    f.write(log_str + "\n\n")
    f.close()

# 定义一个死循环,每隔一段时间显示一次
def main():
    """程序的入口"""
    while True:
        host_monitor(5)

# __name__值:如果程序所有py文件被其他文件导入,些时__name__指的是些py文件本身名字,如果直接运行py文件,此时__name__值是__main__。
if __name__ == '__main__':
    main()

# python host_monitor.py
# chmod u+x host_monitor.py; ./host_monitor.py