有人要求
In this question在Linux中显示磁盘使用情况.我想在cli-path上进一步走一步…一个shell脚本如何将输出从类似于上一个问题的合理答案的输出中生成,从中生成一个图形/图表(在png中输出文件或东西)?这可能是一个有点太多的代码,要求在一个常规的问题,但我的猜测是,有人已经有一个oneliner躺在某个地方…
解决方法
我会推荐
munin.它是专为这种事情设计 – 绘制cpu使用,内存使用,光盘使用等.像MRTG(但是MRTG主要是为了图形路由器的流量,除了带宽之外的图形,非常黑客)
撰写Munin插件非常简单(这是项目目标之一).它们可以写成几乎任何东西(shell脚本,perl / python / ruby / etc,C,任何可以执行并产生输出的东西).插件输出格式基本上是disc1usage.value 1234.调试插件非常简单(与MRTG相比)
我已经在笔记本电脑上设置了它,以监控磁盘使用率,带宽使用情况(通过从我的ISP控制面板中提取数据,它绘制了我的两个下载“bin”,上传和新闻组使用情况),负载平均和进程数.一旦我安装了它(目前在OS X上有些困难,但是在Linux / FreeBSD上是微不足道的),我在几分钟内写了一个插件,并且第一次工作!
我会描述它的设置方式,但是,munin站点会做得比我好得多!
有一个示例安装here
一些替代品是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
这将使光盘使用的简单的ascii图.我真的不建议你使用这样的东西.为什么?日志文件会越来越大,越来越大.图表将逐渐变慢. RRDTool使用滚动数据库系统来存储它的数据,因此该文件将永远不会超过大约50-100KB,并且随着文件是固定长度,它一直很快地进行图形化.
简而言之.如果你想要的东西很容易地绘制几乎任何东西,使用munin.如果你想要一些更小,自包含,写一些与RRDTool.