LoginSignup
0
0

More than 3 years have passed since last update.

awk を使ってアクセスログから平均・最小・最大・タイル値を取得した話

Posted at

株式会社オズビジョンのユッコ (@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 はとても便利です。
もし手軽に集計する必要が出た場合にはぜひ使ってみてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0