【记录】Nginx日志过大导致服务器空间爆满

问题

最近发现有一个数据断了几天

  1. 尝试本地推送到 服务器,推送失败报错如下:
  2. 但是数据并不是完全中断,大多数图片数据都能顺利接收并覆盖
plain 复制代码
数据发送异常: obtLiveData, 异常信息: 500 Internal Server Error:
"<html><EOL><EOL><head><title>500 Internal Server Error</title></head><EOL><EOL><body><EOL><EOL><center><h1>500 Internal Server Error</h1></center><EOL><EOL><hr><center>nginx/1.28.0</center><EOL><EOL></body><EOL><EOL></html><EOL><EOL>"

排查

  1. 最后排查磁盘空间发现是nginx日志爆满
  2. 导致部分请求失败 返回500
  3. 由于日志需要保存 半年以上,nginx默认每次接收请求记录一次

而接口数据推送 每分钟1k+次请求 -> 每天约144万条日志,半年可能还是会超出空间

plain 复制代码
dh -f   # 查看磁盘空间

du -sh /* | sort -hr  # 查看目录下哪个文件夹占用最多

优化

  1. 由于主要接收一个数据接口的推送请求,故专门对改接口 的日志 单独进行极简配置

如下为 nginx 配置极简日志

javascript 复制代码
http {
    include       mime.types;
    default_type  application/octet-stream;

    
    # 默认日志格式
    log_format main '$remote_addr - [$time_local] "$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

    # 推送专用极简格式,降低日志空间占用
    log_format push_minimal '$remote_addr [$time_local] $status';

    # .... 其他配置
    server
    {
        charset utf8;
        listen 443 ssl;
  	    http2 on;

        # 仅针对高频推送接口:极简日志
        location = /api/receive/data {
            access_log /usr/local/nginx/logs/qj_push_data.access.log push_minimal;
            proxy_pass http://localhost:8025/api/receive/data;
        }

        # 后端代理
        location /api {
                proxy_pass http://localhost:8025/api;
        }

        # 。。。。 其余配置
    }
}

如图,右侧则是针对单一接口配置的 单独日志文件

  1. 半年自动备份功能

使用 logrotate 服务器每天0点会自动轮询

a. 查看是否安装(阿里云服务器默认安装)

javascript 复制代码
> rpm -q logrotate
logrotate-3.14.0-6.0.1.1.al8.x86_64

b. 查看nginx用户 通常是 nginx、nobody 或 www-data

我是自己上传安装包安装的,用户是nobody

ps aux | grep nginx

c. 配置备份内容

新建文件

plain 复制代码
vi /etc/logrotate.d/nginx-qj-push

然后再文件中配置备份内容,我是180天 esc + :wq 保存并退出

plain 复制代码
/usr/local/nginx/logs/qj_push_data.access.log {
    daily
    rotate 180
    compress
    delaycompress
    missingok
    notifempty
    create 640 nobody nobody
    sharedscripts
    postrotate
        /usr/local/nginx/sbin/nginx -s reopen >/dev/null 2>&1 || true
    endscript
}

如此便配置成功了,可以手动测试 logrotate 是否生效

可以看到目录下多了一个备份文件,且原日志文件是空的

plain 复制代码
logrotate -f /etc/logrotate.d/nginx-qj-push
相关推荐
一条咸鱼_SaltyFish18 分钟前
远程鉴权中心设计:HTTP 与 gRPC 的技术决策与实践
开发语言·网络·网络协议·程序人生·http·开源软件·个人开发
小技工丨1 小时前
华为TaiShan 200 2280 ARM服务器虚拟化部署完整指南
运维·服务器·arm开发
weixin_430750933 小时前
OpenMediaVault debian Linux安装配置企业私有网盘(三) 静态ip地址配置
linux·服务器·debian·nas·网络存储系统
DN金猿4 小时前
使用ubuntu安装nginx时报错
linux·nginx·ubuntu
上海云盾安全满满4 小时前
选择高防IP时需要重点关注哪些因素
网络·网络协议·tcp/ip
智在碧得4 小时前
碧服打造DataOps全链路闭环,定义大数据工程化发布新标杆
大数据·网络·数据库
孟无岐4 小时前
【Laya】Byte 二进制数据处理
网络·typescript·游戏引擎·游戏程序·laya
负二代0.05 小时前
Linux下的网络管理
linux·网络
大房身镇、王师傅5 小时前
【VirtualBox】VirtualBox 7.1.6 RockyLinux10 配置增强功能 设置共享目录
运维·服务器·virtualbox·rockylinux10
betazhou5 小时前
rsync使用案例分析
linux·运维·服务器·rsync·同步数据