読者です 読者をやめる 読者になる 読者になる

tkuchikiの日記

Linux やプログラミングについて書きます。

LTSV 形式の Web サーバのアクセスログを集計するツールを作りました

go golang

LTSV 形式の Web サーバのアクセスログを集計する、
tkuchiki/alp · GitHub を作成しました。

Install

https://github.com/tkuchiki/alp/releases から各 OS 用のバイナリを取得できます。
Linux 以外では動作確認していませんが、おそらく動作すると思います。

Usage

Labeled Tab-separated Values (LTSV) の Labels for Web server's Log みたいに log を出力すれば、

$ ./alp -f access.log
+-------+-------+-------+-------+-------+-----------+-----------+-----------+-----------+--------+----------+
| COUNT |  MIN  |  MAX  |  SUM  |  AVG  | MAX(BODY) | MIN(BODY) | SUM(BODY) | AVG(BODY) | METHOD |   URI    |
+-------+-------+-------+-------+-------+-----------+-----------+-----------+-----------+--------+----------+
| 1     | 0.123 | 0.123 | 0.123 | 0.123 |    56.000 |    56.000 |    56.000 |    56.000 | GET    | /foo/bar |
| 3     | 0.057 | 0.234 | 0.391 | 0.130 |    12.000 |    34.000 |    80.000 |    26.667 | POST   | /foo/bar |
+-------+-------+-------+-------+-------+-----------+-----------+-----------+-----------+--------+----------+

$ ./alp -f access.log -r
+-------+-------+-------+-------+-------+-----------+-----------+-----------+-----------+--------+----------+
| COUNT |  MIN  |  MAX  |  SUM  |  AVG  | MAX(BODY) | MIN(BODY) | SUM(BODY) | AVG(BODY) | METHOD |   URI    |
+-------+-------+-------+-------+-------+-----------+-----------+-----------+-----------+--------+----------+
| 3     | 0.057 | 0.234 | 0.391 | 0.130 |    12.000 |    34.000 |    80.000 |    26.667 | POST   | /foo/bar |
| 1     | 0.123 | 0.123 | 0.123 | 0.123 |    56.000 |    56.000 |    56.000 |    56.000 | GET    | /foo/bar |
+-------+-------+-------+-------+-------+-----------+-----------+-----------+-----------+--------+----------+

$ ./alp -f access.log -q
+-------+-------+-------+-------+-------+-----------+-----------+-----------+-----------+--------+-----------------------------+
| COUNT |  MIN  |  MAX  |  SUM  |  AVG  | MAX(BODY) | MIN(BODY) | SUM(BODY) | AVG(BODY) | METHOD |             URI             |
+-------+-------+-------+-------+-------+-----------+-----------+-----------+-----------+--------+-----------------------------+
| 1     | 0.057 | 0.057 | 0.057 | 0.057 |    12.000 |    12.000 |    12.000 |    12.000 | POST   | /foo/bar?token=xxx&uuid=xxx |
| 1     | 0.123 | 0.123 | 0.123 | 0.123 |    56.000 |    56.000 |    56.000 |    56.000 | GET    | /foo/bar?token=xxx          |
| 2     | 0.100 | 0.234 | 0.334 | 0.167 |    34.000 |    34.000 |    68.000 |    34.000 | POST   | /foo/bar?token=xxx          |
+-------+-------+-------+-------+-------+-----------+-----------+-----------+-----------+--------+-----------------------------+

$ ./alp -f access.log -q -r
+-------+-------+-------+-------+-------+-----------+-----------+-----------+-----------+--------+-----------------------------+
| COUNT |  MIN  |  MAX  |  SUM  |  AVG  | MAX(BODY) | MIN(BODY) | SUM(BODY) | AVG(BODY) | METHOD |             URI             |
+-------+-------+-------+-------+-------+-----------+-----------+-----------+-----------+--------+-----------------------------+
| 2     | 0.100 | 0.234 | 0.334 | 0.167 |    34.000 |    34.000 |    68.000 |    34.000 | POST   | /foo/bar?token=xxx          |
| 1     | 0.123 | 0.123 | 0.123 | 0.123 |    56.000 |    56.000 |    56.000 |    56.000 | GET    | /foo/bar?token=xxx          |
| 1     | 0.057 | 0.057 | 0.057 | 0.057 |    12.000 |    12.000 |    12.000 |    12.000 | POST   | /foo/bar?token=xxx&uuid=xxx |
+-------+-------+-------+-------+-------+-----------+-----------+-----------+-----------+--------+-----------------------------+

こんな感じに集計できます。
上記の例だと、-q をつけると、QueryString の key? も含めて集計、
つけなければ QueryString 抜きで集計します。
-r は逆順での出力です。

ltsv.org に書いてある通りの label を使っていない場合は、
--apptime-label--size-label--method-label--uri-label で、 label を変更することができます。
何を基準に sort するかは、すべての項目を指定するオプションがあるので、
それを指定すれば OK です。
table 形式で出力したくない場合は、--tsv をつければ TSV 形式で出力することができます。