Apache 想將每個 request 花費時間都紀錄起來,要怎麼做呢?
註:環境是 Debian / Ubuntu Linux
Apache2 紀錄每個 request 的時間
Apache 內建就有 modlogconfig 的模組,想要一次全部加上,直接修改設定檔即可。
- 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 - sudo service apache2 restart
- tail -f /var/log/apache2/access.log # 就會看到最後多了一欄 elapsed=2039us 等資料
註:上述是 Apache2 設定 "CustomLog /var/log/apache2/access.log combined" 的狀況,不是 combined 請在自行修改自己使用的 LogFormat
tail 要 parse 出elapsed 的寫法
- 註:先用 awk -F\" 將 " 分隔
- $ sudo tail -f access.log | awk -F\" '{print $7,$2}' | awk '{print $1,$3}' | sed 's/elapsed=//'
- $ 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}' # 平均
- $ 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
相關網頁
- Apache Logs: how long does it take to serve a request?
- Apache Security: Chapter 8. Logging and Monitoring
- LoggingFormat - modlogslow - Logging Format - Apache module for logging of slow requests handling
- Golang apache logging
- mod_log_forensic - Apache HTTP Server Version 2.4
Save