在 Ubuntu 上开启 Apache 慢日志(slow log),通常有两种常见方式,取决于你用的是 Apache 2.4 + mod_log_config 还是 使用第三方模块(如 mod_log_slow)。最常用、官方支持的方式是通过 LogLevel + 自定义日志 或 mod_log_debug,但“真正的慢请求日志”一般推荐下面两种方式之一。
mod_log_config(推荐,简单)Apache 本身没有原生“慢日志”,但可以通过记录请求处理时间来间接实现。
sudo a2enmod log_config
sudo a2enmod rewrite
编辑配置文件(例如 /etc/apache2/sites-available/000-default.conf 或 apache2.conf):
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combined_time
CustomLog ${APACHE_LOG_DIR}/access.log combined_time
说明:
%D:请求处理时间(微秒)access.log 找出处理时间长的请求sudo systemctl restart apache2
awk '$NF > 1000000 {print}' /var/log/apache2/access.log
表示超过 1 秒(1,000,000 微秒)的请求
mod_log_slow(真正的“慢日志”)mod_log_slow 是第三方模块,可以只记录超过指定时间的请求。
sudo apt update
sudo apt install apache2-dev build-essential
cd /tmp
git clone https://github.com/yokawasa/mod_log_slow.git
cd mod_log_slow
make
sudo make install
sudo a2enmod log_slow
在 /etc/apache2/apache2.conf 或虚拟主机中:
LogSlowEnabled On
LogSlowLongRequestTime 1.0
LogSlowFileName /var/log/apache2/slow.log
LogSlowTimeFormat "%Y-%m-%d %H:%M:%S"
sudo systemctl restart apache2
tail -f /var/log/apache2/slow.log
如果你是 PHP + Apache,也可以开 PHP 慢日志:
slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 1s
注意:PHP-FPM 才支持,Apache + mod_php 不支持
%D + access.log(最常用)mod_log_slow如果你愿意,可以告诉我:
apache2 -v)我可以给你一份完全贴合你环境的配置。