log文件集中备份

log文件分散在各个服务器,通过些方案,将各服务器日志集中收集到一台机器,便于拷贝和管理

方案对比

本次对比方案主要涉及,rsync、filebeat和ansible。操作平台为linux

rsync

rsync(remote synchronize)是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机之间的文件。也可以使用 rsync 同步本地硬盘中的不同目录。 rsync 是用于替代 rcp 的一个工具,rsync 使用所谓的 rsync算法 进行数据同步,这种算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

rsync优点

rsync 具有如下的基本特性:
  1. 可以镜像保存整个目录树和文件系统
  2. 可以很容易做到保持原来文件的权限、时间、软硬链接等
  3. 无须特殊权限即可安装
  4. 优化的流程,文件传输效率高
  5. 可以使用 rsh、ssh 方式来传输文件,当然也可以通过直接的 socket 连接
  6. 支持匿名传输,以方便进行网站镜象

rsync缺点

  1. 不能实时同步
  2. 当文件数量达到百万级以上时,客户端同步时扫描改变的文件非常耗时
  3. 单向同步

ELK的filebeat

Filebeat的基本原理其实就是有一群prospector,每个prospector手下管着一批harvester,每个harvester负责监视一个日志文件,把变动的内容由spooler汇总之后交给Logstash或者Elasticsearch。

filebeat优点

  1. 跨平台,linux、windows都可以用
  2. 节省资源
  3. 有elk支持,从存储到生成报表很方便
  4. 支持大数据量

filebeat缺点

  1. 收集的是数据而不是文件,不能保证原日志文件完整性
  2. 须配置elk系统服务
  3. 只能在客户端push,不支持服务端pull

ansible

Ansilbe是一个部署一群远程主机的工具。远程的主机可以是远程虚拟机或物理机, 也可以是本地主机。Ansilbe通过SSH协议实现远程节点和管理节点之间的通信。理论上说,只要管理员通过ssh登录到一台远程主机上能做的操作,Ansible都可以做到。

ansible优点

  1. 依赖少,支持ssh协议即可
  2. 专门为管理服务器集群而开发
  3. 轻量级,在客户机无须安装应用
  4. 语法简单,主要要服务端工作
  5. 不需要启动服务,仅仅只是一个工具,可以轻松的实现分布式扩展

ansible缺点

  1. 工具较新,还没有成熟
  2. 在大批量服务器集群中,性能不是太高

总结

综合来看,三个工具各有胜负,如果仅仅是为了备份log文件rsync足以。 下面是rsync的使用脚本:

#!/usr/bin/env bash

backUpPath=/tmp/bak/log
remotePath=/home/zhoub/
remoteUser=zhoub
for serVer in `seq 225 228`
    do
        serVerIp="192.168.2."$serVer
        ping -c 3 $serVerIp > /dev/null 2>&1
        if [ $? -eq 0 ]
        then
            ssh-keyscan $serVerIp 2>&1 | grep -v "^$" > /dev/null
            if [ $? -eq 0 ]
            then
                if [ ! -d ${backUpPath}/${serVerIp} ]
                then
                    mkdir -p ${backUpPath}/${serVerIp}
                fi
                rsync -az ${remoteUser}@${serVerIp}:${remotePath} ${backUpPath}/${serVerIp}/
                echo ${serVerIp}" done!!"
            fi
        fi
    done

保存在路径:

/data/webproj/log-back

然后,启用crontab -e添加一个条目,注意,在ssh免密码的用户下面操作,而且不要用sudo crontab -e,因为sudo会给root生成一个定时条目,这样的话root并不是免密的

添加一个条目:

0 3 * * * /usr/bin/bash /data/webproj/log-back/rsync-backup.sh

有些系统bash 并不在/usr/bin下面,而是在/bin下面。 结束配置,需要测试就自己修改crontab 里面的时间测试一下好了。

附言

用rsync的ssh方法拷贝,不要输入密码就能完成

ssh免密码操作

创建公钥、公钥

ssh-keygen -t rsa

无视它出来的任何提示,欢快的一路回车到底吧。

分发公钥

把公钥 id_rsa.pub 复制到远程机器的 /home/username/.ssh目录 并命名authorized_keys

  1. 一步到位:scp ~/.ssh/id_rsa.pub username@hostname:~/.ssh/authorized_keys

  2. 复制 scp ~/.ssh/id_rsa.pub username@hostname:~ 登陆 ssh username@hostname 追加 cat id_rsa.pub » .ssh/authorized_keys