1.logrotate介绍
logrotate是一个linux自带得日志管理工具,可以起到日志得分割,清除,转储,邮寄,压缩功能。通过配置文件和linux得定时任务进行工作。
2.logrotate使用
2.1确认一下是否安装logrotate
主流linux都是安装好logrotate得,如果你的系统中找不到,可以使用apt-get或者yum命令来下载;
#查看logrotate版本
logrotate --version
2.2编写配置文件
- logrotate得配置文件位置
#全局默认配置,系统自带得,很多我们没配得配置都是取得这个配置文件得值
/etc/logrotate.conf
#子配置,我们自定义得配置文件都要放在这个文件夹下,例如nginx,tomcat得日志轮转
/etc/logrotate.d/
- logrotate得配置有很多我先举个例子,然后在逐一说明
# 配置清理(Nginx)日志
/usr/local/nginx/logs/*.log {
# 日志轮询周期,可以是 daily, weekly, monthly, yearly
daily
# 当日志文件达到最大值时进行额外切割
maxsize 200M
# 只存储十天
maxage 10
# 日志文件切割时添加日期后缀
dateext
# 可以解决同一天无法分割两次得问题
dateformat -%Y%m%d-%s
# 指定存储位置
olddir /export/nginx_log
# 如果没有日志文件也不报错
missingok
# 日志为空时不进行切换,默认为 ifempty
notifempty
# 转储后文件为新建权限设置为644
create 644 root root
# 所有的文件切割之后只执行一次下面脚本(重启nginx防止日志无法写入)
sharedscripts
# 轮转后执行以下脚本
postrotate
# 通知nginx重启保证写入--常规操作
if [ -f /usr/local/openresty/nginx/logs/nginx.pid ]; then
kill -USR1 $(cat /usr/local/openresty/nginx/logs/nginx.pid)
fi
endscript
}
参数 | 说明 |
daily weekly monthly yearly | 日志轮转得频率;以daily为例,虽然每天会轮转但是具体轮转时间以cron得设定为主,也会受size配置项影响 |
size 100k minsize 100k maxsize 100k | 默认单位是 bytes。bytes (缺省) 及 KB (sizek) 或 MB (sizem) minsize 100k:如果到了cron定时得时间但是文件大小小于100k那么不转储; maxsize 100k:如果一个周期内定时任务跑过一次转储了,但是又到达了100k,会额外进行一次转储 |
rotate 5 | 日志文件保留备份的个数。默认是 0 。 如:0 指没有备份;5 指保留最近的5个备份,其余的全部删除。 |
maxage count | 保留多少天的日志文件。 如:5 指保留最近的5天的日志文件,其余的全部删除。 如果 日志文件按天转储,则 rotate 与 maxage 基本上是一样的。 |
tabooext [+] list | 让 logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和~ |
missingok | missing ok ,在日志轮循期间,错误将被忽略。 例如 “文件无法找到” 之类的错误。 |
copytruncate nocopytruncate | copytruncate: 用于还在打开中的日志文件,把当前日志备份并截断。 把正在输出的日志拷 (copy) 一份出来,再清空 (trucate) 原来的日志。 nocopytruncate: 备份日志文件,但是不截断 。 |
create mode owner group | create mode owner group:转储文件,使用指定的文件模式创建新的日志文件。 nocreate: 不建立新的日志文件。 如: create 644 root root |
nocompress compress | nocompress: 不压缩(默认) compress: 通过 gzip 压缩转储以后的日志。如 XXX.gz |
delaycompress | delaycompress: 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩。nodelaycompress: 覆盖 delaycompress 选项,转储同时压缩。 |
prerotate endscript | 在所有其它指令完成 前 执行。这两个关键字必须单独成行 |
postrotate endscript | 在所有其它指令完成 后 执行。这两个关键字必须单独成行 |
sharedscripts | 共享脚本,整个日志组运行一次脚本 。 如果没有 sharedscripts ,那么 每个日志文件 轮转完毕后 都会执行一次 |
errors address | 转储时的错误信息发送到指定的 Email 地址。 |
mail address nomail | mail address : 把转储的日志文件发送到指定的 E-mail 地址 nomail : (默认)转储时不发送日志文件 |
ifempty notifempty | ifempty :if empty ,即使是空文件也转储(默认)。 notifempty :not if empty ,如果是空文件的话,不转储。 |
olddir directory noolddir | olddir directory :切割后的日志文件放入指定的目录,但是必须和当前日志文件在同一个文件系统。 例如:olddir /etc/log/nginx_log |
dateext | 是否添加日志后缀;一般配合dateformat使用默认是当前日期。格式是 -%Y%m%d 的后缀。 如:nginx_access.log --> nginx_access.log-20240905 |
dateformat | 对 dateext 的拓展,必须配合 dateext 使用 在V3.9.0 之前,只支持 %Y、%m、%d、 %s 参数。 %s 不是秒,是类似时间戳得一长串数字;配置%s可以解决当天得多次轮转,测试得时候可以用 在V3.9.0 及之后,支持 %H 参数。 如: dateformat -%Y-%m-%d 结果:nginx_access.log --> nginx_access.log-2021-01-20 注意: 文件名称中禁止出现分号(:) ,因为文件名称是不能含有分号的 |
dateyesterday | 日期提前一天;cron表达式如果写的是每天12点触发一次,就要使用这个配置,让命名与真实日志时间匹配 如果cron是23点59分触发就不用这个配置 |
extension | 与 dateext 、dateformat 配合使用,指定文件的后缀。 如:extension .log 结果:nginx_access.log --> nginx_access-2021-01-20.log 说明:nginx_access.log , 文件名是nginx_access,后缀是.log, 文件名 + -%Y-%m-%d 格式的日期 + .log 后缀,结果是 nginx_access-2021-01-20.log |
3.使用logrotate命令
logrotate [OPTION...] <configfile>
-d, --debug :debug 模式,测试配置文件是否有错误。
-f, --force :强制转储文件。
-m, --mail=command :压缩日志后,发送日志到指定邮箱。
-s, --state=statefile :使用指定的状态文件。
-v, --verbose :显示转储过程
- 调试模式
logrotate -d /var/tmp/logtest/myTest_rotate
-
强制执行
logrotate -f /var/tmp/logtest/myTest_rotate
4使用crontab定时任务
#常用crontab命令
#创建或修改定时任务
crontab -e
#查看定时任务
crontab -l
创建一个每天23点59分执行得日志转储任务
#cron表达式从分开始 logrotate命令 -f强制执行 配置文件所在位置
59 23 * * * /usr/sbin/logrotate -f /etc/logrotate.d/nginx_rotate
可能会用到得bash命令
#打开文件夹
cd /etc
#创建一个新的文件newlogfile并把logfile中的内容复制进去如果文件已存在则会追加
cat /etc/logfile >> /etc/newlogfile
#查询所有含nginx得进程
ps aux | grep nginx