我想创建一个在 Linux 服务器上运行的脚本,该脚本应该读取安装在其他服务器上的 NIC 的带宽使用情况,然后将其存储在 memcached 中。
所以我需要一个读取同一局域网上其他服务器带宽使用情况的命令,并且该命令应该尽可能快。
谢谢,
答案1
没有什么神奇的命令可以读取其他服务器的参数。除非您设置并使用 SNMP。请注意,您无法读取速率,您只能读取迄今为止传输/接收流量的总数。
即时消息这可能只是您想要的路线。它将计算带宽速率并将其存储在 RRD 中。然后您可以“立即”查询 RRD。
答案2
我将创建一个 shell 脚本,使用 SSH 远程运行ifconfig
命令并解析输出以获取RX bytes:
和TX bytes:
值(标准 grep/sed/awk)。我将把这些值传递给 PHP/Python/Perl/Ruby 脚本(无论您的偏好是什么),然后将它们存储在 memcached 中。或者,您也可以用该语言编写整个脚本。我将设置 SSH 以使用公钥/私钥,以避免在脚本中使用密码。
正如 MikeyB 提到的,另一个选择是在您的服务器上设置一个更完整的监控应用程序,它可以直接记录网络带宽使用情况。
答案3
munin-node
在服务器上安装并配置munin
服务器后,您将获得每台机器的界面图形输出。数据分辨率固定为五分钟间隔。如前所述,当前带宽分辨率的数据不可用。它需要通过随时间推移对计数器进行采样来获得。利用率来自(实际增量)/(速率 * 周期)。
Munin 会收集大量其他信息,这些信息在追踪瓶颈和其他问题时非常有用。它还可以配置为在值超出配置限制时发出警报。
编辑:如果您想要最新的值,您可以编写一个脚本,从 rrd 文件中提取最新的样本。这将是最新的 5 分钟样本。
不幸的是,带宽使用情况无法直接跟踪。如果您需要相对即时的读数,则需要查询计数器,等待一段时间,然后再次查询计数器。然后您可以计算带宽使用情况。您可以使用来查询munin-node
计数器。获取计数器的命令是fetch ip_eth0
。配置数据包含充分利用的基线数据。等待的时间越短,样本中的错误就越高。
答案4
我使用只有几行长的 bash 脚本中的两个程序来提供 30 秒的带宽平均值以及 MRTG 的 5 分钟平均值(这对于历史带宽使用情况而不是“实时”使用情况非常有用)。
bwm-ng
并且ifstat
都易于编写脚本。第一个还允许您输出为 HTML 和 CSV。