1 背景
最近在做Incountry产品的SRE工作,由于线上的vault audit日志较大,导致磁盘利用率不足,需要对vault日志进行备份后并在机器上删除。初步考虑通过OSS来备份日志,以实现对日志文件备份的需求。
2 思路一:通过ECS挂载OSS实现日志备份
参考文档:通过云存储网关挂载OSS
2.1、开通云存储网关服务
开通地址:云存储网关服务
2.2、新建bucket
访问OSS管理控制台,控制台地址:https://oss.console.aliyun.com/bucket
点击“创建Bucket”按钮
这边的存储类型需要注意下,归档存储和冷归档存储的数据,都需要解冻,解冻有一定时间,如果希望能够实时下载日志的话,不选择这两种类型。
2.3、配置云存储网关
点击上述步骤创建好的bucket,选择“ECS挂载OSS”,并点击配置云存储网关。
填写网关名称,共享名称后下一步。
创建完成后,可以在列表中看到对应的云网关。
进入网关集群,并点击对应的id
点击高级设置,将忽略删除勾选上,这个配置勾选了之后,在ECS挂载了OSS之后,文件同步到OSS后,即使在ECS中删除了文件,OSS上仍然能够保存该文件。
2.4、ECS挂载OSS
登录云服务器ECS,找到实例,找到对应的机器,远程连接,登录ECS机器。
执行sudo su -切换root身份
根据对应的服务器挂在点,执行挂载命令:mount.nfs 192.168.0.125:/loying-test-vault-store logback/
执行完之后,会发现logback这个文件夹已经被挂载了。
在logback文件夹中新建文件、复制文件、删除文件,分别尝试,发现新建文件、复制文件后,OSS都会出现相应的文件。 当把新建的文件删除后,OSS中仍然存在该文件,符合预期。
2.5、成本
该方案中,设计配置云存储网关,云存储网关使用需要收费,收费情况如下:
考虑到成本原因,暂不考虑使用该方案。
3 思路二:通过ossutil实现日志备份
大致思路如下:
1、通过ossutil来实现日志文件上传至oss文件夹。帮助文档
2、通过ECS自带的云助手工具,实现定时执行机制。帮助文档
3.1 安装ossutil
1、运行以下命令下载ossutil。
wget https://gosspublic.alicdn.com/ossutil/1.7.14/ossutil64
2、运行以下命令修改文件执行权限。
chmod 755 ossutil64
3、使用交互式配置生成配置文件。
chmod 755 ossutil64
./ossutil64 config
4、根据提示设置配置文件路径,建议直接按回车使用默认配置文件的路径。根据提示分别设置Endpoint、AccessKey ID、AccessKey Secret和STSToken参数。
5、运行以下命令,验证是否已成功安装ossutil。如果屏幕中输出ossutil所有支持的命令,表明已成功安装ossutil。
/home/ecs-assist-user/ossutil64
3.2 通过ram role方式配置ossutil
3.1中的第4步,是直接根据主账号的AccessKey ID、AccessKey Secret进行配置,考虑到安全性问题,使用角色扮演的方式进行配置。具体步骤如下:
在ram中创建一个角色
给角色新增授权,授权oss权限。
找到对应的ECS机器,添加角色权限
搜索创建的角色,点击确定。
curl -o result.json http://100.100.100.200/latest/meta-data/ram/security-credentials/NewECSDeployRole
解析对应的json数据,并将相应的值通过非交互式的config命令格式,写入ossutil配置中去。如果机器未安装jq,需要提前安装jq:yum install jq
[root@i ecs-assist-user]# AccessKeyId=$(jq -r '.AccessKeyId'<result.json)
[root@i ecs-assist-user]# echo ${AccessKeyId}
STS.NTZ62FnAQxh9VLTB2CuDfpfor
[root@i ecs-assist-user]# AccessKeySecret=$(jq -r '.AccessKeySecret'<result.json)
[root@i ecs-assist-user]# SecurityToken=$(jq -r '.SecurityToken'<result.json)
[root@i ecs-assist-user]# ./ossutil64 config -e http://oss-cn-hangzhou-internal.aliyuncs.com -i ${AccessKeyId} -k ${AccessKeySecret} -t ${SecurityToken}
3.3 通过云助手定时执行命令
ECS->运维与监控->发送命令/文件(云助手)->创建命令,可以设置定时执行,以下命令是按照实际的需求:通过ram role配置ossutil,按条件查找出文件后上传文件,并修改文件名为:hostname_原文件名。备份后,将7天前的文件进行删除处理。通过云助手每周二/周五的上午10点30分定时执行。
命令内容如下:
#!/bin/bash
curl -o result.json http://100.100.100.200/latest/meta-data/ram/security-credentials/VaultAuditLogArchives
AccessKeyId=$(jq -r '.AccessKeyId'<result.json)
AccessKeySecret=$(jq -r '.AccessKeySecret'<result.json)
SecurityToken=$(jq -r '.SecurityToken'<result.json)
hostName=$(hostname -f)
/home/ecs-assist-user/ossutil64 config -e http://oss-cn-shanghai-internal.aliyuncs.com -i ${AccessKeyId} -k ${AccessKeySecret} -t ${SecurityToken}
find /var/log/ -name "vault_audit.*z" | while read id
do
/home/ecs-assist-user/ossutil64 cp $id oss://vault-log-store/${hostName}_${id##*log/} -u
done
find /var/log/ -mtime +7 -name "vault_audit.log.*z" -exec rm -rf {} \;
rm result.json;
执行结果:
OSS上的备份结果:
4 小结
通过以上两个方案,可以实现线上日志的备份,我们根据自己业务的情况选择了方案二,并在线上进行了配置。如果大家有更好的方案,欢迎留言补充。