温馨提示×

LNMP环境下日志管理方法

小樊
35
2025-12-06 03:53:31
栏目: 编程语言

LNMP环境下日志管理方法

一 日志分类与定位

  • 建议先梳理各组件的日志路径与作用,便于后续轮转、分析与告警配置。
组件 常见路径 主要用途
Nginx /var/log/nginx/access.log/var/log/nginx/error.log 访问记录、错误与诊断
PHP-FPM /var/log/php-fpm/(如:www-data-*.log 或 php-fpm.log) FPM 进程与脚本错误
MySQL/MariaDB /var/log/mysql/error.log,以及(可选)slow.loggeneral.log 错误、慢查询、通用查询
系统日志 journalctl -u nginx/mysql 服务启动、运行与崩溃信息
  • 实时查看常用命令:tail -f、journalctl -u 服务名 -f。以上路径在不同发行版或安装方式下可能略有差异,请以实际环境为准。

二 日志轮转与保留策略

  • 使用系统自带的 logrotate 做按日/按大小切割、压缩与过期清理,避免单日志无限膨胀。
  • 通用原则:按日切割(daily)、保留7–30天(rotate 7/30)、启用压缩(compress)、空文件不轮转(notifempty)、缺失不报错(missingok)、按服务设置属主与权限(create)。
  • 示例配置(/etc/logrotate.d/nginx):
/var/log/nginx/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 0644 root adm
    sharedscripts
    postrotate
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 $(cat /var/run/nginx.pid)
        fi
    endscript
}
  • 示例配置(/etc/logrotate.d/php-fpm):
/var/log/php-fpm/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        if [ -f /var/run/php-fpm/php-fpm.pid ]; then
            kill -USR2 $(cat /var/run/php-fpm/php-fpm.pid)
        fi
    endscript
}
  • 示例配置(/etc/logrotate.d/mysql):
/var/log/mysql/*.log {
    daily
    missingok
    rotate 7
    compress
    notifempty
    create 0640 mysql adm
}
  • 调试与执行:logrotate -d 配置文件(语法检查),logrotate -f 配置文件(强制执行)。Nginx 用 kill -USR1 重新打开日志文件,PHP-FPM 用 kill -USR2 安全重载,避免进程中断。

三 日志格式与采集优化

  • Nginx 日志格式自定义(/etc/nginx/nginx.conf 的 http 块):
http {
    log_format main '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';
    access_log /var/log/nginx/access.log main;
    error_log  /var/log/nginx/error.log;
}
  • 性能与噪声控制:
    • 对静态资源关闭访问日志,减少 I/O 与存储占用:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {
    expires 7d;
    access_log off;
}
  • 合理设置 PHP 错误日志级别 与路径(php.ini 或 www.conf 的 error_log),避免记录过多调试信息;必要时开启 异步/缓冲写入 降低应用性能影响。

四 分析与可视化

  • 命令行快速检索:grep、awk、sed 对访问与错误日志做条件过滤、统计与报表生成。
  • 实时可视化:使用 GoAccess 生成 HTML 访问报告,便于运营与安全分析:
goaccess -a -d -f /var/log/nginx/access.log \
  --log-format '%h %^[%d:%t %^] "%r" %s %b "%R" "%u" %^' \
  --date-format %d/%b/%Y --time-format %T \
  -o /var/www/html/goaccess.html
  • 集中化平台:小规模可用 ELK Stack(Elasticsearch/Logstash/Kibana)Graylog;资源更紧张时可用 Fluentd + Loki/Grafana 组合,统一采集、解析、存储与可视化。

五 监控告警与安全合规

  • 服务与系统日志监控:使用 journalctl -u nginx/mysql -f 实时跟踪;结合 Logwatch、rsyslog 做常规汇总与转发;在 Prometheus + Grafana 中基于日志或指标设定阈值告警。
  • 安全与合规要点:
    • 严格限制日志文件权限(如 Nginx 0644 root adm、PHP-FPM 0640 www-data adm、MySQL 0640 mysql adm),仅授权人员可访问。
    • 定期备份关键日志(如 tar/rsync 到离线或对象存储),并设置合理的保留周期与异地归档策略。
    • 建立基线巡检:异常状态码比例、暴力访问特征、慢查询增长、磁盘占用阈值等,配合告警及时处置。

0