温馨提示×

Linux LNMP怎样进行日志管理

小樊
37
2025-12-27 19:07:46
栏目: 智能运维

Linux LNMP日志管理实操指南

一 核心思路与目录

  • 明确日志类型与路径:Nginx 的访问与错误日志、MySQL 的错误/慢查询/二进制日志、PHP-FPM 的错误/访问日志,以及应用自身日志。
  • 建立统一策略:按日/按大小轮转、压缩归档、保留周期、权限最小化、集中化分析与告警。
  • 常用路径与用途一览:
    • Nginx:/var/log/nginx/access.log、/var/log/nginx/error.log(访问与错误)
    • MySQL:/var/log/mysql/error.log、/var/log/mysql/slow.log、/var/log/mysql/binlog(错误、慢查询、二进制)
    • PHP-FPM:常见为 /var/log/php-fpm.log/var/log/php/{version}-fpm.log,亦可自定义到 /var/log/php-fpm/(如 www.access.log
      以上路径在不同发行版可能略有差异,建议以实际配置为准。

二 组件配置与轮转要点

  • Nginx
    • 配置示例(在 http 或 server 块):
      • access_log /var/log/nginx/access.log combined;
      • error_log /var/log/nginx/error.log warn;
      • 可自定义 log_format 记录客户端真实 IP、请求时间等字段。
    • 轮转示例(/etc/logrotate.d/nginx):
      • /var/log/nginx/*.log { daily; rotate 14; compress; delaycompress; missingok; notifempty; create 0640 www-data adm; sharedscripts; postrotate kill -USR1 cat /var/run/nginx.pid; endscript }
  • MySQL
    • 配置示例(my.cnf 的 [mysqld]):
      • log_error=/var/log/mysql/error.log
      • slow_query_log=1; slow_query_log_file=/var/log/mysql/slow.log; long_query_time=2
      • log_bin=/var/log/mysql/binlog; binlog_expire_logs_seconds=604800(保留7天
    • 轮转示例(/etc/logrotate.d/mysql,仅对 error/slow 等文本日志):
      • /var/log/mysql/error.log /var/log/mysql/slow.log { daily; rotate 7; compress; missingok; notifempty; create 0640 mysql mysql; postrotate systemctl reload mysql; endscript }
    • 二进制日志清理:可设置过期时间自动清理,或执行 PURGE BINARY LOGS 删除指定时间之前的 binlog。
  • PHP-FPM
    • 路径与级别:在 /etc/php/{version}/fpm/pool.d/www.conf 中设置 error_log、access.log、log_level(生产建议 warning)。
    • 轮转示例(/etc/logrotate.d/php-fpm):
      • /var/log/php-fpm/*.log { daily; rotate 7; compress; delaycompress; missingok; notifempty; create 0640 www-data adm; sharedscripts; postrotate kill -USR2 $(cat /var/run/php-fpm/php-fpm.pid); endscript }
        以上配置与轮转要点可直接落地,注意 pid/路径与运行用户需与实际环境一致。

三 分析与可视化

  • 实时与检索
    • 实时查看:tail -f /var/log/nginx/access.log;按条件过滤:grep “404” /var/log/nginx/access.log
    • 系统日志:journalctl -u nginx -f(按服务过滤),或指定时间段 journalctl --since “2025-12-01” --until “2025-12-31”
  • 访问分析
    • GoAccess:goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED(生成可视化报告)
  • 数据库慢查询
    • 内置:mysqldumpslow -s t -t 5 /var/log/mysql/slow.log
    • 高级:pt-query-digest /var/log/mysql/slow.log(识别性能瓶颈与异常 SQL)
      以上工具组合可覆盖日常排障、性能优化与安全审计需求。

四 监控告警与集中化

  • 监控与告警
    • 基础监控:结合 Nagios/Zabbix 对日志关键字(如 5xx、慢查询突增)设置阈值与告警
    • 可视化与指标:通过 Prometheus + Grafana 采集日志派生指标(请求速率、错误率、P95/P99 时延)并配置告警规则
  • 集中化与长期存储
    • 方案选型:ELK Stack(Elasticsearch/Logstash/Kibana)GraylogGrafana Loki(与 Grafana 深度集成)
    • 价值:跨节点统一检索、可视化仪表盘、长期留存与审计合规
      建议按数据量与团队能力选择集中化方案,小规模可先落地分析与告警,再逐步演进。

五 安全与维护清单

  • 权限最小化:日志目录与文件属主/权限合理设置(如 Nginx:www-data,MySQL:mysql),避免敏感信息泄露
  • 日志级别控制:生产环境避免 DEBUG/INFO 泛滥;Nginx error_log 设为 warn;PHP-FPM log_level 设为 warning
  • 保留与清理:按合规与容量规划设置保留周期(如 Nginx 保留14天、MySQL 慢查询7天),过期自动压缩归档与清理
  • 二进制日志策略:启用 binlog_expire_logs_seconds 或定期 PURGE,避免磁盘被占满
  • 变更与验证:修改配置后先语法检查与 dry-run(如 logrotate -d),再平滑重载服务(Nginx 用 USR1、PHP-FPM 用 USR2、MySQL 用 reload)
  • 备份与离线归档:关键日志定期备份至对象存储/离线介质,满足审计与取证需求
    以上做法覆盖安全、稳定与合规的关键环节,建议纳入日常巡检与容量管理流程。

0