10

在这个问题中,有人询问如何在 Linux 中显示磁盘使用情况。我想在 cli-path 中更进一步……一个 shell 脚本如何从前一个问题的合理答案中获取输出并从中生成图形/图表(以 png 格式输出文件什么的)?在常规问题中要求这可能有点过多的代码,但我的猜测是有人已经在某个地方放置了一个单行线......

4

4 回答 4

10

If some ASCII chars are "graphical" enough for you, I can recommend ncdu. It is a very nice interactive CLI tool, which helps me a lot to step down large directories without doing cd bigdir ; du -hs over and over again.

于 2009-08-21T19:58:55.230 回答
6

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

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

我已经在我的笔记本电脑上设置了它来监控磁盘使用情况、带宽使用情况(通过从我的 ISP 的控制面板中提取数据,它会绘制我的两个下载“bin”、上传和新闻组使用情况)、平均负载和进程数。一旦我安装了它(目前在 OS X 上有点困难,但在 Linux/FreeBSD 上是微不足道的),我在几分钟内编写了一个插件,它第一次工作!

我会描述它是如何设置的,但是 munin 网站会比我做得更好!

这里有一个示例安装

一些替代品是 nagios 和仙人掌。您也可以使用 rrdtool 编写类似的内容。Munin、MRTG 和 Cacti 基本上都是基于这个绘图工具的更好用的系统。

如果你想要一些非常非常简单的东西,你可以做..

import os
import time
while True:
    disc_usage = os.system("df -h / | awk '{print $3}'")
    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

That'll make a simple ascii graph of the disc usage. I really really don't recommend you use something like this. Why? The log file will get bigger, and bigger, and bigger. The graph will get progressively slower to graph. RRDTool uses a rolling-database system to store it's data, so the file will never get bigger than about 50-100KB, and it's consistently quick to graph as the file is a fixed length.

In short. If you want something to easily graph almost anything, use munin. If you want something smaller and self-contained, write something with RRDTool.

于 2008-09-04T13:16:00.850 回答
4

我们在工作中使用RRDtool(MRTG 等工具的数据存储后端)推出了自己的产品。我们每 5 分钟运行一次 perl 脚本,每个分区获取一个 du 并将其填充到 RRD 数据库中,然后使用 RRD 的图形函数来构建图形。弄清楚如何设置 .rrd 文件需要一些时间(例如,我必须重新学习 RPN 才能进行一些我想做的计算),但是如果您有一些想要随时间绘制的数据, RRD 工具是一个不错的选择。

于 2008-09-03T02:33:25.163 回答
1

我想有几个选择:

  1. 对于纯 CLI 解决方案,请使用 gnuplot 之类的东西。有关示例用法,请参见此处。我从学生时代就没有使用过 gnuplot :-)

  2. 不是真正的纯 CLI 解决方案,而是下载JFreeChart 之类的东西并编写一个简单的 Java 应用程序来读取标准输入并创建图表。

希望这可以帮助。

于 2008-09-02T22:55:05.077 回答