当前位置:
首页 >
巧用shell+rsync服务实现日志自动过滤处理压缩并上传日志服务器,自动分类
发布时间:2025/7/14
42
豆豆
生活随笔
收集整理的这篇文章主要介绍了
巧用shell+rsync服务实现日志自动过滤处理压缩并上传日志服务器,自动分类
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
分享一个自己很早以前先写的日志存储方案,简单实用,业务端上传完日志后自己清除已经上传过的日志,连清空间的工作都省了。(未完)
找出所有部署目录下的日志文件夹,压缩指定文件与文件夹,不改变日志压缩路径(排除gzip)
上传指定名称的日志压缩包到rsync服务器,根据ip自动生成目录,并上传后保持原来的目录结构.
上传文件权限进行自动修改,方便log用户访问.
自动创建用户,安装rsync,链接日志目录到log用户.
日志服务器:192.168.165.88,
同步服务器运行软件:rsync
日志上传到/back/chss并自动创建基于业务服务器IP的目录实现日志归类
[root@192_168_165_88 ~]# cat /etc/rsyncd/rsyncd.conf
# Minimal configuration file for rsync daemon
# See rsync(1) and rsyncd.conf(5) man pages for help
# This line is required by the /etc/init.d/rsyncd script
pid file = /var/run/rsyncd.pid
port = 873
address = 192.168.165.88
uid=root
gid=root
auth users = admin
secrets file = /etc/rsyncd/rsyncd.secrets
#incoming chmod = u+rwx,g+rwx,o+rx
use chroot = yes
read only = no
#limit access to private LANs
hosts allow=192.168.0.0/255.255.0.0
hosts deny=*
max connections = 500
#This will give you a separate log file
log file = /var/log/rsync.log
#This will log every file transferred - up to 85,000+ per user, per sync
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
#ignore errors
[chss-t]
path = /back/chss
list = yes
[chss-tc]
path = /back/chss_config
list = yes 每个目录下都是跟业务服务器上的部署路径完全一样的完整的存储路径,这里不就不贴出来了。
[root@192_168_165_88 chss]# pwd
/back/chss
[root@192_168_165_88 chss]# ls
XXX XXX XXX XXX XXX ... [root@192_168_165_88 chss]# cd chss-aaaaaa/ [root@192_168_165_88 chss-aaaaaa]# ls 192.168.171.72 192.168.174.45 192.168.174.46
各业务服务器中使用脚本处理过滤压缩后上传到日志服务器
把以下2个脚本放置在服务器的bin目录下
执行
[root@S192-168-171-134 ~]# nohup /bin/while.t &
[root@S192-168-171-134 tmp]# ls
find_192.168.171.134.log rsync.exe.log nohup.out rsync_192.168.171.134.log
/bin/while.t
#!/bin/bash
while :
do
/bin/bash /bin/rsync.t
sleep 0.5h
done
/bin/rsync.t
#!/bin/env bash #set -x #2013-08-18: 修复直接压缩201目录的bug #2013-09-28: 新加项目分类目录,新加多重判断 #2015-10-19: 修复与glusterfs冲突问题.
export RSYNC_PASSWORD=skymobi LOGPATH="opt app data app1" SLEEPTIME=10s 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') USER=admin RSYNCIP=192.168.165.88 PROJECT=chss-mis RSYNCMODULE=chss-t RSYNCCONFMODULE=chss-tc RSYNCDIR=${PROJECT}/"$IP" FINDLOGFILE=/tmp/find_"$IP".log RSYNCLOGFILE=/tmp/rsync_"$IP".log RSYNCEXELOGFILE=/tmp/rsync.exe.log DATETIME=$(date +%F_%T) mkdir -p /tmp/$RSYNCDIR for rspath in $RSYNCMODULE $RSYNCCONFMODULE do rsync -atv --log-file=${RSYNCLOGFILE} /tmp/${PROJECT} ${USER}@"$RSYNCIP"::${rspath} done
for Path in $LOGPATH do echo $DATETIME if [ -d /$Path ];then FINDER(){ 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 } SPACE=$(df -P /${Path} |tail -n 1 |awk '{print $5}'|awk -F% '{print $1}') if [ $SPACE -gt 80 ];then find /${Path} -regex ".*logs/.*log.*201.*" -mtime +"${DAYS:=1}" -exec date '+%F %T' \; -exec rm -rfv {} \; >> ${FINDLOGFILE} else FINDER fi sleep $SLEEPTIME 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} 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} else echo /${Path} is not exist... fi done >> ${RSYNCEXELOGFILE}
在日志服务器上执行crontab任务
定期清理空间
#!/bin/env bash
set -x
LOGPATH="back/chss/chss-mis back/chss/zm-adv-mis opt app data app1 back"
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')
FINDLOGFILE=/tmp/find_"$IP".log
RSYNCLOGFILE=/tmp/rm_"$IP".log
RSYNCEXELOGFILE=/tmp/rm.exe.log
DATETIME=$(date +%F_%T)
echo _start_ `date +%F_%T`
for Path in $LOGPATH
do
echo $DATETIME
if [ -d /$Path ];then
SPACE=$(df -P /${Path} |tail -n 1 |awk '{print $5}'|awk -F% '{print $1}')
if [ $SPACE -gt 80 ];then
if [ ${Path} == 'back/chss/zm-adv-mis' ];then
DATENUM=0
MINNUM=360
elif [ ${Path} == 'back/chss/chss-mis' ];then
DATENUM=0
MINNUM=7200
else
DATENUM=10
MINNUM=10080
fi
else
DATENUM=50
MINNUM=43200
fi
FINDER(){
#days
#find /$Path -mtime +"${DATENUM:=20}" -a -regex '.*logs.*' -a ! -regex '.*chss_config' -a ! -empty -exec date +%F_%T \; -exec rm -rv {} \; >> $FINDLOGFILE
#Mins
find /$Path -mmin +"${MINNUM:=43200}" -a -regex '.*logs.*' -a ! -regex '.*chss_config' -a ! -empty -exec date +%F_%T \; -exec rm -rv {} \; >> $FINDLOGFILE
}
FINDER
#echo ---- /${Path} $DATENUM days rm ok
echo ---- /${Path} $(( $MINNUM / 60 / 24 )) days rm ok
else
echo ---- /${Path} is not exist...
fi
done >> ${RSYNCEXELOGFILE}
《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读
找出所有部署目录下的日志文件夹,压缩指定文件与文件夹,不改变日志压缩路径(排除gzip)
上传指定名称的日志压缩包到rsync服务器,根据ip自动生成目录,并上传后保持原来的目录结构.
上传文件权限进行自动修改,方便log用户访问.
自动创建用户,安装rsync,链接日志目录到log用户.
日志服务器:192.168.165.88,
同步服务器运行软件:rsync
日志上传到/back/chss并自动创建基于业务服务器IP的目录实现日志归类
点击(此处)折叠或打开
点击(此处)折叠或打开
各业务服务器中使用脚本处理过滤压缩后上传到日志服务器
把以下2个脚本放置在服务器的bin目录下
执行
点击(此处)折叠或打开
点击(此处)折叠或打开
/bin/while.t
点击(此处)折叠或打开
/bin/rsync.t
点击(此处)折叠或打开
在日志服务器上执行crontab任务
定期清理空间
点击(此处)折叠或打开
《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读
总结
以上是生活随笔为你收集整理的巧用shell+rsync服务实现日志自动过滤处理压缩并上传日志服务器,自动分类的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: nginx负载均衡的session共享问
- 下一篇: 自制垃圾批处理软件