linux系统日志管理工具–logrotate

scadm 2021年4月25日00:12:27
评论
321 2173字

logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件,logrotate的运作完全自动化,不必进行任何进一步的人为干预。

之前有写过一篇 nginx日志切割及7天前的历史日志删除的脚本 ,也可以用logrotate来实现

0x01 配置文件

主流Linux发行版上都默认安装有logrotate包。

默认的配置文件路径:

/etc/logrotate.d:不同的程序日志可以单独写个配置文件放着这里面,没有设定的细节自动以conf中设定的来作默认值;

/etc/logrotate.conf:主配置文件。

运行命令:

logrotate [-vf] /etc/logrotate.conf

-v:启动显示模式,会显示 logrotate 执行的过程

-f:不论是否符合配置文件地规则,强制每个日志都进行 rotate 的动作

0x02 配置说明

# vim /etc/logrotate.conf
weekly #一周执行一次,其它可用值为'daily','monthly'或'yearly'
rotate 4  #保留多少个日志文件
create  #创建新的日志文件
dateext  #文件后缀是日期格式,如:secure-20161030,如果注释掉则格式为:secure-1
#compress  #是否压缩日志
include /etc/logrotate.d  #加载logrotate.d目录中的所有文件
/var/log/wtmp {   #针对/var/log/wtmp所设定的参数
monthly    #每月执行一次
create 0664 root utmp  #指定新建日志文件的权限和所属用户、组
minsize 1M  #文件大小超过1M才会切割
rotate 1  #只保留一个日志
}
/var/log/btmp {  #针对/var/log/btmp所设定的参数
missingok  #如果指定的目录不存在,logrotate会报错,此项用来关闭报错
monthly  #每月执行一次
create 0600 root utmp  #指定新建日志文件的权限和所属用户、组
rotate 1  #只保留一个日志
}

PS:wtmp可记录用户登录系统和重启的时间;另外因为有minsize的参数,所以不一定是每月执行一次,得先满足minsize设置的大小。

0x03  实例

1、切割syslog服务日志

# vim /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler  #上面几个为被处理的日志绝对路径,每行一个或者用空格分隔
{
sharedscripts  # 表示postrotate脚本在压缩了日志之后只执行一次
postrotate  #在做完 logrotate 之后启动的指令,例如重新启动 (kill -HUP) 某个服务
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true  #相当于reload
endscript
}

执行脚本:

可调用外部指令来进行额外的命令,这个设定需与 sharedscripts .... endscript 设定合用才行。

prerotate:在启动 logrotate 之前进行的指令,例如修改文件的属性等动作;

postrotate:在做完 logrotate 之后启动的指令,例如重新启动 (kill -HUP) 某个服务。

可以看出syslog配置文件没有写执行周期,日志后缀这些,就会自动使用logrotate.conf配置参数。

 

假设messages日志文件有增加chattr +a属性时,根据上面配置messages会被更改成messages-20161030。但由于我们加上了+a参数,更名是失败的。这时就可以用下面的配置来操作

# vim /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/messages   #先把+a属性移除
endscript
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/usr/bin/chattr +a /var/log/messages   #更名之后再加上+a属性
endscript
}

2、切割Nginx

在/etc/logrotate.d下新建nginx文件;

编辑nginx文件,添加下面配置文件

/usr/local/nginx/logs/*.log {
daily
rotate 30
sharedscripts
postrotate
if [ -f /usr/local/nginx/logs/nginx.pid ]; then
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
fi
endscript
}

按天切割nginx日志文件,保留30个日志文件,最后重启nginx。

继续阅读
scadm
  • 本文由 发表于 2021年4月25日00:12:27
  • 转载请务必保留本文链接:https://www.wscyun.com/831
Jenkins-2.319 安装部署 运维

Jenkins-2.319 安装部署

Jenkins持续集成简介 持续集成(Continuous Integration,CI|CD)是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础,持续集成意义如下: 持续集成中...
自动化装机工具-kickstart 运维

自动化装机工具-kickstart

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统===>一个服务器DV...
自动化装机工具-cobbler 服务器

自动化装机工具-cobbler

在看Cobbler之前请大家先看一下Kickstart无人值守安装,了解一下Cobbler的实现原理。但是Cobbler是独立的,不需要先安装Kickstart然后再安装Cobbler,这是写给不了解...