如何获取平均网络负载而不是即时网络负载

如何获取平均网络负载而不是即时网络负载

欢迎,

我使用 conky 查看网络负载统计数据,每 8 秒采样一次,以便获得更平滑的历史图表。不幸的是,我得到的所有值都不是这 8 秒期间的平均值,而是从更短的时间跨度中采样的,因此图表同样不稳定,就好像它们是从 1 秒或更短的时间内采样的一样。

有没有什么方法可以让 conky(或者至少是系统监视器)显示指定时间内的平均系统属性,就像 Windows 的任务管理器一样?

我希望 conky 能够显示来自 iostat 的硬盘使用情况,但是如果 conky 报告的是即时值而不是随时间平均的值,那么用处就不大。

编辑:实用程序 ifstat 中有一个针对特定网络问题的半解决方案。如果运行此程序

ifstat 8 1

确实提供了适当的网络负载平均值间隔 8 秒。但是,出于显而易见的原因,此调用需要 8 秒才能完成。我正在尝试学习足够的 lua 来实现这一点。

答案1

如果您想要一个程序为您提供网络活动的良好摘要,vnstat这可能就是您想要的;正如我在下面指出的,您可以使用一个名为的程序vnstati从数据库中为您提供指定时间范围的图表vnstat

首先,下载程序:

sudo apt-get install vnstat vnstati

如果要监控的接口是,请首先设置数据库eth0;您可以稍后使用此命令来更新数据库:

sudo vnstat -u -i eth0

如果您的默认界面不是eth0,您可以通过编辑默认界面条目/etc/vnstat.conf或简单地在您的主文件夹中创建一个.vnstat文件并Interface "eth1"在文件顶部添加来更改它。

Vnstat监视指定适配器上的网络使用情况,但您可以通过输入以下命令查看实时详细信息:

vnstat -l -i eth0

您还可以通过命令行按小时、周、月等查看统计信息(尽管最好先使用上面的 sudo 命令进行数据库更新)。以下是显示每日使用情况的示例命令:(替换dhhourly,替换w为 weekly)

vnstat -d -i eth0

A很多更多统计分析可用vnstat,请参阅man vnstatUbuntu 在线手册页

使用以下命令查看下面的图表以显示每小时使用情况和每日使用情况:(您还可以显示每周、每月等时间并以不同的方式显示数据)(在运行这些命令之前vnstati再次执行数据库更新)vnstatvnstati

vnstati -h -i eth1 -o net.png
vnstati -d -i eth1 -o net2.png

(第一个图表有点空白,因为我才刚刚开始使用vnstat,顺便说一下,我的默认界面是eth1,而你的可能是eth0

有关它可以输出的数据库vnstati的所有统计信息的更多选项,请参阅vnstatman vnstatiUbuntu 在线手册页

在此处输入图片描述 在此处输入图片描述

答案2

好吧,它可能非常粗糙(我不是脚本编程专家,这是我用 Lua 编写的第一个程序),但它确实解决了我的问题。

它的工作原理是在后台调用 make-netstat,然后调用 ifstat,后者计算比 conky 刷新间隔(8 秒)稍短的时间内的平均统计数据。结果被写入临时文件,该文件随后在 conky 的下一次刷新运行中被读取。

由于磁盘 I/O,对于 SSD 磁盘用户来说,这不是推荐的解决方案。统计数据也没有考虑 0.5 秒的间隔,该间隔是为了防止 make-netstat 和 conky 之间的竞争条件而存在的。

我在 ~/.conky 目录中创建了几个文件。制作netstats.sh

#!/bin/sh
ifstat -i wlan0 -n $1 1|tail -n 1 >~/.conky/wifi-stats-new.txt
cp ~/.conky/wifi-stats-new.txt ~/.conky/wifi-stats.txt

调用-make-netstats.sh:(由于某些原因,,,~''​​ 作为主目录的快捷方式不起作用,因此我输入了完整的主文件夹路径。)

#!/bin/sh
/home/adam/.conky/make-netstats.sh $1 &

网络状态监控工具

do
    function conky_prepare_wlan_stats(czas)
        os.execute("/home/adam/.conky/call-make-netstats.sh " .. czas)
    end
    function conky_get_wlan_input()
        local f = io.open("/home/adam/.conky/wifi-stats.txt", "r")
        local str = f:read("*all")
        local sin = string.gsub(str, "^%s*([%d%.]+)%s*([%d%.]+)%s*","%1")
        return sin
    end
    function conky_get_wlan_output()
        local f = io.open("/home/adam/.conky/wifi-stats.txt", "r")
        local str = f:read("*all")
        local out = string.gsub(str, "^%s*([%d%.]+)%s*([%d%.]+)%s*","%2")
        return out
    end
end

最后我们用它来.conky.rc方式如下:

${font Goudy Bookletter 1911:style=Normal}WIRELESS${font} ${hr 2}
${voffset 4}${font PizzaDude Bullets:size=14}O${font}   Up: ${lua conky_get_wlan_output} ${alignr} ${voffset -10} ${lua_graph  conky_get_wlan_output 20,200 300}
${lua conky_prepare_wlan_stats 7.5} #The function prepares statistics for another refresh of conky stat. 7.5 is slightly less then 8 seconds to prevent from overlap.1

${voffset -30}${font PizzaDude Bullets:size=14}U${font}   Down: ${lua conky_get_wlan_input} ${alignr} ${voffset -10} ${lua_graph  conky_get_wlan_input 20,200 300}

相关内容