ltsview ─ LTSVフォーマットフィルタ (Text::LTSV 0.03)
LTSV が行指向な Key-Value フォーマットで捗る話 - naoyaのはてなダイアリー で試作した LTSV のフォーマッタが思いの他捗ったので ltsview という名前でもう少し機能を整えてみました。
Text::LTSV に同梱する形で先ほど CPAN に shipit したので、CPAN で取得可能になったら cpanm Text::LTSV で ltsview ごとインストールされるはずです。なお github は https://github.com/naoya/perl-Text-LTSV です。
$ cat example/example_log.ltsv time:05/Feb/2013:15:34:47 +0000 host:192.168.50.1 req:GET / HTTP/1.1 status:304 size:0 referer:- ua:Mozilla/ o) Chrome/25.0.1364.58 Safari/537.22 reqtime:0.000 uprestime:- time:05/Feb/2013:15:34:47 +0000 host:192.168.50.1 req:GET /poweredby.png HTTP/1.1 status:304 size:0 referer:http://192. 537.22 (KHTML, like Gecko) Chrome/25.0.1364.58 Safari/537.22 reqtime:0.000 uprestime:- time:05/Feb/2013:15:34:47 +0000 host:192.168.50.1 req:GET /nginx-logo.png HTTP/1.1 status:304 size:0 referer:htt eWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.58 Safari/537.22 reqtime:0.000 uprestime:- time:05/Feb/2013:15:34:47 +0000 host:192.168.50.1 req:GET /favicon.ico HTTP/
こういう若干見づらい LTSV フォーマットのログを
$ cat example/example_log.ltsv | ltsview --- host: 192.168.50.1 referer: '-' req: 'GET / HTTP/1.1' reqtime: 0.000 size: 0 status: 304 time: '05/Feb/2013:15:34:47 +0000' ua: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.58 Safari/537.22' uprestime: '-' --- host: 192.168.50.1 referer: http://192.168.50.6/ req: 'GET /poweredby.png HTTP/1.1' reqtime: 0.000 size: 0 status: 304 time: '05/Feb/2013:15:34:47 +0000' ua: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.58 Safari/537.22' uprestime: '-'
と見やすく表示します。昨日の通り、出力は色づけして表示されます。
コマンドラインで -k (--keys) オプションを指定すると、指定したキーだけを出力します。例えばリクエストとホストだけが欲しいなら
$ cat example/example_log.ltsv | ltsview -k req,host --- host: 192.168.50.1 req: 'GET / HTTP/1.1' --- host: 192.168.50.1 req: 'GET /poweredby.png HTTP/1.1' --- host: 192.168.50.1 req: 'GET /nginx-logo.png HTTP/1.1' --- host: 192.168.50.1 req: 'GET /favicon.ico HTTP/1.1' --- host: 192.168.50.1 req: '-'
とすればいい。User-Agent と時間とリクエストなら
$ cat example/example_log.ltsv | ltsview -k ua,time,req --- req: 'GET / HTTP/1.1' time: '05/Feb/2013:15:34:47 +0000' ua: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.58 Safari/537.22' --- req: 'GET /poweredby.png HTTP/1.1' time: '05/Feb/2013:15:34:47 +0000' ua: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.58 Safari/537.22' --- req: 'GET /nginx-logo.png HTTP/1.1' time: '05/Feb/2013:15:34:47 +0000' ua: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.58 Safari/537.22' --- req: 'GET /favicon.ico HTTP/1.1' time: '05/Feb/2013:15:34:47 +0000' ua: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) A
です。
逆に、-i (--ignore-keys) で欲しくないキーを指定することもできます。
$ cat example/example_log.ltsv | ltsview -i ua,time,req,size,uprestime --- host: 192.168.50.1 referer: '-' reqtime: 0.000 status: 304 --- host: 192.168.50.1 referer: http://192.168.50.6/ reqtime: 0.000 status: 304 --- host: 192.168.50.1 referer: http://192.168.50.6/ reqtime: 0.000 status: 304 --- host: 192.168.50.1 referer: '-' reqtime: 0.000 status: 404 --- host: 192.168.50.1 referer: '-' reqtime: 0.000 status: 400
ltsview はフィルタスクリプトなので、パイプ & フィルタで他の出力と組み合わせることができます。
$ tail -f /var/log/access_log.ltsv | ltsview -k host,time,req
と tail と組み合わせることもできるし
$ tail -f /var/log/access_log.ltsv | grep 'AppleWebKit' | ltsview -k host,time,req
と、先に grep を挟んでから ltsview に流しても良いでしょう。あるいは
$ cat example/example_log.ltsv | grep 'AppleWebKit' | ltsview -i ua,time,req,size,uprestime | cat -n 1 --- 2 host: 192.168.50.1 3 referer: '-' 4 reqtime: 0.000 5 status: 304 6 --- 7 host: 192.168.50.1 8 referer: http://192.168.50.6/ 9 reqtime: 0.000 10 status: 304 11 --- 12 host: 192.168.50.1 13 referer: http://192.168.50.6/ 14 reqtime: 0.000 15 status: 304 16 --- 17 host: 192.168.50.1 18 referer: '-' 19 reqtime: 0.000
と行番号を付与してみたりも出来ますね。
どうぞご利用ください。他にこんなオプションが欲しい、みたいのがあったらリクエストお待ちしてます!