巧用shell+rsync服务实现日志自动过滤处理压缩并上传日志服务器,自动分类

  1. 云栖社区>
  2. 博客>
  3. 正文

巧用shell+rsync服务实现日志自动过滤处理压缩并上传日志服务器,自动分类

天飞.h 2016-02-19 16:25:44 浏览465
展开阅读全文
分享一个自己很早以前先写的日志存储方案,简单实用,业务端上传完日志后自己清除已经上传过的日志,连清空间的工作都省了。(未完)

找出所有部署目录下的日志文件夹,压缩指定文件与文件夹,不改变日志压缩路径(排除gzip)
上传指定名称的日志压缩包到rsync服务器,根据ip自动生成目录,并上传后保持原来的目录结构.
上传文件权限进行自动修改,方便log用户访问.
自动创建用户,安装rsync,链接日志目录到log用户.


日志服务器:192.168.165.88,
同步服务器运行软件:rsync
日志上传到/back/chss并自动创建基于业务服务器IP的目录实现日志归类

点击(此处)折叠或打开

  1. [root@192_168_165_88 ~]# cat /etc/rsyncd/rsyncd.conf
  2. # Minimal configuration file for rsync daemon
  3. # See rsync(1) and rsyncd.conf(5) man pages for help
  4. # This line is required by the /etc/init.d/rsyncd script
  5. pid file = /var/run/rsyncd.pid
  6. port = 873
  7. address = 192.168.165.88
  8. uid=root
  9. gid=root
  10. auth users = admin
  11. secrets file = /etc/rsyncd/rsyncd.secrets
  12. #incoming chmod = u+rwx,g+rwx,o+rx
  13. use chroot = yes
  14. read only = no
  15. #limit access to private LANs
  16. hosts allow=192.168.0.0/255.255.0.0
  17. hosts deny=*
  18. max connections = 500
  19. #This will give you a separate log file
  20. log file = /var/log/rsync.log
  21. #This will log every file transferred - up to 85,000+ per user, per sync
  22. transfer logging = yes
  23. log format = %t %a %m %f %b
  24. syslog facility = local3
  25. timeout = 300
  26. #ignore errors
  27. [chss-t]
  28. path = /back/chss
  29. list = yes
  30. [chss-tc]
  31. path = /back/chss_config
  32. list = yes
每个目录下都是跟业务服务器上的部署路径完全一样的完整的存储路径,这里不就不贴出来了。

点击(此处)折叠或打开

  1. [root@192_168_165_88 chss]# pwd
  2. /back/chss
  3. [root@192_168_165_88 chss]# ls
  4. XXX XXX XXX XXX XXX ...
  5. [root@192_168_165_88 chss]# cd chss-aaaaaa/
  6. [root@192_168_165_88 chss-aaaaaa]# ls
  7. 192.168.171.72  192.168.174.45  192.168.174.46




各业务服务器中使用脚本处理过滤压缩后上传到日志服务器
把以下2个脚本放置在服务器的bin目录下
执行

点击(此处)折叠或打开

  1. [root@S192-168-171-134 ~]# nohup /bin/while.t &


点击(此处)折叠或打开

  1. [root@S192-168-171-134 tmp]# ls
  2. find_192.168.171.134.log  rsync.exe.log nohup.out rsync_192.168.171.134.log



/bin/while.t

点击(此处)折叠或打开

  1. #!/bin/bash
  2. while :
  3. do
  4. /bin/bash /bin/rsync.t
  5. sleep 0.5h
  6. done

/bin/rsync.t

点击(此处)折叠或打开

  1. #!/bin/env bash
  2. #set -x
  3. #2013-08-18: 修复直接压缩201目录的bug
  4. #2013-09-28: 新加项目分类目录,新加多重判断
  5. #2015-10-19: 修复与glusterfs冲突问题.

  6. export RSYNC_PASSWORD=skymobi
  7. LOGPATH="opt app data app1"
  8. SLEEPTIME=10s
  9. IP=$(LC_ALL=C /sbin/ifconfig|grep "inet addr:"|grep -v "127.0.0.1"|cut -d: -f2|awk '{print $1}'|sed ':a;$!N;s/\n/_/g;ta;P;D')
  10. USER=admin
  11. RSYNCIP=192.168.165.88
  12. PROJECT=chss-mis
  13. RSYNCMODULE=chss-t
  14. RSYNCCONFMODULE=chss-tc
  15. RSYNCDIR=${PROJECT}/"$IP"
  16. FINDLOGFILE=/tmp/find_"$IP".log
  17. RSYNCLOGFILE=/tmp/rsync_"$IP".log
  18. RSYNCEXELOGFILE=/tmp/rsync.exe.log
  19. DATETIME=$(date +%F_%T)
  20. mkdir -p /tmp/$RSYNCDIR
  21. for rspath in $RSYNCMODULE $RSYNCCONFMODULE
  22. do
  23. rsync -atv --log-file=${RSYNCLOGFILE} /tmp/${PROJECT} ${USER}@"$RSYNCIP"::${rspath}
  24. done

  25. for Path in $LOGPATH
  26. do
  27. echo $DATETIME
  28. if [ -d /$Path ];then
  29. FINDER(){
  30. find /${Path} -regex ".*logs/.*log.*201.*" -a ! -regex '.*tar.gz' -a -mmin +5 -exec date '+%F %T' \; -exec tar -zcvf `basename {}`_t.tar.gz {} --remove-files --exclude=*tar.gz \; >> $FINDLOGFILE
  31. }
  32. SPACE=$(df -P /${Path} |tail -n 1 |awk '{print $5}'|awk -F% '{print $1}')
  33. if [ $SPACE -gt 80 ];then
  34. find /${Path} -regex ".*logs/.*log.*201.*" -mtime +"${DAYS:=1}" -exec date '+%F %T' \; -exec rm -rfv {} \; >> ${FINDLOGFILE}
  35. else
  36. FINDER
  37. fi
  38. sleep $SLEEPTIME
  39. rsync -aERtvz --no-p --chmod=Do+rX,Fo-X --log-file=${RSYNCLOGFILE} --remove-source-files --skip-compress=*.gz $(find /$Path -type f -name '*_t.tar.gz' -a ! -regex '.*/brick/.*') ${USER}@"$RSYNCIP"::"$RSYNCMODULE"/${RSYNCDIR}
  40. rsync -aERtvz --no-p --chmod=Do+rX,Fo-X --log-file=${RSYNCLOGFILE} --remove-source-files --skip-compress=*.gz $(find /$Path -type f -name '*_tc.tar.gz' -a ! -regex '.*/brick/.*') ${USER}@"$RSYNCIP"::"$RSYNCCONFMODULE"/${RSYNCDIR}
  41. else
  42. echo /${Path} is not exist...
  43. fi
  44. done >> ${RSYNCEXELOGFILE}

在日志服务器上执行crontab任务
定期清理空间

点击(此处)折叠或打开

  1. #!/bin/env bash
  2. set -x
  3. LOGPATH="back/chss/chss-mis back/chss/zm-adv-mis opt app data app1 back"
  4. IP=$(LC_ALL=C /sbin/ifconfig|grep "inet addr:"|grep -v "127.0.0.1"|cut -d: -f2|awk '{print $1}'|sed ':a;$!N;s/\n/_/g;ta;P;D')
  5. FINDLOGFILE=/tmp/find_"$IP".log
  6. RSYNCLOGFILE=/tmp/rm_"$IP".log
  7. RSYNCEXELOGFILE=/tmp/rm.exe.log
  8. DATETIME=$(date +%F_%T)
  9. echo _start_ `date +%F_%T`
  10. for Path in $LOGPATH
  11. do
  12.   echo $DATETIME
  13.   if [ -d /$Path ];then
  14.     SPACE=$(df -P /${Path} |tail -n 1 |awk '{print $5}'|awk -F% '{print $1}')
  15.     if [ $SPACE -gt 80 ];then
  16.       if [ ${Path} == 'back/chss/zm-adv-mis' ];then
  17.         DATENUM=0
  18.         MINNUM=360
  19.       elif [ ${Path} == 'back/chss/chss-mis' ];then
  20.         DATENUM=0
  21.         MINNUM=7200
  22.       else
  23.         DATENUM=10
  24.         MINNUM=10080
  25.       fi
  26.     else
  27.       DATENUM=50
  28.       MINNUM=43200
  29.     fi
  30.     FINDER(){
  31.       #days
  32.       #find /$Path -mtime +"${DATENUM:=20}" -a -regex '.*logs.*' -a ! -regex '.*chss_config' -a ! -empty -exec date +%F_%T \; -exec rm -rv {} \; >> $FINDLOGFILE
  33.       #Mins
  34.       find /$Path -mmin +"${MINNUM:=43200}" -a -regex '.*logs.*' -a ! -regex '.*chss_config' -a ! -empty -exec date +%F_%T \; -exec rm -rv {} \; >> $FINDLOGFILE
  35.     }
  36.     FINDER
  37.     #echo ---- /${Path} $DATENUM days rm ok
  38.     echo ---- /${Path} $(( $MINNUM / 60 / 24 )) days rm ok
  39.   else
  40.     echo ---- /${Path} is not exist...
  41.   fi
  42. done >> ${RSYNCEXELOGFILE}


网友评论

登录后评论
0/500
评论
天飞.h
+ 关注