LAMP服务器日志管理指南
LAMP(Linux、Apache、MySQL、PHP)架构的日志管理是系统运维的核心环节,涵盖日志收集、轮转、分析、监控与安全五大维度,需针对每个组件的日志特性配置标准化流程,确保日志可追溯、系统可监控、风险可预警。
Linux系统日志是基础,主要记录内核、用户认证、服务运行等核心事件,路径通常为/var/log/。
/var/log/syslog/messages:系统通用日志(内核、服务启动等);/var/log/auth.log/secure:用户认证日志(登录、sudo使用等);/var/log/kern.log:内核日志(硬件、驱动相关事件);/var/log/boot.log:系统启动日志。tail -f:实时监控日志更新(如tail -f /var/log/auth.log);grep:过滤关键字(如grep "error" /var/log/syslog);journalctl(systemd专用):查看systemd服务日志(如journalctl -u apache2 -f)。logrotate工具自动压缩、清理旧日志,配置文件为/etc/logrotate.conf,服务特定配置存放在/etc/logrotate.d/(如系统日志默认配置已包含压缩、保留7天等规则)。Apache日志分为访问日志(记录请求详情)和错误日志(记录服务异常),路径取决于发行版:
/var/log/apache2/access.log(访问)、/var/log/apache2/error.log(错误);/var/log/httpd/access_log(访问)、/var/log/httpd/error_log(错误)。LogFormat调整日志格式(如添加请求时间、客户端IP、Referer等字段);SetEnvIf过滤静态文件(如图片、CSS),减少无效日志(如SetEnvIf Request_URI "\.(gif|jpg|css)$" dontlog);CustomLog "|/usr/sbin/rotatelogs /var/log/access_log.%Y%m%d 86400" combined)实现零停机轮转(无需重启Apache)。/etc/logrotate.d/apache2,设置每日轮转、保留7天、压缩旧日志(如compress、delaycompress),示例:/var/log/apache2/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 www-data adm
sharedscripts
postrotate
systemctl reload apache2 > /dev/null
endscript
}
MySQL日志用于监控数据库运行、排查性能问题,主要包括四类:
log_error指定,默认/var/log/mysql/error.log);general_log,生产环境谨慎使用,避免性能影响);long_query_time(默认10秒)的查询(需开启slow_query_log,用于性能优化);log_bin指定)。/etc/mysql/my.cnf):[mysqld]
log_error = /var/log/mysql/mysql-error.log
general_log = 0
general_log_file = /var/log/mysql/mysql-general.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 7 # 二进制日志自动过期7天
/etc/logrotate.d/mysql,自动处理错误、慢查询日志(二进制日志通过expire_logs_days自动清理),示例:/var/log/mysql/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 mysql adm
sharedscripts
postrotate
systemctl restart mysql > /dev/null
endscript
}
PHP日志记录应用层错误(如语法错误、逻辑异常),需通过内置函数、Monolog库或系统日志实现:
error_log()记录错误到系统日志或指定文件(如error_log("Database connection failed", 3, "/var/log/php_errors.log"));require 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$log = new Logger('app');
$log->pushHandler(new StreamHandler('/var/log/php/app.log', Logger::ERROR));
$log->error('User login failed: invalid credentials');
/etc/logrotate.d/php,设置每日轮转、保留7天、压缩,示例:/var/log/php/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 www-data adm
}
hash算法验证日志完整性(如记录日志哈希值到安全位置,读取时比对防止篡改);或通过Monolog的IntegrityChecker处理器自动校验。对于多服务器环境,需通过集中化管理提升效率:
/etc/rsyslog.conf开启UDP接收,配置客户端指向服务器IP);file输入插件读取Apache、MySQL、PHP日志);640(所有者:root,组:adm/www-data),防止未授权访问;sed或Monolog的Processor过滤日志中的密码、密钥(如sed -i 's/password=[^&]*/password=****/' /var/log/php.log);tail -f或ELK Dashboard实时查看关键日志(如错误日志、慢查询日志),快速响应问题。