日志切割备份

星期五的早上,公司应用服务提示不可访问。最后发现是硬盘内存不够。
某应用写日志太频繁,导致内存撑爆了。

于是决定做日志切割,备份。

在决定做日志切割和备份时,本来自己想写个shell 脚本。
脚本需要执行

1. copy 原来的日志文件。
2. 给文件名添加日期等特殊的标识符。
3. 压缩拷贝过的文件。
4. 清空原来日志文件。
5. 添加定时任务,指定某一时间执行。
6. 只保留固定个数的切割文档。

最后寻么着,Linux这么强大,有没有已经写好的工具,Google下,还真有。
那就是 Logrotate

一、 Logrotate 是啥

logrotate is designed to ease administration of systems that generate large numbers of log files. It allows automatic rotation, compression, removal, and mail‐
ing of log files. Each log file may be handled daily, weekly, monthly, or when it grows too large.

Normally, logrotate is run as a daily cron job. It will not modify a log multiple times in one day unless the criterion for that log is based on the log's size
and logrotate is being run multiple times each day, or unless the -f or --force option is used.

Any number of config files may be given on the command line. Later config files may override the options given in earlier files, so the order in which the
logrotate config files are listed is important. Normally, a single config file which includes any other config files which are needed should be used. See
below for more information on how to use the include directive to accomplish this. If a directory is given on the command line, every file in that directory is
used as a config file.

If no command line arguments are given, logrotate will print version and copyright information, along with a short usage summary. If any errors occur while
rotating logs, logrotate will exit with non-zero status.

logrotate 可以很方便的管理日志。可以对日志文件进行轮替,压缩,切割,发布邮件等功能。

Logrotate 配置

文件所在位置:/etc/logrotate.d/rails_production


  /home/deploy/apps/production.log {
    missingok
    copytruncate
    rotate 10
    compress
    notifempty
    sharedscripts
    dateext
    dateformat -%Y-%m-%d-%s
    olddir /data1/log/rails
    size=10M
    postrotate
    endscript
  }

参数解释

missingok: 如果找不到log档也没有关系
copytruncate: 先复制log档的内容后,再清空的做法
rotate: 表示要保留的份数
compress: 表示压缩起来,预设用gzip
notifempty: 表示如果log档是空的,就不rotate
dateext: 表示添加YYYYMMDD形式字符串作为文件名一部分
dateformat: 表示格式化文件名日期显示部分
olddir: 表示要备份的文件目录
size: 表示超过这个值,就进行rotate,可以为100M或10G
sharedscripts: 表示在所有的日志文件轮转完毕后统一执行一次脚本,如果没有这条指令,那么每个日志文件轮转完毕后,都会执行一次脚本

rotate 和 maxage 区别

rotate 在于rotate是以个数为单位的,而maxage
是以天数为单位的。如果我们是以按天来轮转的日志,那么二者的差别就不大

Logrotate 是以CRON 允许的,所以这个时间由CRON控制的

查看 /etc/crontab/etc/anacrontab


#period in days   delay in minutes   job-identifier   command
1   5   cron.daily      nice run-parts /etc/cron.daily
7   25  cron.weekly     nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly        nice run-parts /etc/cron.monthly

可以自定义修改,这些配置文件,如果需要的话。

二、 定时任务配置

为了更加自由,设定定时任务执行,自定义rotate 的执行。


  * 0 * * * /bin/bash -l -c 'logrotate -vf /etc/logrotate.d/rails_production 1>/dev/null 2>&1'

三、线下备份切割日志

由于线上只有 10个备份文件
永久备份文件,需要线下启动定时任务,定时同步线上切割日志


* 1 * * 6 /bin/bash -l -c 'rsync -ravz -e "ssh -p 10080" deploy@xxx:xxx:xxx:xxx:/data1/log/rails /data1/online-log-backup —log-file=/data1/online-log-backup/rails_log_sync.log 1>/dev/null 2>&1'

四、logrotate 源文件和切割文件不再同一挂载点

  logrotate olddir are on different devices

解决办法

1、去掉了 compress
2、去掉了 olddir 配置
3、在 postrotate 里面添加如下语句

    mv  /home/deploy/apps/production.log-* /data1/log/rails
    gzip /data1/log/rails/production.log-*

最终结果如下:

 /home/deploy/apps/production.log {
  missingok
  copytruncate
  rotate 10
  notifempty
  sharedscripts
  dateext
  dateformat -%Y-%m-%d-%s
  size=10M
  postrotate
    mv  /home/deploy/apps/production.log-* /data1/log/rails
    gzip /data1/log/rails/production.log-*
  endscript
}

参考

10 Practical Examples of Rsync Command in Linux

rsync 同步的艺术

被遗忘的Logrotate

logrotate 详细介绍

认识与分析日志

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容