メモ: テキストログをgnuplotで表示するコマンドの例
次の記事を興味深く読みました。
ところで・・・
シェルは素敵だよ!!
例えば Web サーバのデバッグ。なにかが急上昇していないかログから調査したい場合、
Apr 8 2012 14:33:59 POST ...
Apr 8 2012 14:34:00 GET ...
Apr 8 2012 14:34:00 GET ...
Apr 8 2012 14:34:01 POST ...
こんなログだったらcut -d' ' -f1-4 log.txt | xargs -L1 -I_ date +%s -d_ | uniq -c | (echo "plot '-' using 2:1 with lines"; cat) | gnuplot
Kosei Kitahara's Blog: Dropbox のスケールとか
こんなコマンドで、すぐに何が起きているかが把握できるグラフを取得できます。
上のコマンドの意味が分からず、こっそり調べて試したので、メモしておきます……。
コマンドの意味
cut
テキストファイルから指定部分を切出して表示する。
オプション | 役割 |
---|---|
-d | フィールドの区切文字を指定。デフォルトはタブ。 |
-f | フィールド単位での切出し。-f1-4は、1〜4番目のフィールドを指す。 |
log.txt | 切出し対象のファイル名。 |
xargs
標準入力を読み込んでコマンドラインを作成し、実行する。
オプション | 役割 |
---|---|
-L1 | 1コマンドラインにつき最大1行の入力行を使う。 |
-I_ date +%s | xargsで実行するコマンドの引数に、ここで指定した文字が現れた場合、標準入力から読み込んだ名前に置き換える。日付を1970/01/01 00:00:00からの経過秒のフォーマットに変換。 |
-d_ |
uniq
入力ファイル中、重複した行を1行だけ表示する。
オプション | 役割 |
---|---|
-c | 各行の出現回数を内容とともに表示する。 |
gnuplot
gnuplotの起動。
オプション | 役割 |
---|---|
using | プロットするデータを指定 |
with lines | 線を引く。 |
ちなみに、xargsの-Iオプションと-dオプションの直後のアンダースコアって何のためにあるんでしょ。findutilのxargs.cをちらっと読んでみたけど分からず。なんダロ??(ちゃんと読めやって話ですね、すいませんすいません…アンダースコアのあるときとないときとで挙動が違うのは理解したんだけど、このメモの趣旨と逸れるので詳細は省略)教えて頂きました。追記参照。
(追記: 2012/07/23)
アンダースコアは、標準入力を読み込むものだと分かりました。{}の代わりに使える記述方法なんですね。
また、最初に整理したオプション表に誤りがありました。dateの後の-dは、xargsコマンドのオプションではなく、dateコマンドのオプションでした。(表を再整理済み)
- d_で標準入力を取り込み、-Iに渡しているのですね。
$ cut -d' ' -f1-4 log.txt | xargs -L1 -I_ date +%s -d_ | uniq -c 1 1333863239 2 1333863240 1 1333863241 $ cut -d' ' -f1-4 log.txt | xargs -L1 -I_ date +%s | uniq -c 4 1343014868 $ date +%s 1343014874
オプションの-dを付けないと、変換自体は機能するものの、変換対象を読み込まないようで、現在時刻に統一されて集計されてしまいます。
いずれもコメントで指摘頂きました。finalfusionさん、ありがとうございます!
実行
gnuplotが入っていなければ、インストールします。# インストール方法は環境に合わせて適宜。
sudo apt-get install gnuplot
gnuplotがグラフを描画した後、すぐに終了してしまうのを防ぐために、gnuplot起動オプションに「-persist」をつけます。
cut -d' ' -f1-4 log.txt | xargs -L1 -I_ date +%s -d_ | uniq -c | (echo "plot '-' using 2:1 with lines"; cat) | gnuplot -persist
記事と同じ内容のログファイルを読み込ませると、こんなグラフが出ます。
ログエントリの集中を時系列でパッと見ることができますよ〜という話だったんですね。なるほど! それは素敵ですね!!(一周遅れ)
所感
といいつつ、ふだんは総合的な監視ツールのお世話になっているので、上のような方法でログを見ることは正直あまりありません。
でも、たとえば監視の基盤に載せていない検証環境で、ふとパフォーマンスを見たい時に、ささっとこういったことができれば、きっと便利ですよね。
お勧めなコマンドたち: sed, awk, grep, cut, head, tail, sort, uniq, tr, date, xarg
Kosei Kitahara's Blog: Dropbox のスケールとか
・・・らしいので、精進したいです。