株式会社オズビジョンのユッコ (@terra_yucco) です。
業務面でちょっとばたついており更新はぱたりと止まりましたが、また折に触れて発信していくつもりでいます。
ログ集計
本日のお題はログ集計です。
特定のエンドポイントのアクセスのみを grep した後のアクセスログから、所要時間の平均・最小・最大・タイル(近似値) を求めるライナーを書いたので。
ファイルは所要時間の昇順にソートされている前提とします。
Tile の元になる行数取得
awk に変数を渡せばたぶんワンライナーで行けますが、今日は速度が求められたので、まず行数は先に取りました。
$ wc -l target.log
188703
Tile に当たる行数を取得
$ echo $(( 188703 / 10 * 9 ))
169830
実際の値を取得
所要時間はスペース区切りのフィールド 6 番目です。
以下は読みやすいように適宜改行を入れていますが、実際は改行なしで使いました。
$ cat target.log | /
awk -F' ' '
BEGIN {
i = 0;
sum = 0;
min = 0;
max = 0;
tile90 = 0;
}
{
i++;
sum += $6;
if (i == 1) { min = $6 };
if (i == 169830) { tile90 = $6 };
if (i == 188703) { max = $6 };
}
END {
print i;
print (sum / i);
print min;
print max;
print tile90;
}'
188703
4403
2401
124023446
450234
Conclusion
もちろん PHP などでもいいのですが、こういった簡易集計には awk はとても便利です。
もし手軽に集計する必要が出た場合にはぜひ使ってみてください!