插件窝 干货文章 Linux系统中LNMP日志管理技巧

Linux系统中LNMP日志管理技巧

log 日志 Nginx MySQL 330    来源:    2025-05-05

Linux系统中LNMP日志管理技巧

LNMP(Linux+Nginx+MySQL+PHP)是常见的Web服务架构,有效的日志管理对于系统维护、故障排查和安全分析至关重要。以下是LNMP环境下的日志管理技巧:

一、日志文件位置

  1. Nginx日志

    • 访问日志:/var/log/nginx/access.log
    • 错误日志:/var/log/nginx/error.log
    • 虚拟主机日志通常在/var/log/nginx/目录下,以域名命名
  2. MySQL日志

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

    • PHP-FPM错误日志:/var/log/php-fpm.log/var/log/php7.x-fpm.log
    • PHP错误日志:/var/log/php_errors.log

二、日志配置优化

Nginx日志配置

http {
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log main buffer=32k flush=5m;
    error_log /var/log/nginx/error.log warn;

    # 按虚拟主机分离日志
    server {
        server_name example.com;
        access_log /var/log/nginx/example.com.access.log main;
        error_log /var/log/nginx/example.com.error.log;
    }
}

MySQL日志配置

[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

# 二进制日志
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M

PHP日志配置

[PHP]
error_log = /var/log/php_errors.log
log_errors = On
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

[PHP-FPM]
pm.status_path = /status
ping.path = /ping
catch_workers_output = yes
access.log = /var/log/php-fpm.access.log
slowlog = /var/log/php-fpm.slow.log
request_slowlog_timeout = 10s

三、日志轮转配置

使用logrotate进行日志轮转,创建/etc/logrotate.d/lnmp文件:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        /usr/sbin/nginx -s reload
    endscript
}

/var/log/mysql/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 640 mysql adm
    sharedscripts
    postrotate
        test -x /usr/bin/mysqladmin || exit 0
        MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
        $MYADMIN ping &>/dev/null && $MYADMIN flush-logs
    endscript
}

/var/log/php*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 640 www-data adm
    sharedscripts
    postrotate
        /usr/bin/pkill -USR1 -u www-data -x php-fpm
    endscript
}

四、日志分析工具

  1. Nginx日志分析

    • goaccess:实时Web日志分析工具
    • awstats:高级Web统计工具
    • 简单命令:

      # 查看访问最多的IP
      awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 20
      
      # 查看HTTP状态码统计
      awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn
      
  2. MySQL慢查询分析

    • mysqldumpslow:MySQL自带的慢查询分析工具
    • pt-query-digest:Percona Toolkit中的强大分析工具 bash pt-query-digest /var/log/mysql/mysql-slow.log
  3. PHP错误分析

    # 统计PHP错误类型
    grep "PHP " /var/log/php_errors.log | awk -F 'PHP ' '{print $2}' | sort | uniq -c | sort -nr
    

五、日志监控与告警

  1. 使用fail2ban监控日志并阻止恶意IP:

    [nginx-http-auth]
    enabled = true
    filter = nginx-http-auth
    action = iptables[name=HTTP, port=http, protocol=tcp]
    logpath = /var/log/nginx/error.log
    
  2. 使用logwatchswatch进行日志监控和邮件告警

  3. ELK(Elasticsearch+Logstash+Kibana)搭建集中式日志分析平台

六、安全注意事项

  1. 设置适当的日志文件权限:

    chmod 640 /var/log/nginx/*.log
    chown www-data:adm /var/log/nginx/*.log
    
  2. 敏感信息不要记录在日志中,如密码、信用卡号等

  3. 定期检查日志文件大小,防止磁盘被占满

  4. 重要日志可以考虑实时同步到远程服务器备份

通过以上技巧,您可以有效地管理LNMP环境中的日志,提高系统维护效率和安全性。

下一篇:没有了