使用rsync检索日志文件

时间:2015-08-24 15:18:55

标签: logging rsync sysadmin

这个问题对谷歌来说很难,因为 rsync生成了日志文件,这不是我感兴趣的。

我想要做的是使用rsync从一组服务器中检索日志文件。通常情况下,当我想从我的家庭服务器到笔记本电脑的一堆个人文件时,我会按照以下方式做一些事情:

rsync --rsh='ssh' -av --progress --partial user@host:source destination

要说我的假期视频,以显示我的家人。但我现在想使用rsync将文件从服务器检索到备份位置。由于我的日志文件只是附加,并经常写入,有没有办法使rsync足够智能“跟随”更改而不是一遍又一遍地重新验证初始的百万行?如果没有,那么人们会使用另一个应用吗?我不想使用UDP连接,因为我希望能够在不丢失数据的情况下处理流量峰值,而TCP也会太慢,所以我想做一些本地文件,备份会在不活动期间赶上。< / p>

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我想使用rsync建立日志集中化。问题是,每当源日志文件获取更新时,rsync会将整个日志文件传输到远程服务器并删除旧的。这种行为是如此详尽无遗,这让我失去了理智。

结果是,rsync有一个--append标志,该标志允许rsync仅更新日志文件的“新部分”。 (我仅在日志文件上进行过测试)

从手册页:

-将数据追加到较短的文件中

来自explainshell.com

-追加

这会导致rsync通过将数据附加到文件末尾来更新文件,这假定接收方已经存在的数据与发送方文件的开头相同。如果文件需要传输并且接收方的大小等于或大于发送方的大小,则跳过该文件。当不需要传输文件时,这不会干扰文件非内容属性(例如,权限,所有权等)的更新,也不会影响任何非常规文件的更新。表示--inplace,但与--sparse不冲突(因为它始终会扩展文件的长度)。

例如

rsync -avz --append /source/dir /dest/dir

它不会重新验证整个文件,而只会附加更改。

答案 1 :(得分:0)

在阅读rsync的源代码后,我确定:

  1. 目前无法设置标志来执行此操作。
  2. rsync的工作方式是读取文件并计算文件块的哈希值,并将它们发送回与哈希值匹配的调用进程。但它确实看起来每次读取一个完整的文件,即使它没有占用那么多的带宽。
  3. 现在我将使用logrotate解决方案,但我还没有回答这个问题,因为我仍然确信必须有一个更好的解决方案才能解决问题。框。