psutil 网络监控脚本
psutil network monitoring script
我正在尝试创建一个脚本来监控基本服务器资源:- CPU、RAM、磁盘和网络进出(以兆字节/秒为单位)。
不幸的是,当 cpu、内存和磁盘部分工作时,网络功能总是显示 0.0 字节进出,即使有实际流量(yum update -y)。
请提供帮助并记住,我在 Python 是一个完全的菜鸟,这只是一个练习项目。提前致谢。
欢迎提出任何优化建议。
#!/usr/bin/env python3
#Module psutil needs to be installed via pip3 first.
#Python script to Monitor Server Resources.
import time
import psutil
cpu_thresh = 50.0
cpu_pct = psutil.cpu_percent(interval=1)
if cpu_pct >= cpu_thresh:
print("CPU Warning, CPU at ",cpu_pct, "percent")
mem = psutil.virtual_memory()
mem_thresh = 1024 * 1024 * 1024 #500MB
if mem_thresh >= mem.available:
print("Memory Usage Warning only", mem.available /1024 /1024, "MB available")
partition1 = '/'
disk1 = psutil.disk_usage(partition1)
disk_thresh = 85.0
if disk_thresh <= disk1[3]:
print("Root volume usage warning", disk1[3], "% used")
def net_in(inf = "eth0"): #change the inf variable according to the interface
net_in_ps = psutil.net_io_counters(pernic=True, nowrap=True)[inf]
net_in_1 = net_in_ps.bytes_recv
time.sleep(1)
net_in_2 = net_in_ps.bytes_recv
net_in_result = net_in_2 - net_in_1
net_in_result_mbps = net_in_result /1024 /1024
print(net_in_result_mbps)
net_in_thresh = 1.5
if net_in_result_mbps <= net_in_thresh:
print("Network in Warning, NetSpeed at:", net_in_result_mbps, "mbps")
def net_out(inf = "eth0"): #change the inf variable according to the interface
net_out_ps = psutil.net_io_counters(pernic=True, nowrap=True)[inf]
net_out_1 = net_out_ps.bytes_sent
time.sleep(1)
net_out_2 = net_out_ps.bytes_sent
net_out_result = net_out_2 - net_out_1
net_out_result_mbps = net_out_result /1024 /1024
print(net_out_result_mbps)
net_out_thresh = 1.5
if net_out_result_mbps <= net_out_thresh:
print("Network out Warning, NetSpeed at:", net_out_result_mbps, "mbps")
net_in()
net_out()
你的函数只有 return 0
的原因是因为当你在你的 time.sleep(1)
命令之后计算差异时,你不会轮询接口以获取新的统计信息。你基本上是在计算 1000-1000
.
我已更正您的代码,并将输出更改为兆字节而不是兆位,因为 psutil
returns 字节,而不是位:
def net_usage(inf = "eth0"): #change the inf variable according to the interface
net_stat = psutil.net_io_counters(pernic=True, nowrap=True)[inf]
net_in_1 = net_stat.bytes_recv
net_out_1 = net_stat.bytes_sent
time.sleep(1)
net_stat = psutil.net_io_counters(pernic=True, nowrap=True)[inf]
net_in_2 = net_stat.bytes_recv
net_out_2 = net_stat.bytes_sent
net_in = round((net_in_2 - net_in_1) / 1024 / 1024, 3)
net_out = round((net_out_2 - net_out_1) / 1024 / 1024, 3)
print(f"Current net-usage:\nIN: {net_in} MB/s, OUT: {net_out} MB/s")
输出:
Current net-usage:
IN: 24.263 MB/s, OUT: 0.421 MB/s
设法通过添加一个非常简单的步骤来解决它:-
net_out_ps1 = psutil.net_io_counters(pernic=True, nowrap=True)[inf]
net_out_1 = net_out_ps1.bytes_sent
time.sleep(1)
net_out_ps2 = psutil.net_io_counters(pernic=True, nowrap=True)[inf]
net_out_2 = net_out_ps2.bytes_sent
我必须在睡觉前收集一次数据,然后在睡觉后再次收集数据。
非常简单的基本错误。
但是,如果有人可以帮助进一步优化代码,我将不胜感激。
再次感谢。
我正在尝试创建一个脚本来监控基本服务器资源:- CPU、RAM、磁盘和网络进出(以兆字节/秒为单位)。 不幸的是,当 cpu、内存和磁盘部分工作时,网络功能总是显示 0.0 字节进出,即使有实际流量(yum update -y)。 请提供帮助并记住,我在 Python 是一个完全的菜鸟,这只是一个练习项目。提前致谢。
欢迎提出任何优化建议。
#!/usr/bin/env python3
#Module psutil needs to be installed via pip3 first.
#Python script to Monitor Server Resources.
import time
import psutil
cpu_thresh = 50.0
cpu_pct = psutil.cpu_percent(interval=1)
if cpu_pct >= cpu_thresh:
print("CPU Warning, CPU at ",cpu_pct, "percent")
mem = psutil.virtual_memory()
mem_thresh = 1024 * 1024 * 1024 #500MB
if mem_thresh >= mem.available:
print("Memory Usage Warning only", mem.available /1024 /1024, "MB available")
partition1 = '/'
disk1 = psutil.disk_usage(partition1)
disk_thresh = 85.0
if disk_thresh <= disk1[3]:
print("Root volume usage warning", disk1[3], "% used")
def net_in(inf = "eth0"): #change the inf variable according to the interface
net_in_ps = psutil.net_io_counters(pernic=True, nowrap=True)[inf]
net_in_1 = net_in_ps.bytes_recv
time.sleep(1)
net_in_2 = net_in_ps.bytes_recv
net_in_result = net_in_2 - net_in_1
net_in_result_mbps = net_in_result /1024 /1024
print(net_in_result_mbps)
net_in_thresh = 1.5
if net_in_result_mbps <= net_in_thresh:
print("Network in Warning, NetSpeed at:", net_in_result_mbps, "mbps")
def net_out(inf = "eth0"): #change the inf variable according to the interface
net_out_ps = psutil.net_io_counters(pernic=True, nowrap=True)[inf]
net_out_1 = net_out_ps.bytes_sent
time.sleep(1)
net_out_2 = net_out_ps.bytes_sent
net_out_result = net_out_2 - net_out_1
net_out_result_mbps = net_out_result /1024 /1024
print(net_out_result_mbps)
net_out_thresh = 1.5
if net_out_result_mbps <= net_out_thresh:
print("Network out Warning, NetSpeed at:", net_out_result_mbps, "mbps")
net_in()
net_out()
你的函数只有 return 0
的原因是因为当你在你的 time.sleep(1)
命令之后计算差异时,你不会轮询接口以获取新的统计信息。你基本上是在计算 1000-1000
.
我已更正您的代码,并将输出更改为兆字节而不是兆位,因为 psutil
returns 字节,而不是位:
def net_usage(inf = "eth0"): #change the inf variable according to the interface
net_stat = psutil.net_io_counters(pernic=True, nowrap=True)[inf]
net_in_1 = net_stat.bytes_recv
net_out_1 = net_stat.bytes_sent
time.sleep(1)
net_stat = psutil.net_io_counters(pernic=True, nowrap=True)[inf]
net_in_2 = net_stat.bytes_recv
net_out_2 = net_stat.bytes_sent
net_in = round((net_in_2 - net_in_1) / 1024 / 1024, 3)
net_out = round((net_out_2 - net_out_1) / 1024 / 1024, 3)
print(f"Current net-usage:\nIN: {net_in} MB/s, OUT: {net_out} MB/s")
输出:
Current net-usage:
IN: 24.263 MB/s, OUT: 0.421 MB/s
设法通过添加一个非常简单的步骤来解决它:-
net_out_ps1 = psutil.net_io_counters(pernic=True, nowrap=True)[inf]
net_out_1 = net_out_ps1.bytes_sent
time.sleep(1)
net_out_ps2 = psutil.net_io_counters(pernic=True, nowrap=True)[inf]
net_out_2 = net_out_ps2.bytes_sent
我必须在睡觉前收集一次数据,然后在睡觉后再次收集数据。 非常简单的基本错误。 但是,如果有人可以帮助进一步优化代码,我将不胜感激。 再次感谢。