http://www.dowdandassociates.com/blog/content/howto-install-aws-cli-amazon-simple-storage-service-s3-s3cmd/
http://www.dowdandassociates.com/blog/content/howto-rotate-logs-to-s3/
https://www.lustforge.com/2012/07/15/logrotate-apache-logs-to-amazon-s3/
s3cmd:http://s3tools.org/
s3cmd 使用说明:
http://s3tools.org/s3cmd-howto
aws ec2(ami)下安装s3cmd
git clone https://github.com/s3tools/s3cmd.git
cd s3cmd
sudo python setup.py install
ubuntu 下安装s3cmd
sudo apt-get install s3cmd
http://tecadmin.net/install-s3cmd-manage-amazon-s3-buckets/
配置
s3cmd --configure
新建bucket
s3cmd mb s3://logix.cz-test
列出所有bucket
s3cmd ls
列出某个bucket的内容
s3cmd ls s3://logix.cz-test
上传文件到bucket
s3cmd put addressbook.xml s3://logix.cz-test/addrbook.xml
下载文件到本地
s3cmd get s3://logix.cz-test/addrbook.xml addressbook-2.xml
删除bucket(只能删除空的bucket,有文件删除不了)
s3cmd rb s3://logix.cz-test
删除文件
s3cmd del s3://logix.cz-test/addrbook.xml s3://logix.cz-test/storage.jpg
同步文件到S3
http://s3tools.org/s3cmd-sync
将httpd目录下的文件都同步到s3
s3cmd sync /var/log/httpd/* s3://your_bucket_name/httpd/
------------------------------
下面是logrotate的介绍
logrotate
http://huoding.com/2013/04/21/246
http://www.codeceo.com/article/linux-logrotate-usage.html
http://www.linuxcommand.org/man_pages/logrotate8.html
logrotate 的配置文件是 /etc/logrotate.conf 主要参数如下表:
参数 功能
compress 通过gzip 压缩转储以后的日志
nocompress 不需要压缩时,用这个参数
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 备份日志文件但是不截断
create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
nocreate 不建立新的日志文件
delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。
errors address 专储时的错误信息发送到指定的Email 地址
ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty 如果是空文件的话,不转储
mail address 把转储的日志文件发送到指定的E-mail 地址
nomail 转储时不发送日志文件
olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
tabootext [+] list 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
size size 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).
如果要同步自定义路径下的log文件,可以自己在/etc/logrotate.d/目录下新建一个文件,输入内容,postrotate的同步脚本也可以放在sh文件中
/home/web/message_center/log/* {
hourly
su www-data
missingok
rotate 5
nocompress
notifempty
size 1k
sharedscripts
postrotate
/home/web/message_center/sync.sh
endscript
}
手动执行logrotate
sudo logrotate -f /etc/logrotate.d/httpd (如果带了-d是模拟演示。不会实际执行)
参考:
http://zylhz.com/?p=120
手动执行logrotate
logrotate可以在任何时候从命令行手动调用。
要调用为/etc/lograte.d/下配置的所有日志调用logrotate:
# logrotate /etc/logrotate.conf
要为某个特定的配置调用logrotate:
# logrotate /etc/logrotate.d/nginx-access
预先执行logrotate
排错过程中的最佳选择是使用‘-d’选项以预演方式运行logrotate。要进行验证,不用实际轮循任何日志文件,可以模拟演练日志轮循并显示其输出。
# logrotate -d /etc/logrotate.d/nginx-access
强制执行logrotate
即使轮循条件没有满足,我们也可以通过使用‘-f’选项来强制logrotate轮循日志文件,‘-v’参数提供了详细的输出。
# logrotate -vf /etc/logrotate.d/nginx-access
Logrotate日志信息
logrotate自身的日志通常存放于/var/lib/logrotate/status目录。如果处于排障目的,我们想要logrotate记录到任何指定的文件,我们可以指定像下面这样从命令行指定。
# logrotate –s /var/log/logrotate-status -vf /etc/logrotate.d/nginx-access
cron 说明
http://cering.github.io/2015/11/02/%E8%BD%AC-Linux%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1crontab-cron-d%E4%BB%8B%E7%BB%8D/
发现cron 有执行,但是sync没成功, 通过查看系统email,
sudo cat /var/spool/mail/root
发现了问题所在,/bin/sh: /home/log/s3.log: No such file or directory
不存在这个文件。怎么会抛出这个文件呢?原来是在crontab中设置了输入日志路径是/home/log/s3.log。手动创建这个路径和文件,并赋予权限。
再次执行,出了这个/bin/sh: /home/s3_sync_httpd.sh: Permission denied 错误,给它权限。再次执行
ERROR: /root/.s3cfg: None
ERROR: Configuration file not available.
ERROR: Consider using --configure parameter to create one.
出了这个错误。手动执行sh /home/s3_sync_httpd.sh是正常同步的。而在crontab中有这个问题。
在做s3cmd --configure 的时候,生成了一个配置文件/home/ec2-user/.s3cfg
New settings:
Access Key: xxx
Secret Key: xxx
Default Region: us-west-2
Encryption password: nmg
Path to GPG program: /usr/bin/gpg
Use HTTPS protocol: True
HTTP Proxy server name:
HTTP Proxy server port: 0
Test access with supplied credentials? [Y/n] Y
Please wait, attempting to list all buckets...
Success. Your access key and secret key worked fine :-)
Now verifying that encryption works...
Success. Encryption and decryption worked fine :-)
Save settings? [y/N] Y
Configuration saved to '/home/ec2-user/.s3cfg'
用ls /home/ec2-user .* -l 可以列出隐藏文件。这个配置文件应该是在/home/ec2-user 下而不是在/root/下。因此。我们在sh文件中要指定运行的默认路径
#!/bin/bash
/usr/local/bin/s3cmd sync /var/log/httpd/* s3://xxx/s3_httpd/
在重启下service crond restart
终于成功了。正常上传,上传日志也输出到/home/log/s3.log 了
----------------
message center 不适用logrotate的几点说明:
1 logrotate会将log文件截断并重命名到old log路径下,若这样做的话,message center不会再重新生成log文件,导致log丢失
2 不會迭代處理子文件夾的log
s3cmd同步文件夹不需要自己处理文件是否更新的问题。s3cmd本身支持如果文件更新了才上传的判断。但是不要直接写某个文件名称。例如
/usr/local/bin/s3cmd sync ${sync_file_path} s3://${bucket_name}/xxx/${ip}/a.log >> ./sync_log.log
在旧的s3cmd版本(s3cmd version 1.1.0-beta3)中有无写a.log的效果是一样的,都会判断文件是否更新过。(通过size判断)
但是在新版本(s3cmd version 1.6.1)如果带了a.log则不论文件有无更新,一定会上传的。如果没有带a.log,则会判断是否更新(可以设置通过md5判断是否更新,当然速度会慢了),更新了才会上传
s3cmd 命令行参数说明:
http://s3tools.org/usage