sortコマンドで簡単にApacheのログを時系列に並び替え
ロードバランサを経由するのでApacheのログが複数のサーバに分散する
ログはWebalizerで解析するのですが
Incrementalモードだと時系列に並んでないとうまく解析できないみたい(Ver.2.01)
ファイルを集めるのはいいとして
ログを並び替えるのをどうするか
http://d.hatena.ne.jp/rougeref/20080909
http://www.kishiro.com/apache/analyze_log.html
LLを使えばなんとでもなるのですがそれも面倒なので
# DBも面倒です、量も多くないですし
sortコマンドでサクッとできないかと調べると
http://jehiah.cz/a/sorting-apache-logs
はなかなかよかったのですが
スペース1つを区切り文字にしているので
例えばユーザ名にスペースが入るとNGです
結論としては
% setenv LC_ALL C % sort -t '[' -k 2.8,2.11n -k 2.4,2.6M -k 2.1,2.2n -k 2.13,2.14n -k 2.16,2.17n -k 2.19,2.20n access_log_all > access_log_sort
とするととりあえずよさそう
# まぁユーザ名に'['があるとこれもNGなんですが...
sortはLC_TIMEがCでないと月名(Jan,Feb...)でソートできない
LC_ALLをCにするのは
http://d.hatena.ne.jp/sile/20091102/1257175329
http://d.hatena.ne.jp/ny23/20120113/p1
を参考に
# bashなひとはexportで
あとメモgzipしたファイルとそうでないファイルを合わせるには
% zcat -f access_log access_log.1.gz ... > access_log_all
とするとよさそう
@hirose31: ApacheのLogFormat、combinedは撲滅させたい派。日付はiso8601にする、ソートもしやすいし。日付、レスポンスコード、所要秒数とか固定長チックなものは左に寄せて目grepしやすいように、URLとかUAとか可変長で長いのは右に。とか。
2012-01-16 11:33:52 via web
まったくそのとおり!