将日志文件从EC2实例自动备份到S3
2017-11-08 17:19
387 查看
原文链接:Automatic backup of log files to S3 from EC2 instances
近期我打算启动新的EC2实例来部署服务的新版本,并终止运行着旧版本服务的实例。我认为这种方法可行,因为我想无论如何都会有取代实例的时候。然而,这种方法存在一个弊端,即丢失服务的日志文件(我也许会用于排除故障与分析)。
我决定将这些日志文件备份到S3。然而,我不知道该如何做。因为我正在使用logrotate,来轮转这些文件。问题是,使用默认选项运行时,日志文件名是静态的,但内容会随着每次轮转而改变。开始我考虑dateext指令,以获取当前的日期添加到文件名,但最后我认为向logrotate添加rotate-hook会更容易。
创建logrotate hook非常简单。只需将postrotate/endscript指令添加到想要运行的脚本或命令即可。您还需要添加sharedscripts,以确保脚本每次只执行一次。
我的服务的logrotate文件(/etc/logrotate.d/my_service)如下所示:
但是,当前还未轮转到的日志文件该怎么办?如果实例将终止,那么最新的日志文件将不被上传。
解决方法是对系统使用shutdown-hook。在Ubuntu中使用upstart可以很容易地添加shutdown-hook。
upstart配置文件(/etc/init/shutdown-hook.conf)如下所示:
最后我只需脚本来上传日志文件到S3:
上传脚本将gzip日志文件(当使用delaycompress时需要),将日志文件重命名为当前时间戳以及使用aws-cli上传文件。该参数设置日志文件的扩展名,需要既能上传当前的日志(.log)也能上传之前的日志(.log.1)。
这当然不是最好的解决方案,但却容易实现。希望对你有帮助。
近期我打算启动新的EC2实例来部署服务的新版本,并终止运行着旧版本服务的实例。我认为这种方法可行,因为我想无论如何都会有取代实例的时候。然而,这种方法存在一个弊端,即丢失服务的日志文件(我也许会用于排除故障与分析)。
我决定将这些日志文件备份到S3。然而,我不知道该如何做。因为我正在使用logrotate,来轮转这些文件。问题是,使用默认选项运行时,日志文件名是静态的,但内容会随着每次轮转而改变。开始我考虑dateext指令,以获取当前的日期添加到文件名,但最后我认为向logrotate添加rotate-hook会更容易。
创建logrotate hook非常简单。只需将postrotate/endscript指令添加到想要运行的脚本或命令即可。您还需要添加sharedscripts,以确保脚本每次只执行一次。
我的服务的logrotate文件(/etc/logrotate.d/my_service)如下所示:
/var/log/my_service/*.log { daily missingok copytruncate rotate 10 compress delaycompress notifempty sharedscripts postrotate /bin/bash /etc/my_service/upload_log_to_s3.sh log.1 endscript }
但是,当前还未轮转到的日志文件该怎么办?如果实例将终止,那么最新的日志文件将不被上传。
解决方法是对系统使用shutdown-hook。在Ubuntu中使用upstart可以很容易地添加shutdown-hook。
upstart配置文件(/etc/init/shutdown-hook.conf)如下所示:
description "run at shutdown" start on starting rc task exec /bin/bash /etc/my_service/upload_log_to_s3.sh log
最后我只需脚本来上传日志文件到S3:
#!/bin/bash log_file_ext=$1 gzip -c /var/log/my_service/*.$log_file_ext > /tmp/log.gz aws s3 cp /tmp/log.gz s3://my_service_bucket/logs/`date +%Y-%m-%dT%H:%M:%SZ`.log.gz
上传脚本将gzip日志文件(当使用delaycompress时需要),将日志文件重命名为当前时间戳以及使用aws-cli上传文件。该参数设置日志文件的扩展名,需要既能上传当前的日志(.log)也能上传之前的日志(.log.1)。
这当然不是最好的解决方案,但却容易实现。希望对你有帮助。
相关文章推荐
- weblogic 日志文件自动备份建议方案
- mssql自动备份及自动清除日志文件教程
- mssql 2005自动备份及自动清除日志文件
- Python实现备份EC2的重要文件和MySQL数据库到S3
- Windows 2008 R2 做RMAN定时自动备份;日期格式影响日志文件生成
- 文件日志自动删除备份
- mssql自动备份及自动清除日志文件服务器设置
- C# 自动备份和清理日志文件
- linux shell 自动备份日志文件
- mssql自动备份及自动清除日志文件服务器设置
- 在unix系统中实现自动备份和自动清楚日志文件
- 文件自动备份和同步bypy和syncthing
- Windows中利用计划任务实现自动备份文件
- Oracle RMAN自动备份控制文件方法介绍
- CMD批处理——forfiles命令使用,自动删除过期备份文件
- 用批处理命令加WinRAR实现自动备份文件数据
- 利用windows自带任务计划功能自动备份项目产生的文件
- 没有备份、只有归档日志,如何恢复数据文件?
- 如何将editplus设置为不自动备份我的文件
- Windows下使用7-zip命令自动备份文件