Apache2 紀錄每個 request 的時間

Apache 想將每個 request 花費時間都紀錄起來,要怎麼做呢?

註:環境是 Debian / Ubuntu Linux

Apache2 紀錄每個 request 的時間

Apache 內建就有 modlogconfig 的模組,想要一次全部加上,直接修改設定檔即可。

  1. vim /etc/apache2/apache2.conf
    #LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" elapsed=%Dus" combined
  2. sudo service apache2 restart
  3. tail -f /var/log/apache2/access.log # 就會看到最後多了一欄 elapsed=2039us 等資料

註:上述是 Apache2 設定 "CustomLog /var/log/apache2/access.log combined" 的狀況,不是 combined 請在自行修改自己使用的 LogFormat

tail 要 parse 出elapsed 的寫法

  1. 註:先用 awk -F\" 將 " 分隔
  2. $ sudo tail -f access.log | awk -F\" '{print $7,$2}' | awk '{print $1,$3}' | sed 's/elapsed=//'
  3. $ sudo tail -f access.log | awk -F\" '{print $7,$2}' | awk '{print $1,$3}' | sed 's/elapsed=//' | sed 's/us//' | awk '{sum+=$1} END {print "Average = ", sum/NR}' # 平均
  4. $ cat access.log | awk -F\" '{print $7,$2}' | awk '{print $1,$3}' | sed 's/elapsed=//' | sed 's/us / /' | awk '{if ($1 > 500000) {print $1, $2}}' # 撈出超過 500ms 的 log

相關網頁

Save

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

在〈Apache2 紀錄每個 request 的時間〉中有 1 則留言

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料