K4750.NET

システムの状態を可視化する(その1)

sysstatパッケージを使って収集したシステムの状態をD3.jsを使って可視化する。sar(system activity reporter)コマンドの結果を可視化(グラフ化)するツールとしてはksarという便利ツールが既に存在するが、、D3.jsで遊びたいので気にしない。


1.データ収集の有効化

sysstatによるシステムの状態の定期的な収集が標準では無効化されているので、有効にする(OSはUbuntu 12.04.3 LTS)。

# dpkg-reconfigure sysstat
# cat /etc/default/sysstat
...
ENABLED="true"
...
# vi /etc/cron.d/sysstat
5-55/10 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1
↓ 収集間隔10分を1分へ変更
5-55/1 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1
# service sysstat start
# ls /var/log/sysstat/sa*
/var/log/sysstat/sa15

2.データ収集状況の確認

本日分の全ての統計データを出力する。

$ sar -A
Linux 3.2.0-52-generic (www.k4750.net)  09/15/2013      _x86_64_        (2 CPU)

07:11:40 PM     CPU      %usr     %nice      %sys   %iowait    %steal      %irq     %soft    %guest     %idle
07:12:01 PM     all      0.29      0.00      0.10      0.45      0.31      0.00      0.02      0.00     98.83
...

3.収集データのJSONフォーマット変換

sysstatで収集したデータは、sysstatパッケージ付属のsadfコマンドにてJSON(JavaScript Object Notation)フォーマットやXMLフォーマットへ変換することができる。今回はNode.jsやD3.jsで扱いやすいJSONフォーマットに変換する。例えば、CPU使用率(sar -uの結果に同じ)をJSONフォーマットで出力する場合は、

$ sadf /var/log/sysstat/sa15 -t -j -- -u

のようにsadfを実行する。引数の意味はそれぞれ以下のとおり。

/var/log/sysstat/sa15
  データファイル。
-t
  データファイルに記録されている時刻(UTC)をローカルタイムに変換する。
-j
  データファイルをJSONフォーマットに変換する。
--
  出力したい項目をsarのオプションにて指定する(今回はCPU使用率(-u))。

ちなみに、sadfにてJSONフォーマット出力がサポートされたのは、sysstatのchangelogを見ると2011/11/27(Version 10.0.3)らしい。googleで検索しても使用例がろくに出てこない、マニアックなコマンド/オプションだ。


4.次回

次回では、sadfで出力したJSONフォーマットの統計データをD3.jsにてグラフ化する。