~ To be, or not to be, or to forget all. ~ 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!? 「
|
|