插件窝 干货文章 LNMP服务器如何进行日志管理

LNMP服务器如何进行日志管理

日志 log Nginx var 489    来源:    2025-05-06

LNMP服务器日志管理指南

LNMP (Linux + Nginx + MySQL + PHP) 服务器的日志管理是系统运维的重要部分。以下是全面的日志管理方案:

一、日志文件位置

1. Nginx 日志

  • 访问日志:/var/log/nginx/access.log
  • 错误日志:/var/log/nginx/error.log
  • 虚拟主机日志通常在各自配置文件中定义

2. MySQL 日志

  • 错误日志:/var/log/mysql/error.log
  • 慢查询日志:/var/log/mysql/mysql-slow.log
  • 二进制日志:/var/lib/mysql/mysql-bin.*

3. PHP-FPM 日志

  • 错误日志:/var/log/php-fpm/error.log
  • 慢日志:/var/log/php-fpm/www-slow.log (需配置)

4. 系统日志

  • /var/log/messages (系统主日志)
  • /var/log/syslog (Ubuntu系统)
  • /var/log/auth.log (认证日志)

二、日志配置优化

Nginx 日志配置

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 buffer=32k flush=5m;
    error_log /var/log/nginx/error.log warn;
}

MySQL 日志配置 (my.cnf)

[mysqld]
log_error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes = 1

PHP-FPM 日志配置 (php-fpm.conf)

[global]
error_log = /var/log/php-fpm/error.log
log_level = notice

[www]
slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 5s

三、日志轮转配置

使用 logrotate 进行日志轮转,示例配置 /etc/logrotate.d/nginx:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

四、日志分析工具

1. 基础工具

  • tail -f /var/log/nginx/access.log - 实时查看日志
  • grep - 文本搜索
  • awk - 高级文本处理
  • wc -l - 行数统计

2. 高级分析工具

  • GoAccess: 实时Web日志分析器

    goaccess /var/log/nginx/access.log --log-format=COMBINED
    
  • ELK Stack (Elasticsearch + Logstash + Kibana)

    • 适用于大规模分布式日志管理
  • Grafana + Prometheus/Loki

    • 可视化日志监控方案

五、安全日志监控

  1. 设置日志文件权限:

    chmod 640 /var/log/nginx/*
    chown root:adm /var/log/nginx/*
    
  2. 监控异常登录:

    grep "Failed password" /var/log/auth.log
    
  3. 使用 fail2ban 自动封禁恶意IP:

    # 安装
    apt install fail2ban
    
    # 配置Nginx防护
    cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    # 编辑jail.local启用nginx-http-auth和nginx-badbots
    

六、日志清理策略

  1. 定期清理旧日志:

    find /var/log/nginx/ -name "*.log" -type f -mtime +30 -delete
    
  2. 使用 logrotate 自动管理

  3. 对于MySQL二进制日志:

    PURGE BINARY LOGS BEFORE '2023-01-01 00:00:00';
    # 或设置expire_logs_days参数
    

七、最佳实践

  1. 日志分级存储: 将不同级别的日志分开存储
  2. 集中式日志: 多服务器环境下使用rsyslog或ELK集中管理
  3. 敏感信息过滤: 确保日志中不记录密码等敏感信息
  4. 监控告警: 对关键错误设置监控告警
  5. 定期审计: 检查日志文件权限和完整性

通过以上措施,您可以有效管理LNMP服务器的日志,确保系统安全运行并便于故障排查。