ltsview ─ LTSVフォーマットフィルタ (Text::LTSV 0.03)

LTSV が行指向な Key-Value フォーマットで捗る話 - naoyaのはてなダイアリー で試作した LTSV のフォーマッタが思いの他捗ったので ltsview という名前でもう少し機能を整えてみました。

Text::LTSV に同梱する形で先ほど CPAN に shipit したので、CPAN で取得可能になったら cpanm Text::LTSV で ltsview ごとインストールされるはずです。なお githubhttps://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

と行番号を付与してみたりも出来ますね。

どうぞご利用ください。他にこんなオプションが欲しい、みたいのがあったらリクエストお待ちしてます!