|
~ To be, or not to be, or to let it be. ~ null-i.net |
| Linux/sarをグラフ化その2(gnuplotでグラフを描く | |
|
gnuplotの導入と、sarのグラフ作成例(2017-03-14) sar の情報をグラフ化します。
gnuplot のインストール†gnuplotはグラフ作成に便利なフリーウェアです。 (とりあえず、情報を見ます) # yum info gnuplot (インストールされて無かったので、インストールしました) # yum install gnuplot そう、yum install して思い出したんですが、依存するパッケージが多いんです。 Install 1 Package (+24 Dependent packages) (まだ GUI関連のパッケージが殆ど入っていないから、だろうか?) で、うちのCentOS 7環境に、 ・・・*1 とりあえず、さきほど入れた奴は消しました # yum remove gnuplot 結局、ソースコードから最新版をビルドします。 私の環境だと、gd-devel が足りませんでした。 gnuplot> set terminal png
^
line 0: unknown or ambiguous terminal type; type just 'set terminal' for a list
WARNING: Plotting with an 'unknown' terminal.
No output will be generated. Please select a terminal with 'set terminal'.
これについては、 libgd-based png, jpeg, and gif terminals: no (see config.log) libgd が無い or バージョンが古い場合に出るようです。 # yum install gd-devel 今度は ./configure 実行時のメッセージで、 libgd-based png, jpeg, and gif terminals: yes (with animated gif) gdを入れるときにも依存パッケージはあるので、 あと、私の環境では font が何も入っていませんでした。 # fc-list (そもそも fc-list が無い場合は、fontconfig未導入かも その場合は「yum info fontconfig」など参照。) fc-list の実行結果が空っぽだったので、入れました。 # yum install liberation-serif-fonts # fc-list (今度は何か入っていることを確認) ようやく話がもどって、今度こそ gnuplot のインストールです。 # sha1sum gnuplot-5.0.5.tar.gz (sourceforge の「i」アイコンから、sha1が見れるので、同じことを確認) # cd gnuplot-5.0.5 # ./configure # make # make check # make install make check は何か沢山表示されて何が起こっているのか分かりませんでした。 # gnuplot -V gnuplot 5.0 patchlevel 5 フォントのWarningについて(Could not find/open font when opening font "arial")†タイトルの通り、実行時に出るメッセージについてです。 Could not find/open font when opening font "arial", using internal non-scalable font デフォルトの arialフォント を使おうとしたけどダメでした、と言っていますが、 export GNUPLOT_DEFAULT_GDFONT=/usr/share/fonts/自分が持っているフォント.ttf みたいに使用するフォントを環境変数指定すればOKです。 set term png font "使用するフォント" など、 (gnuplot-5.0.5 にて) term/gd.trm で「"arial"」の部分(一カ所)を「"使いたいフォントのフルPATH"」にしてから make、 make install する。 フォントの一覧は「fc-list」コマンド等で確認できます。 これで環境変数無しで好きなフォントを使えます。 sarのグラフを描くshellの例†ようやく、グラフが描けます。 以下、グラフの作成例です。 #!/bin/sh
SAR_INPUT=/var/log/sa/sa10
SAR_OUTPUT=./sar_image.png
SAR_INFO="cpu usage"
export LANG=C # sar の時刻表示が日本語にならないようにする
# sar で欲しい情報を出力。今回は cpu なので -u オプションを使う。
# grep で取得する行
# egrep -vi で除外する行を指定する
# awk で一行目は項目名にする(BEGIN)、0.2fで小数点第2位まで出力。
sar -f $SAR_INPUT -u |\
grep all |\
egrep -vi '^$|average|Linux|CPU' |\
awk '
BEGIN{
printf("%s,%s,%s,%s\n", "date", "total", "user", "sys");
}
{
printf("%s,%0.2f,%0.2f,%0.2f\n", $1, 100-$8, $3, $5);
}
' |\
tee $0.tmp
# ファイル $0.tmp からグラフを描く。
# ヒアドキュメント(EOS~EOS)でコマンドを渡す。
gnuplot <<EOS
set terminal png
set datafile separator "," # 入力データの区切り指定。デフォルトはスペース
#set key outside left; # 凡例の位置
set output "$SAR_OUTPUT" # 出力先
set title "$SAR_INFO" # グラフタイトル
set xdata time # X軸が日時の場合は、それを伝える
set timefmt "%H:%M:%S" # 入力データの日時書式
set format x '%H:%M' # 出力グラフの日時書式
#set xrange [*:*] # 範囲指定 *:* は自動。
#set xrange ["00:00:00":"18:00:00"] # 時刻は "" で囲んで、入力書式に合わせる
#set xtics 3600
#set yrange [0:100]
plot "$0.tmp" using 'date':'sys' with line, \
"$0.tmp" using 'date':'user' with line, \
"$0.tmp" using 'date':'total' with line
# plot や replot などでグラフを描く
# using には X軸:Y軸 を指定する
# 入力の何列目か、あるいは入力一行目の項目名などで指定できる
# ファイル名 "-" で標準入力を指定できるが、
# 複数描くならば二本目以降エラーになるので注意
# (warning: Skipping data file with no valid points)
EOS
また、もし複数日にまたいでグラフ化する場合は、 余談。Excelじゃだめなの?†グラフ化する方法って、一長一短ですよね。
CANVASタグ・・・あれ、HTMLで画像・・・TABLE?・・・TABLE!? 「
|
|