linux cpu占用率如何看
316
2022-10-06
centos使用阿里云ossfs工具挂载远程bucket目录
场景及用途:ecs服务器需要存储服务日志180天以上,通过ossfs工具挂载oss bucket
以下是实现脚本,但是实际使用种发现当bucket内存储得小文件很多时,ls 命令查看非常慢,听阿里得说是因为每秒只能查看160个文件左右得原因才慢得,当然也有其他方法可以规避这种问题,因为是属于冷存储了,平时也不看价格方面也较为便宜,如果要求及时查看、响应时间等可以使用NAS产品,测试比ossfs快很多,稍微贵一些
#!/bin/bash
#
# A xurui@weimiao.cn
# D 20220408
# v 3
### 安装ossfs部分 ###
OssfsInstall (){
# ossfs需要依赖fuse 2.8.4以上版本
yum -y install >/dev/null 2>&1
# XXX wm-logs子账户AK
echo "wm-logs:xxxxxxxxxxBRUP7h3DWf:xxxxxxxxxxxuq7Ehi8v4EEt" > /etc/passwd-ossfs
chmod 640 /etc/passwd-ossfs
ln -sf /usr/local/bin/ossfs /bin/ossfs
read -p "提供ossfs挂载点[dake || xiaobaiying || xinxiliu || zhongtai || dushuhui] : " Line
if [[ $Line = 'dake' || $Line = 'xiaobaiying' || $Line = 'xinxiliu' || $Line = 'zhongtai' || $Line = 'dushuhui' ]];then
mkdir -p /$Line/{nginx,php,go,java}
# 挂载时报错ossfs: bucket 'wm-logs' does not exist,说明oss控制台bucket下没有对应的目录
ossfs wm-logs:/$Line/nginx/ /$Line/nginx/ -ourl=wm-logs:/$Line/java/ /$Line/java/ -ourl=wm-logs:/$Line/php/ /$Line/php/ -ourl=wm-logs:/$Line/go/ /$Line/go/ -ourl="ossfs installed ...done"
# 开机启动
echo -e "
ossfs wm-logs:/$Line/nginx/ /$Line/nginx/ -ourl=wm-logs:/$Line/java/ /$Line/java/ -ourl=wm-logs:/$Line/php/ /$Line/php/ -ourl=wm-logs:/$Line/go/ /$Line/go/ -ourl=>> /etc/rc.local
echo "开机启动配置: /etc/rc.local ...done"
else
echo "从指定的参数中挂载失败"
exit 30
fi
}
### 提示ossfs部分 ###
OssfsCheckStatus (){
echo -e "\033[33m ossfs not installed, please execute 'sh $0 install'\033[0m"
exit 20
}
### 运行脚本部分 ###
ScriptRunUsage (){
echo -e "\033[31m 没有正确匹配参数 \033[0m"
echo -e "\033[33mUsage : \n sh $0 \$1
dake [大课]
xiaobaiying [小白营]
xinxiliu [信息流]
zhongtai [中台]
dushuhui [读书会]
install [安装ossfs,重复执行可挂载多业务线目录]
removedir [卸载挂载目录]
upgrade [更新脚本]
\033[0m"
exit 10
}
### 全局传参 ###
A=$1
B=$2
Nian=$(date +%Y)
Yue=$(date +%m)
Ri=$(date +%d)
NginxLogs=$(ls -l /'{print $NF}'|grep -E '[0-9]')
AppliLogs=$(ls -l /'{print $NF}'|grep -E '[0-9]')
###日志执行逻辑 ####
NginxLogic (){
# NGINX
mkdir -p /$A/$B/$Nian/$Yue/Temp_"$B"_"$Yue"_$(hostname -i)
cp $NginxLogs /$A/$B/$Nian/$Yue/Temp_"$B"_"$Yue"_$(hostname -i)
cd /$A/$B/$Nian/$Yue/Temp_"$B"_"$Yue"_$(hostname -i)
# 只对日志格式为: ****.access.log-20211201 进行处理
rename .log _$(hostname -i)_"$Yue""$Ri"_"$B".log *.log-*
mv /$A/$B/$Nian/$Yue/Temp_"$B"_"$Yue"_$(hostname -i)/* /$A/$B/$Nian/$Yue/
rm -fr /$A/$B/$Nian/$Yue/Temp_"$B"_"$Yue"_$(hostname -i)
}
AppliLogic (){
# PHP GO JAVA
mkdir -p /$A/$B/$Nian/$Yue/Temp_"$B"_"$Yue"_$(hostname -i)
cp $AppliLogs /$A/$B/$Nian/$Yue/Temp_"$B"_"$Yue"_$(hostname -i)
cd /$A/$B/$Nian/$Yue/Temp_"$B"_"$Yue"_$(hostname -i)
# 只对日志格式为: ****.access.log-[0-9] 进行处理
# 只对日志格式为: ****.access.[0-9].log 进行处理
rename .log _$(hostname -i)_"$Yue""$Ri"_"$B".log *.log*
mv /$A/$B/$Nian/$Yue/Temp_"$B"_"$Yue"_$(hostname -i)/* /$A/$B/$Nian/$Yue/
rm -fr /$A/$B/$Nian/$Yue/Temp_"$B"_"$Yue"_$(hostname -i)
}
### 自动更新脚本 ###
UpgradeScript (){
mkdir -p /script/
wget -q -N -- ---O /script/.wm-logs-upgrade.sh
mv /script/.wm-logs-upgrade.sh /script/wm-logs.sh
}
### 移除挂载目录 ###
RemoveDiskDir (){
# fusermount -z umount -u 卸载
echo -e "\033[33m输入要卸载的目录名:\n`df -h|grep -w "ossfs"|awk '{print " "$NF}'`\n参考: 移除所有 /dake 目录 | /xiaobaiying 目录\033[0m"
read -p "输入唯一[严格要求准确]关键字: " "DirName"
df -h|grep -w "ossfs"|grep -w "$DirName"|awk '{print "fusermount -zu "$NF}'|sh
sed -i "/\\$DirName/d" /etc/rc.local
}
### 脚本逻辑主体 ###
if [ "$1" = "install" ];then
OssfsInstall;
elif [ "$1" = "removedir" ];then
RemoveDiskDir;
elif [ "$1" = "upgrade" ];then
UpgradeScript;
echo "`ls -l /script/wm-logs.sh|awk '{print $6,$7,$8,$NF}'` update done"
else
if [[ $1 = 'dake' || $1 = 'xiaobaiying' || $1 = 'xinxiliu' || $1 = 'zhongtai' || $1 = 'dushuhui' ]];then
ossfs=$(rpm -qa|grep ossfs-|wc -l)
UpgradeScript;
if [ $ossfs = 1 ];then
if [ "$2" = "nginx" ];then
NginxLogic;
elif [ "$2" = "php" ];then
AppliLogic;
elif [ "$2" = "go" ];then
AppliLogic
elif [ "$2" = "java" ];then
AppliLogic;
else
echo -e "\033[31m 没有正确匹配参数 sh $0 $1 \$2 = nginx|php|go|java \033[0m"
exit 40
fi
else
OssfsCheckStatus;
fi
else
ScriptRunUsage;
fi
fi
以下是脚本外内容
脚本定时运行时间及参数含义
12 4 2,3,8,13,18,23,28 * * sh /script/wm-logs.sh changqing nginx
1、changqing 是业务线名称,
2、nginx 是这个业务线下得前端nginx ,当然也可以实php、go、java 等,
3、$1或者$2传对应得参数会在本地和bucket内创建对应得目录并挂载,需要在脚本内提前定义常量
4、脚本不负责切割,只负责对已经切割得日志进行上传,不切割得不处理。
关于自动更新 UpgradeScript;
在下载服务器有一个主脚本,和其他服务器上得脚本内容都是一致得,因为服务器数量很多不能每个机器都改一次。所以当修改下载服务器得脚本时,其他应用服务器会将新脚本更新到本地,下次在执行本地脚本时候就是新脚本。
可以手动执行更新,不需要更新功能可以注释。
脚本都是经过实际场景打磨得,没坑
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~