logrotate - rotates, compresses, and mails system logs

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

Linux系统自带的logratate自带的日志滚动压缩的工具,性能很高,经常使用来压缩程序的日志。


参考:

lograte 实现方式原理

参考:

http://www.cnblogs.com/sailrancho/p/4784763.html


记住默认滚动的方式是最好的,建议不要去改成第二种(copyctruncate)。


第二种方式是,比如你要滚动,nginx_access.log,copyctruncate的实现方式是,

第一步: cp nginx_access.log nginx_acessess.log-20170708

第二步: echo "" >  nginx_access.log


优点是:

nginx_access.log 的文件句柄 ,file 的inode永远不变,应用程序写的文件句柄一直同一个。

缺点是:

第一步和第二步的这个时间过程中的日志会丢失。


而第一种方式是:create的方式:


第一步: mv nginx_access.log nginx_acessess.log-20170708

第二步: touch nginx_access.log(logrotate 做到动作)

优点是:

日志不会丢失,mv重命名之后,nginx的程序写入的日志将会是nginx_acessess.log-20170708(因为inode没有改变),所以不会丢失日志。但是为了解决 日志如何才能写入到新的文件access.log中,所有logratate中提供了 滚动之后,可以执行脚本比如 reload nginx 重新nginx,所以nginx会重读access.log这个日志文件。




比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
/data1/logs/nginx/*.log
/data2/logs/nginx/*.log{
         daily
         missingok         #如果日志文件不存在,logratete 会报错,这个来关闭这个报错。
         rotate 32
         compress
         delaycompress     #延迟一天进行压缩,通compress一同使用
         notifempty           # Do not rotate the log if it is empty
         sharedscripts       #无论日志匹配了几个,postrotate 脚本只执行一次
         postrotate   
                 [ -f /data1/env/nginx/logs/nginx.pid ] && kill -USR1 `cat         /data1/env/nginx/logs/nginx.pid`
         endscript
}




#### 

其他疑问和解决:

1. 如何改变滚动的日志的权限,

参数:

create mode owner group

默认滚动的新日志的权限,是和上一个日志权限继承过来的。


2. 压缩的时间


决定/usr/sbin/logrotate -f /etc/logrotate.conf 这个的执行时间。默认是 

cat /etc/cron.daily/logrotate  和  cat /etc/anacrontab


决定了默认是在凌晨3:00多点的随机时间执行。


如果要改成每天定时呢?


推荐方案:


第一步: 注释默认

cat /etc/cron.daily/logrotate  文件内容注释


第二步:添加压缩的crontab

# Puppet Name: # 零点压缩日志

59 23 * * * /usr/sbin/logrotate -f /etc/logrotate.conf >/dev/null 2>&1

本文转自残剑博客51CTO博客,原文链接http://blog.51cto.com/cuidehua/1945530如需转载请自行联系原作者

cuizhiliang
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
Kubernetes 容器
Failed at step CHDIR spawning /opt/kubernetes/bin/etcd: No such file or directory
Failed at step CHDIR spawning /opt/kubernetes/bin/etcd: No such file or directory
81 0
|
应用服务中间件 nginx
Nginx nginx: [error] open() "/usr/local/var/run/nginx.pid"
Nginx nginx: [error] open() "/usr/local/var/run/nginx.pid"
136 0
|
应用服务中间件 nginx
Mac Nginx nginx: [emerg] mkdir() “/usr/local/var/run/nginx/client_body_temp“ failed ...
Mac Nginx nginx: [emerg] mkdir() “/usr/local/var/run/nginx/client_body_temp“ failed ...
304 2
|
3月前
|
Kubernetes API 容器
在k8S中,使用kubectl logs无法查看日志是什么原因,如何让其能够查看?
在k8S中,使用kubectl logs无法查看日志是什么原因,如何让其能够查看?
|
6月前
|
Kubernetes 网络协议 Perl
k8s Failed to create pod sandbox: open /run/systemd/resolve/resolv.conf: no such file or directory
k8s Failed to create pod sandbox: open /run/systemd/resolve/resolv.conf: no such file or directory
359 0
|
6月前
|
存储 应用服务中间件 nginx
【各种问题处理】nginx报错nginx: [error] open() “/run/nginx.pid” failed (2: No such file or directory)
【1月更文挑战第13天】【各种问题处理】nginx报错nginx: [error] open() “/run/nginx.pid” failed (2: No such file or directory)
|
应用服务中间件 nginx
Nginx nginx: [emerg] mkdir() "/usr/local/var/run/nginx/client_body_temp"
Nginx nginx: [emerg] mkdir() "/usr/local/var/run/nginx/client_body_temp"
394 0
|
应用服务中间件 nginx 容器
run nginx报错,解决方式 Are you trying to mount a directory onto a file
run nginx报错,解决方式 Are you trying to mount a directory onto a file
286 0
|
应用服务中间件 nginx
nginx: [error] open() “/usr/local/nginx/logs/nginx.pid“ failed (2: No such file or directory)
nginx: [error] open() “/usr/local/nginx/logs/nginx.pid“ failed (2: No such file or directory)
346 0
nginx: [error] open() “/usr/local/nginx/logs/nginx.pid“ failed (2: No such file or directory)
|
应用服务中间件 nginx
重启nginx报错:nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed
重启nginx报错:nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed
430 0