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

简介: 分享一个自己很早以前先写的日志存储方案,简单实用,业务端上传完日志后自己清除已经上传过的日志,连清空间的工作都省了。(未完) 找出所有部署目录下的日志文件夹,压缩指定文件与文件夹,不改变日志压缩路径(排除gzip) 上传指定名称的日志压缩包到rsync服务器,根据ip自动生成目录,并上传后保持原来的目录结构.
分享一个自己很早以前先写的日志存储方案,简单实用,业务端上传完日志后自己清除已经上传过的日志,连清空间的工作都省了 。(未完)

找出所有部署目录下的日志文件夹,压缩指定文件与文件夹,不改变日志压缩路径(排除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}


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
3天前
|
数据可视化 Shell Linux
shell+crontab+gitlab实现ecs服务器文件的web展示
本文通过把ecs服务器上的文件定时上传至gitlab,实现文件的页面可视化和修改历史。技术点:shell、crontab、gitlab。
26 3
|
26天前
|
Shell 开发工具
【优化篇】telegraf+shell脚本实现秒级的服务状态异常监测与告警
【优化篇】telegraf+shell脚本实现秒级的服务状态异常监测与告警
22 0
|
26天前
|
Shell 开发工具
【shell脚本】Graylog服务状态异常监测与告警
【shell脚本】Graylog服务状态异常监测与告警
28 0
|
1月前
|
安全 Linux Shell
【Linux】文件服务OpenSSH(Secure Shell)
【Linux】文件服务OpenSSH(Secure Shell)
18 0
【Linux】文件服务OpenSSH(Secure Shell)
|
26天前
|
Linux Shell 开发工具
10分钟让你的Linux Shell终端变得更优雅,更高效——【Linux服务器下OhMyZsh+P10k安装实践】
10分钟让你的Linux Shell终端变得更优雅,更高效——【Linux服务器下OhMyZsh+P10k安装实践】
34 1
|
1月前
|
缓存 关系型数据库 MySQL
mysql shell如何查看服务器状态
mysql shell如何查看服务器状态
235 1
|
1月前
|
监控 Linux Shell
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(排查问题指令 - 下)
在线上排查问题时,查询日志、查看系统配置和分析操作系统信息是至关重要的。这些操作可以帮助我们深入了解软件和服务的兼容性,并解决潜在的问题。在本次学习中,我们将介绍并深入学习一些我在处理类似问题时常用的指令。通过掌握这些指令,你将能够更加高效地定位和解决线上问题,提高系统的稳定性和性能。让我们一同进入这个学习过程吧!
36 0
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(排查问题指令 - 下)
|
1天前
|
Java Shell Perl
使用shell脚本给日志文件瘦身
使用shell脚本给日志文件瘦身
|
9天前
|
监控 安全 Linux
Linux日志管理服务 rsyslogd
Linux日志管理服务 rsyslogd
18 2
Linux日志管理服务 rsyslogd
|
20天前
|
监控 Java API
JDK 9新特性深度探索:平台日志API和服务
本文将深入探讨JDK 9中引入的平台日志API和服务。这一新特性为Java应用程序提供了更强大、灵活的日志记录功能,帮助开发者更好地监控和诊断应用程序的运行状况。本文将详细介绍平台日志API和服务的特性和优势,以及如何在项目中应用这一新特性来提升应用程序的稳定性和可维护性。

热门文章

最新文章

相关产品

  • 云迁移中心