解决nginx日志过大问题

1. 问题点

nginx默认的日志在logs/access.log,并且是一直累加写入,时间长了就会非常大,占用过多的硬盘,如果强行删除是很不友好的,需要重启服务;

2. 文件分割

上图文件已经达到了十个G左右

处理的思路肯定是生成带有日志的一系列的文件,然后保留一定的日志,这样才是一个正常的思路;

shell 复制代码
log_format access-upstream '$time_iso8601|$request|$remote_addr|$upstream_response_time|$http_user_agent|$http_x_forwarded_for';
map $time_iso8601 $logdate {
    '~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd;
    default      'date-not-found';
}
access_log logs/access-$logdate.log ;
# access_log off; # 实在不需要的话,可以将其关闭(如心跳请求,会记录日志)

上面代码中主要使用到了map模块和对应的语法:

map指令使用ngx_http_map_module模块提供的。默认情况下,nginx有加载这个模块,除非人为的 --without-http_map_module。

ngx_http_map_module模块可以创建变量,这些变量的值与另外的变量值相关联。允许分类或者同时映射多个值到多个不同值并储存到一个变量中,map指令用来创建变量,但是仅在变量被接受的时候执行视图映射操作,对于处理没有引用变量的请求时,这个模块并没有性能上的缺失。

加上之后重新加载配置文件:

shell 复制代码
# 检测配置是否正确
./sbin/nginx -t

#加载配置
./sbin/nginx -s reload

观察logs文件中已经生成了当日的日志,这是可以清理掉之前老文件了(如果确定没有用途的情况下),下一步就是做定时器,定时删除过期的文件

3. 定时器定时删除N天之前的日志

新建删除脚本,假如保留30天日志

bash 复制代码
#!/bin/bash

# 指定日志文件夹路径
LOG_DIR="/usr/local/nginx/logs"

# 获取当前日期
CURRENT_DATE=$(date "+%Y-%m-%d")

# 计算 30 天前的日期
OLD_DATE=$(date -d "30 days ago" "+%Y-%m-%d")

# 遍历日志文件夹中的文件
for logfile in "$LOG_DIR"/*; do
    # 提取文件名中的日期部分
    filename=$(basename "$logfile")
    filedate=${filename#access-}
    filedate=${filedate%.log}

    # 如果文件的日期早于 OLD_DATE,则删除该文件
    if [[ "$filedate" < "$OLD_DATE" ]]; then
        rm "$logfile"
    fi
done

添加定时器

shell 复制代码
crontab -e

编辑并保存

bash 复制代码
0 0 * * * /usr/local/nginx/logs/cleanup_logs.sh

查看定时器

bash 复制代码
crontab -l

这样每天凌晨会清理掉30天之前的日志文件;

感谢大家浏览,有问题请留言!

相关推荐
专注API从业者3 小时前
告别人工盯品!借助 Open Claw 搭建电商商品自动化监控与数据分析系统(完整可运行源码)
大数据·运维·数据库·数据分析·自动化
爱喝水的鱼丶4 小时前
SAP-ABAP:ABAP 用户出口参数传递与上下文获取:SAP 标准数据读取与交互逻辑实现
运维·性能优化·交互·sap·abap·经验交流·出口
IT大白鼠4 小时前
PentestGPT作为AI运维编排工作流自动化底座的技术架构与应用价值评估
运维·人工智能·自动化·pentestgpt
j7~5 小时前
【Git】《Git 系列指南(二):Git基本操作与 reset 三种模式》
运维·git·git安装·git基本操作·git配置·创建git仓库·git reset三种模式
zzzll11115 小时前
n8n 工作流自动化平台入门指南
运维·自动化
Hrain-AI6 小时前
Anthropic oncall-kit 开源拆解:运维 Agent 落地范式的四基石与权限边界
运维·人工智能·开源
HXDGCL6 小时前
从“转盘困局”到“直线破局”:华创力科技PTS精密分度输送系统如何重塑自动化产线
运维·科技·自动化
戴西软件7 小时前
国内有哪些智能化RPA工具?——从“录数据”到“做判断”,国产数字员工正在重新定义自动化
运维·自动化·rpa
Linux-lucky7 小时前
28-Linux学习之旅之Maven与Nexus制品库
linux·运维·学习·nginx·tomcat·maven
Zhu7588 小时前
在Docker环境离线部署最新版Harbor
运维·docker·容器