Redian新闻
>
NGINX 必学——日志切割

NGINX 必学——日志切割

公众号新闻

链接:https://www.cnblogs.com/sxy-blog/p/17463216.html

日志切割(shell脚本)

nginx日志默认是不切割的,网站运行久了自然生成大量日志,导致单文件的处理,太麻烦,因此工作里一般定期切割,一般按天切割。
-rw-r--r-- 1 root root 2.1G May 8 13:57 front_access.log

先纯手动的去切割日志,备份日志

1. 给nginx进程发送信号,让nginx重新生成一个新日志文件,这就是一个日志切割根本
/var/log/nginx/access.log.bak # 1.备份原本日志文件nginx reload reopen信号# 配置文件中定义的日志文件名,是这个2. /var/log/nginx/access.log # 重新生成新日志文件,让新日志往这里去写

# 手动切割,修改日志#1.准备好旧的日志文件,测试写入大量的日志记录,先用第一种办法,for循环[root@web-8 ~]#for num in {1..10000};do curl 10.0.0.8 ; done

#
2.使用支持多进程,并发写入的工具,如ab命令 apache提供的性能压测命令,给网站发送支持并发的大量的http请求。
[root@web
-8 ~]#yum install httpd-tools -y

# 发送10000个http请求,且招来100个人同时发请求
ab -c 100 -n 10000 http://10.0.0.8/

#
3.当前日志数量
[root@web-8 /var/log/nginx]#cat all-server-accesss.log |wc -l20000


#
3.让你有一个已经记录了大量日志的文件,得进行日志切割了

切割思路就是,1.先重命名,等于备份() 2. 重新记录nginx日志 (/var/log/nginx/access.log) 按天记录日志 (每天夜里的 整点分进行日志备份,日志)按天,生成一个新的日志文件
# 备份旧日志(模拟是前一天的旧日志)
cd /var/log/nginx && mv all-server-accesss.log all-server-accesss.log.$(date '+%F')
# 还得生成新日志,得继续记录给nginx进程发送reopen信号,重新生成新日志# 用这种方式,可以最精确的提取进程id号。
kill -USR1 $(ps -ef|grep nginx |grep master | awk '{print $2}')
此时会生成新的日志[root@web-8 /var/log/nginx]#lltotal 6084-rw-r--r-- 1 www root 0 May 23 10:10 all-server-accesss.log-rw-r--r-- 1 root root 4160000 May 23 10:08 all-server-accesss.log.2022-05-23---10:04:17-rw-r--r-- 1 www root 700 May 23 10:10 error.log

此时新日志,就会记录到这个新的日志文件中了
==> all-server-accesss.log <==/index.html 10.0.0.8 - - [23/May/2022:10:10:56 +0800] "GET / HTTP/1.1" 200 6 "-" "curl/7.29.0" "-"/index.html 10.0.0.8 - - [23/May/2022:10:10:57 +0800] "GET / HTTP/1.1" 200 6 "-" "curl/7.29.0" "-"/index.html 10.0.0.8 - - [23/May/2022:10:10:58 +0800] "GET / HTTP/1.1" 200 6 "-" "curl/7.29.0" "-"/index.html 10.0.0.8 - - [23/May/2022:10:10:58 +0800] "GET / HTTP/1.1" 200 6 "-" "curl/7.29.0" "-"

对于旧的日志 你最好 创建文件夹去分类管理他们

1.shell脚本切割

1.查看当前的日志
[root@web-9 /var/log/nginx]#lsaccess.log error.log error.movie.yuchaoit.log error.www.yuchaoit.log movie.yuchaoit.log www.yuchaoit.log

2.备份当前日志文件,请用rename改名即可
[root@web-9 /var/log/nginx]#lltotal 0-rw-r--r-- 1 root root 0 May 8 14:31 error.log-rw-r--r-- 1 root root 0 May 8 14:31 error.movie.yuchaoit.log-rw-r--r-- 1 root root 0 May 8 14:31 error.www.yuchaoit.log-rw-r--r-- 1 root root 0 May 8 14:31 movie.yuchaoit.log-rw-r--r-- 1 root root 0 May 8 14:31 www.yuchaoit.log[root@web-9 /var/log/nginx]#[root@web-9 /var/log/nginx]#[root@web-9 /var/log/nginx]#rename log log.$(date +%F) *.log[root@web-9 /var/log/nginx]#lltotal 0-rw-r--r-- 1 root root 0 May 8 14:31 error.log.2022-05-08-rw-r--r-- 1 root root 0 May 8 14:31 error.movie.yuchaoit.log.2022-05-08-rw-r--r-- 1 root root 0 May 8 14:31 error.www.yuchaoit.log.2022-05-08-rw-r--r-- 1 root root 0 May 8 14:31 movie.yuchaoit.log.2022-05-08-rw-r--r-- 1 root root 0 May 8 14:31 www.yuchaoit.log.2022-05-08

3.给nginx master进程发送USR1信号,等于重新打开日志记录
nginx -s reopen或者 kill -USR1 $(cat /var/run/nginx.pid)

4.试试重新生成日志
[root@web-9 /var/log/nginx]#[root@web-9 /var/log/nginx]#kill -USR1 $(cat /var/run/nginx.pid)[root@web-9 /var/log/nginx]#lltotal 0-rw-r--r-- 1 www root 0 May 8 14:36 error.log-rw-r--r-- 1 root root 0 May 8 14:31 error.log.2022-05-08-rw-r--r-- 1 www root 0 May 8 14:36 error.movie.yuchaoit.log-rw-r--r-- 1 root root 0 May 8 14:31 error.movie.yuchaoit.log.2022-05-08-rw-r--r-- 1 www root 0 May 8 14:36 error.www.yuchaoit.log-rw-r--r-- 1 root root 0 May 8 14:31 error.www.yuchaoit.log.2022-05-08-rw-r--r-- 1 www root 0 May 8 14:36 movie.yuchaoit.log-rw-r--r-- 1 root root 0 May 8 14:31 movie.yuchaoit.log.2022-05-08-rw-r--r-- 1 www root 0 May 8 14:36 www.yuchaoit.log-rw-r--r-- 1 root root 0 May 8 14:31 www.yuchaoit.log.2022-05-08

2.完整的脚本

[root@web-9 /etc/nginx]#cat cut_log.sh #!/bin/bash
# 源日志目录logs_path="/var/log/nginx"
# 备份日志目录back_logs_path="${logs_path}/$(date -d 'yesterday' +'%F')"

# 创建备份目录,以日期命名,注意,每天零点整切割,开始记录新的一天的日志,备份目录应该是昨天mkdir -p ${back_logs_path}

# 重命名旧日志名,注意日期cd ${logs_path} && find . -type f |xargs -i mv {} {}.$(date -d 'yesterday' +'%F')

# 移动旧日志文件到该目录下cd ${logs_path} && find . -type f |xargs -i mv {} ${back_logs_path}
# 重新生成新日志kill -USR1 `cat /var/run/nginx.pid`

3.实践过程

1.你可以准备如下测试数据
[root@web-9 /var/log/nginx]#systemctl restart nginx[root@web-9 /var/log/nginx]#lltotal 0-rw-r--r-- 1 root root 0 May 8 15:17 error.log-rw-r--r-- 1 root root 0 May 8 15:17 error.movie.yuchaoit.log-rw-r--r-- 1 root root 0 May 8 15:17 error.www.yuchaoit.log-rw-r--r-- 1 root root 0 May 8 15:17 movie.yuchaoit.log-rw-r--r-- 1 root root 0 May 8 15:17 www.yuchaoit.log


2.修改日期到第二天0点
[root@web-9 /var/log/nginx]#date -s '2022-5-9 00:00'Mon May 9 00:00:00 CST 2022[root@web-9 /var/log/nginx]#dateMon May 9 00:00:01 CST 2022
3.执行脚本
[root@web
-9 /etc/nginx]#bash cut_log.sh

4.查看备份的日志
 

4.写入定时任务

[root@web-9 /etc/nginx]#crontab -l* * * * * /usr/sbin/ntpdate time1.aliyun.com > /dev/null 2>&10 0 * * * /bin/bash /etc/nginx/cut_log.sh
 

二、日志切割(logrotate工具)

清理上一次实验的环境。
shell脚本切割比较简单方便、nginx其实提供了更好用的工具
logrotate是一款自动切割日志的工具

1.检查logrotate

# rpm -qa 检查nginx的配置文件列表
[root@web-9 /etc/nginx]#rpm -qc nginx/etc/logrotate.d/nginx/etc/nginx/conf.d/default.conf/etc/nginx/fastcgi_params/etc/nginx/mime.types/etc/nginx/nginx.conf/etc/nginx/scgi_params/etc/nginx/uwsgi_params
 

2.配置解释

[root@web-9 /etc/nginx]#cat /etc/logrotate.d/nginx /var/log/nginx/*.log { daily # 每天切割 missingok # 忽略错误 rotate 52 # 最多保留多少个存档 compress # 切割后且压缩 delaycompress # 延迟压缩动作在下一次切割 notifempty # 日志为空就不切割 create 640 nginx adm # 切割的文件权限 sharedscripts # 共享脚本,结果为空 postrotate # 收尾动作,重新生成nginx日志if [ -f /var/run/nginx.pid ]; thenkill -USR1 `cat /var/run/nginx.pid`fi endscript # 结束动作}

3.测试切割

1.创建压测工具,生成大量日志
yum install httpd-tools -y

2.可以先清空默认日志


3.模拟100个并发用户,共计发出10000个请求
ab -c 100 -n 10000 http://10.0.0.9/


4.检查日志记录
[root@web-9 /var/log/nginx]#lltotal 960-rw-r--r-- 1 root root 0 May 8 15:41 error.log-rw-r--r-- 1 root root 0 May 8 15:41 error.movie.yuchaoit.log-rw-r--r-- 1 root root 0 May 8 15:41 error.www.yuchaoit.log-rw-r--r-- 1 root root 900000 May 8 15:41 movie.yuchaoit.log-rw-r--r-- 1 root root 0 May 8 15:41 www.yuchaoit.log

[root@web-9 /var/log/nginx]#cat movie.yuchaoit.log |wc -l10000


5.主动切割日志
[root@web-9 /var/log/nginx]#logrotate -f /etc/logrotate.d/nginx [root@web-9 /var/log/nginx]#lltotal 880-rw-r--r-- 1 www root 0 May 8 15:41 error.log-rw-r--r-- 1 www root 0 May 8 15:41 error.movie.yuchaoit.log-rw-r--r-- 1 www root 0 May 8 15:41 error.www.yuchaoit.log-rw-r----- 1 www adm 0 May 8 15:41 movie.yuchaoit.log-rw-r--r-- 1 root root 900000 May 8 15:41 movie.yuchaoit.log.1-rw-r--r-- 1 www root 0 May 8 15:41 www.yuchaoit.log

6.会发现当前并没有压缩,只有下一次切割才会压缩

7.修改系统时间,模拟到了第二天
[root@web-9 /var/log/nginx]#date -s '20220509'Mon May  9 00:00:00 CST 2022[root@web-9 /var/log/nginx]#date +%F2022-05-09

8.再次创建大量日志(否则空日志不会切割)
[root@master-61 ~]#ab -c 100 -n 10000 http://10.0.0.9/


9.再次查看日志
[root@web-9 /var/log/nginx]#lltotal 1840-rw-r--r-- 1 www root 0 May 8 15:45 error.log-rw-r--r-- 1 www root 0 May 8 15:45 error.movie.yuchaoit.log-rw-r--r-- 1 www root 0 May 8 15:45 error.www.yuchaoit.log-rw-r----- 1 www adm 900000 May 9 00:00 movie.yuchaoit.log-rw-r--r-- 1 root root 900000 May 8 15:45 movie.yuchaoit.log.1-rw-r--r-- 1 www root 0 May 8 15:45 www.yuchaoit.log


10.开始切割,查看日志压缩情况
[root@web-9 /var/log/nginx]#logrotate -f /etc/logrotate.d/nginx[root@web-9 /var/log/nginx]#lltotal 884-rw-r--r-- 1 www root 0 May 8 15:45 error.log-rw-r--r-- 1 www root 0 May 8 15:45 error.movie.yuchaoit.log-rw-r--r-- 1 www root 0 May 8 15:45 error.www.yuchaoit.log-rw-r----- 1 www adm 0 May 9 00:00 movie.yuchaoit.log-rw-r----- 1 www adm 900000 May 9 00:00 movie.yuchaoit.log.1-rw-r--r-- 1 root root 3179 May 8 15:45 movie.yuchaoit.log.2.gz-rw-r--r-- 1 www root 0 May 8 15:45 www.yuchaoit.log

11.写入定时任务,即可按天切割且压缩nginx日志了[root@web-9 /var/log/nginx]#crontab -l01 00 * * * /usr/sbin/logrotate -f /etc/logrotate.d/nginx >> /var/log/nginx/logrotate_nginx.log 2>&1

END

官方站点:www.linuxprobe.com

Linux命令大全:www.linuxcool.com

刘遄老师QQ:5604215

Linux技术交流群:2636170

(新群,火热加群中……)

想要学习Linux系统的读者可以点击"阅读原文"按钮来了解书籍《Linux就该这么学》,同时也非常适合专业的运维人员阅读,成为辅助您工作的高价值工具书!

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
配置 Nginx 反向代理 WebSocket高效日志管理:通过 Systemd Journal 收集日志的终极指南与Metrolinx一起打开在新家园的无限可能美国风险投资公司,要求「海外中国创始人」与中国投资机构做切割魏书钧将执导剧版《白日焰火》;《人生切割术》第二季拍摄杀青Spring 全家桶版本更新:Spring Boot、Spring Security 和 Spring Modulith打工人必学的“反向职场PUA”!死磕nginx系列-nginx日志配置吴香香:三层四步法讲透请求权基础!(律师必学)美股基本面 - 2024_03_09 * 晨报 * 司美格鲁肽首次获批心血管适应证,还有哪些肥胖“共病”治疗潜力?。柏芮朵母公今日神图 | 上班必学职场用语……Nginx静态压缩和代码压缩,提高访问速度!三角美学——河南省中考数学几何压轴题降维打击全产业链沦陷,美国切割中国产业真相巴警拒绝逮捕将女雇员姊妹推入电动切割机的穆斯林nginx服务器Linux内核参数优化深入解析Nginx Location匹配规则:顺序详解与最佳实践使用 HyperLynx/ Calibre 助力您的 3D IC 电子仿真|西门子EDA在线研讨会直播预告Nginx 核心开发者发布新分支 Freenginx手残党全靠它救命,失败了都不翻车!干饭人必学的搭配,10分钟就能上桌周末啦小学语文和科学课必学的非遗项目,被闺女玩透了人活千岁空无诗暴力美学——福建中考几何压轴题降维打击涟水中专这是和天才少女姜萍切割了?Cloudflare 正式开源Nginx替代品:PingoraNginx限速模块大揭秘我和老伴(六)阳江指甲钳44元4件装,比宝马更耐造!比切割机锋利!能亮甲修倒刺!Nginx高并发性能优化 - 运维笔记23届毕业生平均年薪55w!中国留学生最多的美国大学—纽约大学,商学院起薪高达66W!Linxu:进程的管理与进程的延迟性&周期性调度油菜花开了nginx日志切割米哈游玩家集体要求与二游圈子切割,这一刀真能砍下去吗?
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。