使用Linux中仅CLI的工具生成磁盘使用情况图/图表

时间:2020-03-05 18:46:46  来源:igfitidea点击:

在这个问题中,有人要求显示Linux中磁盘使用情况的方法。我想在cli-path的基础上再迈出一步...一个shell脚本如何从类似上一个问题的合理答案中获取输出并从中生成图形/图表(以png格式输出)文件或者其他内容)?在常规问题中可能要问的代码太多了,但我猜是某人已经在某个地方放了一个内衬...

解决方案

回答

我猜有两种选择:

  • 对于纯CLI解决方案,请使用gnuplot之类的方法。有关用法示例,请参见此处。自从我的学生时代以来我就没有使用过gnuplot :-)
  • 并不是真正的纯CLI解决方案,而是下载JFreeChart之类的东西并编写一个简单的Java应用程序来读取stdin并创建图表。

希望这可以帮助。

回答

我们使用RRDtool(数据存储后端到MRTG等工具)在工作中进行了滚动。我们每5分钟运行一个perl脚本,该脚本将每个分区都花一个时间,然后将其填充到RRD数据库中,然后使用RRD的graph函数来构建图形。需要花费一些时间来确定如何设置.rrd文件(例如,我必须重新学习RPN才能进行一些我想做的计算),但是如果我们有一些要随时间绘制的数据, RRD工具是一个不错的选择。

回答

我会推荐穆宁。它专为绘制CPU使用情况,内存使用情况,磁盘使用情况等图表而设计。有点像MRTG(但MRTG的主要目的是绘制路由器流量,绘制除带宽以外的任何图形都非常骇人听闻)

编写Munin插件非常容易(这是项目目标之一)。它们几乎可以用任何东西(shell脚本,perl / python / ruby​​ / etc,C,可以执行并产生输出的任何东西)编写。插件的输出格式基本上是disc1usage.value 1234。而且调试插件非常容易(与MRTG相比)

我已经在笔记本电脑上进行了设置,以监视光盘使用情况,带宽使用情况(通过从ISP控制面板中提取数据,并绘制两个下载"箱",上传文件和新闻组的使用情况),平均负载和进程数。一旦我安装了它(目前在OS X上有点困难,但是在Linux / FreeBSD上却微不足道),我在几分钟内就编写了一个插件,并且第一次成功!

我将描述它的设置方式,但是munin网站会做得比我做得好得多!

这里有一个示例安装

一些替代品是nagios和仙人掌。我们也可以使用rrdtool编写类似的内容。 Munin,MRTG和Cacti基本上都是基于此绘图工具而更易于使用的系统。

如果我们想要真正非常简单的东西,则可以做..

import os
import time
while True:
    disc_usage = os.system("df -h / | awk '{print }'")
    log = open("mylog.txt")
    log.write(disc_usage + "\n")
    log.close()
    time.sleep(60*5)

然后..

f = open("mylog.txt")
lines = f.readlines()

# Convert each line to a float number
lines = [float(cur_line) for cur_line in lines]

# Get the biggest and smallest
biggest = max(lines)
smallest = min(lines)

for cur_line in lines:
    base = (cur_line - smallest) + 1 # make lowest value 1
    normalised = base / (biggest - smallest) # normalise value between 0 and 1
    line_length = int(round(normalised * 28)) # make a graph between 0 and 28 characters wide
    print "#" * line_length

这将使光盘使用情况更简单。我真的不建议我们使用像这样的东西。为什么?日志文件将变得越来越大。图形将逐渐变慢。 RRDTool使用滚动数据库系统来存储其数据,因此文件的大小永远不会超过50-100KB,并且由于文件是固定长度的,因此可以始终快速地绘制图形。

简而言之。如果我们希望某些东西可以轻松绘制几乎所有图形,请使用munin。如果我们想要更小巧且功能齐全的产品,请使用RRDTool编写一些产品。

回答

如果某些ASCII字符足以满足"图形"要求,我可以推荐ncdu。这是一个非常不错的交互式CLI工具,它可以帮助我在不使用cd bigdir的情况下逐步退出大目录; du -hs一遍又一遍。