Qiitaからの移動


gnuplotでストリームデータ(パイプなど)をプロットしたいと思ったが,案外面倒だったので方法とモジュール.

ストリームデータのプロット方法

ストリームデータのプロット方法を見ると,pauserereadの組み合わせなどが載っている(ここなど).ただ,どれも基本的にpollingで追加データをプロットしているので,更新間隔は必要に応じて変える必要がある.

一方,ファイルの変更を監視する(e.g., inotify)しようとすると,gnuplot上では動かないので,rereadは使えない(と思う).すなわち,gnuplotでpollingに頼らずストリームデータをプロットするには,

  1. ファイルやstdinの変更を監視する.
  2. 変更されたら一時ファイルにその変更を反映する.
  3. gnuplot上で,replotまたは,plot ...をすることでプロットを更新する.

という3つの処理を行う必要がある.

npmモジュール (sgnuplot)

上記処理は案外面倒だったので,npmのモジュールにまとめて公開した(使い方はREADME参照).inotifyがあればシェルスクリプトでも書ける程度の内容だが,エコシステムがなく管理が難しいと感じたためnpmにした. また,logrotate等は考慮していないが,長期間の可視化をするためのものではないので,問題はないのではないかと思う.

時間がかかる計算のログを確認したい時に,tail -Fよりは見やすいツールとして使えるのではと期待(使ってはいない).