专栏首页pythonista的日常nginx 日志定时切割

nginx 日志定时切割

最近有个需求,需要查看我们官网的日活,我是打算通过查看 nginx 日志,对每条日志进行切割,过滤出 ip,然后通过 set 集合去重,查看集合 set 的长度就是当天的日活了。我的 nginx 是通过 yum 安装的,默认会对 nginx 日志进行切割,但是每天切割的时间不是当天的 00 点,这样得到的日活数据可能不太准确。我就打算自定义 nginx 日志的切割。

所谓的"切割",并不是真的把一个文件"切成两个",只是把原来的"access.log"文件重命名,比如重命名为今天的日期"2020-05-17.log",然后再创建一个名为"access.log"的新文件,以便新生成的日志仍然可以写入到名为"access.log"的新文件中,这样就能实现所谓的"日志滚动"或者"日志切割"的效果了。

但是,这样做会遇到一些问题,我们来手动操作一下,首先,重命名文件

mv access.log 2020-05-17.log

我们已经重命名了"access.log"文件,但是你会发现,重命名后,nginx日志仍然会写入到"2020-05-17.log"文件中,并不会自动创建一个新的"access.log"文件,即使你手动创建了一个新的"access.log"文件,nginx仍然会把日志写入到重命名后的"2020-05-17.log"文件中。

出现上述情况,是因为nginx进程读写日志文件时,是通过文件描述符去操作的,虽然我们修改了原"access.log"文件的文件名,但是原文件描述符与文件本身的对应关系仍然存在,所以,单单对文件重命名是不够的,我们需要让nginx重新打开一个新文件,以便将新的日志写入到新文件中。

通过yum源安装nginx后,默认会安装一个日志滚动的配置文件,这个配置文件就是 "/etc/logrotate.d/nginx" ,需要把这个文件删除。默认的日志路径是在 "/var/log/nginx/" ,我是在这个文件夹下写了一个 shell 脚本, nginx_log_split.sh

D=$(date +%Y-%m-%d) # 获取当天的日期
# 移动文件
mv -f /var/log/nginx/access.log /var/log/nginx/${D}.log
sleep 0.5s
# 重启nginx
/usr/sbin/nginx -s reload

使用 crontab 执行定时任务,crontab -e 后编辑一行

00 00 * * * /var/log/nginx/nginx_log_split.sh

每天 0 点 0 分执行这个 /var/log/nginx/nginx_log_split.sh 脚本

本文分享自微信公众号 - pythonista的日常(gh_fc70d5d98d3f),作者:pythonista daily

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 扫普通链接二维码打开微信小程序

    前段时间我们项目有个需求,用户通过扫描我们后台生成的一个二维码,就会跳转到我自己的微信小程序,我就参考了微信小程的文档中的【通过扫普通链接二维码打开微信小程序】...

    用户4945346
  • django2.2+Daphne+nginx+supervisor 生产环境部署

    之前项目中使用了 webscoket 进行实现消息实时通知,我们是另外单独运行了一个消息推送服务项目,使用了django-channels 实现websocke...

    用户4945346
  • 开工之前的热身小菜(一)

    从这周开始,有的人应该已经开始工作和学习了,假期应该很少有人在学习,我这边准备了一些有趣的练习题,帮助大家快速恢复功力。大家可以在这下面留言,写下自己解题的代码...

    用户4945346
  • nginx的日志切割小知识

    感兴趣的同学可以查看此链接 http://io.upyun.com/2017/08/19/nginx-signals/

    用户2825413
  • 009.ELK使用Redis做缓存收集Nginx日志

    CoderJed
  • ingress-nginx持久化日志

    controller日志: 输出到stdout,通过启动参数中的–log_dir可已配置输出到文件,重定向到文件后会自动轮转,但不会自动清理 accesslog...

    院长技术
  • ingress-nginx持久化日志

    修改configmap设置access日志,error日志,以及logformat格式

    SY小站
  • redis的sentinel主从切换(failover)与Jedis线程池自动重连

    本文介绍如何通过sentinel监控redis主从集群,并通过jedis自动切换ip和端口。 1、配置redis主从实例 10.93.21.21:6379 10...

    用户1225216
  • 语音识别中的声学特征提取:梅尔频率倒谱系数MFCC | 老炮儿改名PPLOVELL | 5th

    MFCC是Mel-Frequency Cepstral Coefficients的缩写,全称是梅尔频率倒谱系数。它是在1980年由Davis和M...

    用户7623498
  • NGINX日志配置总结

    本来准备讲解nginx和apache的日志的,但是个人不太推荐apache(纯属个人爱好),这里就不介绍apache的日志了。

    CrazyCodes

扫码关注云+社区

领取腾讯云代金券