MySQLに入ってるデータの傾向をグラフで見たい、しかしgrafanaとかkibanaとかは導入したくないし、グラフを描画するプログラムを書くなんて論外という事があると思います。
そういうときにおすすめなのがこのワンライナー!必要なのはmysqlクライアントとgnuplotだけ!
はい。
$ mysql dbname -u root --password=passwd -e "SELECT timestamp, value FROM tbl WHERE some=condition" | gnuplot -e 'set terminal dumb 150 30; set xdata time; set timefmt "%s"; plot "<cat" using 1:2 with line;'
gist5e6cb1eb0b6d56bf5642471d18e0ad2f
解説
まず、
gnuplot -e 'set terminal dumb 150 30; set xdata time; set timefmt "%s"; plot "<cat" using 1:2 with line;'
について解説します。
set terminal dump
gnuplotで set terminal dumb
とすると、プロットの結果をターミナルにアスキーアートで出力することができます。
また、set terminal dump width height
のようにwidthとheightを指定すると、プロットの大きさを指定することができます。
set xdata time
gnuplotで set xdata time
とすると、X軸を時系列データとして解釈してくれるようになります。
set timefmt "%s";
set timefmt "%s"
は、時系列データのフォーマットを規定しています。%s
はUNIX時間に対応しています。
もし時系列データが他のフォーマットで渡ってくる場合は、 %Y-%m-%dT%H:%M:%S
のように適当に変えてやる必要があります。
plot "<cat" using 1:2 with line
通常gnuplotの plot
コマンドの第一引数には、プロットするデータが入ったファイルの名前を指定します。ここに "<cat"
を指定することで、標準入力の内容をプロットするデータとして解釈するようになります。
MySQLからデータを渡してやる
あとはMySQLからデータを取ってきてTSVにして、これをgnuplotの標準入力に食わせてやればグラフが描けます。
MySQLからデータを取ってきてTSVにして標準出力に出すワンライナーです:
mysql dbname -u root --password=passwd -e "SELECT timestamp, value FROM tbl WHERE condition=hoge "
1列目に時系列データ、2列目にプロットする値を持ってくるのが重要です。
制約
このワンライナーは2つ以上の列を1つのグラフにプロットできません。例えば、CPU使用率とメモリ使用率を1つのグラフにプロットするというようなことができません。
そういう複雑なグラフが見たくなったらgrafanaなどを使うべきということですね。導入がちょっと面倒ですが...