Linux の CLI 専用ツールを使用してディスク使用量のグラフ/チャートを生成する

StackOverflow https://stackoverflow.com/questions/40737

質問

この質問では 誰かが Linux でディスク使用量を表示する方法を尋ねました。これを cli-path のさらに一歩進めたいと思います...前の質問に対する妥当な回答のようなものから出力を取得し、そこからグラフ/チャートを生成するシェル スクリプトはどうでしょうか (png ファイルなどで出力)。これは、通常の質問で尋ねるには少しコードが多すぎるかもしれませんが、私の推測では、誰かがすでにどこかにワンライナーを置いていると思います...

役に立ちましたか?

解決

私がお勧めします ムニン. 。これはまさにこの種のこと、つまり CPU 使用率、メモリ使用量、ディスク使用量などをグラフ化するために設計されています。MRTG に似ています (ただし、MRTG は主にルーターのトラフィックをグラフ化することを目的としており、帯域幅以外のグラフを作成するのは非常にハック的です)

Munin プラグインの作成は非常に簡単です (これはプロジェクトの目標の 1 つでした)。これらは、ほとんど何でも (シェル スクリプト、perl/python/ruby/etc、C、実行して出力を生成できるものなら何でも) で書くことができます。プラグインの出力形式は基本的には disc1usage.value 1234. 。プラグインのデバッグは (MRTG と比較して) 非常に簡単です。

私はディスク使用量、帯域幅使用量 (ISP のコントロール パネルからデータを取得することで、2 つのダウンロード "ビン"、アップロード、ニュースグループの使用量をグラフ化します)、負荷平均、プロセス数を監視するためにラップトップに設定しました。インストールしたら (現時点では OS X では少し難しいですが、Linux/FreeBSD では簡単です)、数分でプラグインを作成し、初めて機能しました。

セットアップ方法については私が説明したいと思いますが、munin サイトは私が説明できるよりもはるかにうまく説明します。

設置例あり ここ

代替手段としては、nagios や cacti などがあります。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 ~ 100 KB を超えることはなく、ファイルが固定長であるため、常に迅速にグラフを作成できます。

要するに。ほぼ何でも簡単にグラフ化したい場合は、次を使用します。 ムニン. 。より小さく自己完結型のものが必要な場合は、RRDTool を使用して何かを作成します。

他のヒント

ASCII 文字が十分に「グラフィカル」である場合は、次のことをお勧めします。 NCDU. 。これは非常に優れた対話型 CLI ツールで、 cd bigdir を実行せずに大きなディレクトリをステップダウンするのに非常に役立ちます。何度も繰り返します。

私たちは職場で自分たちで作ったものを使用しました RRDツール (MRTG などのツールへのデータ ストレージ バックエンド)。パーティションごとに du を取得して RRD データベースに詰め込み、RRD のグラフ関数を使用してグラフを構築する Perl スクリプトを 5 分ごとに実行します。.rrd ファイルの設定方法を理解するには時間がかかります (たとえば、実行したい計算の一部を実行するには RPN を再学習する必要がありました) が、時間の経過とともにグラフ化したいデータがある場合は、 RRD ツールが最適です。

いくつかの選択肢があると思います。

  1. 純粋な CLI ソリューションの場合は、gnuplot などを使用します。見る ここ たとえば使い方。私は学生時代以来 gnuplot を使っていません:-)

  2. 実際には純粋な CLI ソリューションではありませんが、次のようなものをダウンロードします Jフリーチャート そして、標準入力を読み取ってチャートを作成する単純な Java アプリを作成します。

お役に立てれば。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top