1、背景
收到硬件处邮件,某台生产机器磁盘空间使用率过高。经过核查,ng的访问日志(access.log)、rocketmq客户端日志文件都比较大,都是些可有可无的日志,所以选了折中方案,删一部分,压缩存一部分。同时又不能完全删除,比如我们要ng日志做流量、平响分析。
2、切割、转储备份
2.1、常用linux命令及解释
1、|wc -l
统计多少行(例:统计数据库连接数,netstat -apn|grep 3306|wc -l)
2、-exec rm {} \;
把find命令查找到的结果删除
-exec后便跟的命令行,必须用“ \;”结束
3、midir -p
选项 -p 如果父目录不存在级联创建4、find选项-maxdepth
使用mindepth和maxdepth限定搜索指定目录的深度,搜索文件 find / -maxdepth 3 -name passwd /usr/bin/passwd /etc/pam.d/passwd /etc/passwd5、gzip
不保留原文件压缩,压缩文件名称和原文件一样(方便于压缩但不想保留原文件) 解压命令gzip6、> /dev/null 2>&1
文件标识符,0 标准输入、1 标准输出、2 标准错误输出 /dev/null:不输出信息crontab -e
00 00 * * * /usr/local/nginx-1.9.7/sbin/logCut.sh > /dev/null 2>&1
&等同于,1>可以省略成>
7、du -sh *
查看文件、目录占用磁盘空间大小8、[ $? -eq 0 ]
如果命令执行成功(用作表示执行成功,例:输出执行成功提示echo"success do something!")9、kill -USR1
发送一个USR1信号将导致以下步骤的发生:
停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改
(对重启服务器表示怀疑,本地用200并发测试本命令,未见到4××、5××,若不放心也可降级处理,不同机器采用不同执行时间,错开执行!)
示例1:
#!/bin/bash##切割nginx日志##日志所在目录nglogpath=/usr/local/nginx-1.9.7/logs##nginx日志备份路径,备份前先检查路径,不存在则创建backnglogpath=/usr/local/nginx-1.9.7/logs/backupif [ ! -d ${backnglogpath} ]; then mkdir -p ${backnglogpath}fi##昨日日期YESTERDAY=$(date -d "1 day ago" +"%Y%m%d")##移动文件mv ${nglogpath}/access.log ${backnglogpath}/access_${YESTERDAY}.log##向nginx发送USR1信号,重新启动nginx日志kill -USR1 $(cat /usr/local/nginx-1.9.7/logs/nginx.pid)##压缩文件,删除源文件zip -r ${backnglogpath}/access_${YESTERDAY}.zip ${backnglogpath}/access_${YESTERDAY}.log rm -rf ${backnglogpath}/access_${YESTERDAY}.log##删除15天前生成的文件(文件名匹配)#rm -rf ${backnglogpath}/access_$(date -d"15 day ago" +"%Y%m%d").zip##删除15天之前生成的所有文件(文件生成日期+名称模糊搜索)find ${backnglogpath} -mtime +15 -type f -name 'access_*.zip' -exec rm -rf {} \;##切割rocketmq日志##日志所在目录mqlogpath=/data/taapp/applications/rocketmq_logs##mq日志备份路径backmqlogpath=/data/taapp/applications/rocketmq_logs/backupif [ ! -d ${backmqlogpath} ] then mkdir -p ${backmqlogpath}fi##移动文件、压缩、删除多余文件(文件存在则进行此操作)filepath=${mqlogpath}/rocketmq_log.1 ##此处思路有误,虽然文件移走了,rocketmq client还是输出到原文件,合适做法是:保留三个文件,移走超过三个以上文件if [ -f ${filepath} ] then mv ${filepath} ${backmqlogpath}/rocketmq_${YESTERDAY}_log tar -zcvPf ${backmqlogpath}/rocketmq_${YESTERDAY}_log.tar.gz ${backmqlogpath}/rocketmq_${YESTERDAY}_log rm -rf ${backmqlogpath}/rocketmq_${YESTERDAY}_log find ${backmqlogpath} -mtime +3 -type f -name 'rocketmq_*.tar.gz' -exec rm -rf {} \;fi
至此,ng、rocket_clinet日志完成切割、压缩、备份,日志滚动备份处理,限制日志磁盘使用空间。业务日志强时间相关度属性,决定随时间推移日志价值越小。但是数据总是宝贵的,可能只是你没来得及用上,转储是必不可少的。
3、es数据清理
es在上一篇做过介绍,非常强大的文件存储系统,运行一段时间给带来额外的麻烦,目前我们机器磁盘只有40G,收集的数据达到20G,任由增加将影响到应用运行。这本是一个中间件,刚开始思路需要某个属性设置数据有效期,比如30d,详细设置参照。
当然都没有找到我想要的,直到我把它当作数据库看待,柳暗花明又一村,在关系型数据库我们对待过期数据两种方式:1、转储 2、删除,关系型数据有DML语句支持,es也有lucene syntax支持,这里处理比较粗暴,直接删除了,其实也可转储,只是还用不上。
示例
#/bin/bashDELTIME=$(date -d "30 day ago" +%Y.%m.%d)DDAY=$(date -d "30 day ago" +%d)DMONTH=$(date -d "30 day ago" +%m)DYEAR=$(date -d "30 day ago" +%Y)CLOSETIME=$(date -d "15 day ago" +%Y.%m.%d)NOW=$(date)#del indic:es curl -XDELETE 10.10.6.1:9200/*-$DYEAR.$DMONTH.[1-$DDAY]curl -XDELETE 10.10.6.1:9200/*-$DYEAR.[1-$[DMONTH - 1]].*curl -XDELETE 10.10.6.1:9200/*-$[DYEAR-1].*.*#curl -XPOST 10.10.6.1:9200/*-$CLOSETIME/_flush#curl -XPOST 10.10.6.1:9200/*-$CLOSETIME/_closeif [ $? -eq 0 ]then echo $NOW"-->del $DELTIME log success.." >> /data/software/elasticsearch-5.6.2/data/es-index-clear.logelse echo $NOW"-->del $DELTIME log fail.." >> /data/software/elasticsearch-5.6.2/data/es-index-clear.logfi