Project

dstat_plot

0.0
No commit activity in last 3 years
No release in over 3 years
Uses gnuplot to plot csv data generated by mvneves' dstat-monitor.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

~> 2.6
 Project Readme

dstat-plot: a dstat monitor plotting script

This ruby script uses GNUPlot through a ruby wrapper (ruby_gnuplot) to plot csv data generated by mvneves' dstat-monitor.

Pre-requisites and Installation

You need an installation of the ruby programming language, X11, GNUPlot and the ruby_gnuplot gem. The gems csv and optparse are part of the ruby standard library.

To install on a Mac do the following steps:

1. Install XQuartz from here:
    http://xquartz.macosforge.org/landing/
2. Install gnuplot with homebrew:
    brew install gnuplot --with-x11
3. Install gnuplot gem:
    gem install gnuplot

For linux the procedure is

1. Install gnuplot (your distribution might come with it though)
    sudo apt-get install gnuplot
2. Install gnuplot gem:
    gem install gnuplot
3. Install csv gem
    gem install fastercsv

Usage

Usage:
dstat_plot.rb [options] -c CATEGORY -f FIELD [directory | file1 file2 ...] or
dstat_plot.rb [options] -l COLUMN [directory | file1 file2 ...]
    -v, --verbose                    Output more information
    -i, --invert [VALUE]             Invert the graph such that inverted(x) = VALUE - f(x),
                                     default is 100.
    -n, --no-key                     No plot key is printed.
    -d, --dry                        Dry run. Plot is not saved to file but instead displayed with gnuplot.
    -o, --output FILE|DIR            File or Directory that plot should be saved to.
                                     If a directory is given the filename will be generated.
                                     Default is csv file directory.
    -y, --y-range RANGE              Sets the y-axis range. Default is 105. If a value exceeds
                                     this range, "autoscale" is enabled.
    -t, --title TITLE                Override the default title of the plot.
    -s, --smoothing ALGORITHM        Smooths the graph using the given algorithm.
    -a, --average-over SLICE_SIZE    Calculates the average for slice_size large groups of values.

    -c, --category CATEGORY          Select the category.
    -f, --field FIELD                Select the field.
    -l, --column COLUMN              Select the desired column directly.
    
    -h, --help                       Display this screen.

(-c CATEGORY -f FIELD or -l COLUMN are mandatory parameters)

The plot is saved as category-field.png in the folder where the csv files are located unless -o PATH explicitly specifies a different destination.

Example

ruby dstat_plot.rb -c "total cpu usage" -f "usr" example.csv

example plot

The equivalent with the -l option would be

ruby dstat_plot.rb -l 11 example.csv

Possible category - field combinations

(N is the cpu core index for 0..n cores)

Categoriy Field Column Categoriy Field Column Categoriy Field Column
epoch epoch 0 ... sys 12 ... send 24
memory usage used 1 ... idl 13 net/eth0 recv 25
... buff 2 ... wai 14 ... send 26
... cach 3 ... hiq 15 dsk/total read 27
... free 4 ... siq 16 ... writ 28
swap used 5 cpuN usage usr 17 dsk/sda read 29
... free 6 ... sys 18 ... writ 30
system int 7 ... idl 19 io/total read 31
... csv 8 ... wai 20 ... writ 32
paging in 9 ... hiq 21 io/sda read 33
... out 10 ... siq 22 ... writ 34
total cpu usage usr 11 net/total recv 23

Smoothing

You can take advantage of a variety of different smoothing algorithms to make your plots more easy on the eye, especially if you're plotting data from a large number of nodes all in one plot.

To do so use the options --smoothing ALGORITHM when running dstat-plot

Available smoothing algorithms are

unique, frequency, cumulative, cnormal, kdensity, unwrap, csplines, acsplines, mcsplines, bezier, sbezier

As an example

ruby dstat_plot.rb -s acsplines -c "total cpu usage" -f "usr" example.csv

will give you the following result smoothing example