Linux下Apache日志按日期分割并自动备份

目的:实现服务器A的Apache访问日志和错误日志每天按日期分割为一个文件保存,然后由另一台备份服务器B每天凌晨自动复制服务器A的日志文件并打包压缩备份。

  • 首先要设置服务器A的apache,实现日志文件自动按日期分割,以下为CentOS为例,httpd.conf文件配置如下:

     

    <virtualhost *:80>
            ServerName www.example.com
            Serveralias example.com
            ServerAdmin webmaster@example.com
            DocumentRoot /var/www/example.com/
            <directory "/">
                  Options FollowSymLinks
                  AllowOverride all
            </directory>
            <directory "/var/www/example.com/">
                  Options Indexes FollowSymLinks MultiViews
                  AllowOverride all
                  Order allow,deny
                  allow from all
            </directory>
            ErrorLog "|rotatelogs /var/log/httpd/example_error_log/%Y%m%d 86400 480"
            CustomLog "|rotatelogs /var/log/httpd/example_access_log/%Y%m%d 86400 480" common
      </virtualhost>

    以上配置利用了apache的rotatelogs功能实现了站点日志文件每天如20081221的形式保存到指定目录下,rotatelogs的用法可以参考这里

  • 服务器A设置好之后,就可以去备份服务器B写备份脚本了,这里假设服务器A的IP为:192.168.0.3,脚本如下:
    # apache log backup
    #!/bin/bash
     
    # 获取昨天的日期
    logfilename=`date -d yesterday +%Y%m%d`
    # 设置日志备份文件路径
    backupfilepath=/var/www/logs/
     
    # 备份错误日志文件
    echo "get example error log:"
    cd ${backupfilepath}
    # 获到服务器A昨天的日志文件
    scp root@192.168.0.3:/var/log/httpd/example_error_log/${logfilename} ./example/error/
    cd ${backupfilepath}example/error/
    # 打包压缩日志文件
    tar zcvf ${logfilename}.tar.gz ${logfilename}
    rm -rf ${logfilename}
     
    # 备份访问日志文件
    echo "get example access log:"
    cd ${backupfilepath}
    scp root@192.168.0.3:/var/log/httpd/example_access_log/${logfilename} ./example/access/
    cd ${backupfilepath}example/access/
    tar zcvf ${logfilename}.tar.gz ${logfilename}
    rm -rf ${logfilename}
    echo "done."

    在准备运行以上脚本以前,要先确认两台服务器之间用ssh-keygen命令生成的密钥设置了信任关系,可以参考我之前写的这篇日志:Linux下用SCP无需输入密码获取文件
    然后将该脚本命名为apachelog_backup.sh保存到/var/cron/目录下。

  • 确认两台服务器的备份目录都已建立好,当然事先可以自己测试一下脚本,比如到服务器A的备份目录建立一个用前一天日期命名的日志文件,内容随便,然后再到备份服务器B去先执行一下脚本,查看是否备份成功。
    最后用 crontab -e 命令在linux的定时任务中加入自动执行任务,让脚本在每天凌晨12点之后自动执行,如下:

     

    30 00 * * * sh /var/cron/apachelog_backup.sh

    这里我设置了每天零点30分执行脚本。

  • 大功告成。

写完这篇日志后,虽然是实现了自动备份,但是时间长了就会导致备份目录内文件越来越多,不易管理,等有时间再完善一下,让日志文件按年月来分目录保存,不知道rotatelogs可不可以实现,但可以确定apache官方曾推荐过一个叫cronolog的日志分割/轮巡工具可以实现,有兴趣的朋友可以研究下。

另外如果需要用软件来分析apache日志文件的话还需要将其合并,嗯,有时间再写一篇关于日志合并分析的日志。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值