插件窝 干货文章 细说nginx日志如何按天优化

细说nginx日志如何按天优化

Nginx 日志 log 优化 847    来源:    2025-04-30

Nginx日志按天优化方案

Nginx日志按天分割和优化是服务器管理的重要环节,可以有效管理日志文件、提高分析效率并节省存储空间。以下是详细的优化方案:

一、日志按天分割方法

1. 使用logrotate工具(推荐)

logrotate是Linux系统自带的日志管理工具,配置方法:

sudo vim /etc/logrotate.d/nginx

添加以下内容:

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

参数说明: - daily: 每天轮转 - rotate 365: 保留365天的日志 - compress: 压缩旧日志 - delaycompress: 延迟一天压缩 - create: 新日志文件权限

2. 使用Nginx的timeiso8601变量(Nginx 1.11.8+)

修改nginx配置:

http {
    log_format custom '$time_iso8601 $remote_addr "$request" $status';

    access_log /var/log/nginx/access-${year}${month}${day}.log custom;

    map $time_iso8601 $year {
        default '0000';
        '~^(?<y>\d{4})-' $y;
    }

    map $time_iso8601 $month {
        default '00';
        '~^\d{4}-(?<m>\d{2})-' $m;
    }

    map $time_iso8601 $day {
        default '00';
        '~^\d{4}-\d{2}-(?<d>\d{2})' $d;
    }
}

二、日志优化建议

1. 精简日志格式

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

2. 选择性记录日志

# 排除静态文件日志
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    access_log off;
}

# 排除健康检查日志
location = /healthcheck {
    access_log off;
}

3. 缓冲日志写入

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

4. 错误日志分级

error_log /var/log/nginx/error.log warn;

三、自动化管理脚本

创建日志清理脚本/usr/local/bin/nginx_log_clean.sh:

#!/bin/bash
# 保留最近30天的日志
find /var/log/nginx/ -name "*.log" -mtime +30 -exec rm -f {} \;
# 重新加载nginx
nginx -s reload

添加到crontab:

0 0 * * * /usr/local/bin/nginx_log_clean.sh

四、高级优化方案

1. 使用ELK栈集中管理

将日志发送到Elasticsearch集群,使用Kibana可视化分析。

2. 实时日志分析

# 实时监控错误日志
tail -f /var/log/nginx/error.log | grep -E 'error|crit|alert|emerg'

3. 日志压缩归档

# 每月归档压缩
find /var/log/nginx/ -name "*.log" -mtime +30 -exec gzip {} \;

五、注意事项

  1. 确保Nginx用户对日志目录有写权限
  2. 监控日志磁盘空间使用情况
  3. 敏感信息不要记录在日志中(如密码、token等)
  4. 定期检查日志轮转是否正常工作

通过以上优化,可以实现Nginx日志的高效管理,既方便问题排查,又不会占用过多存储资源。