【问题标题】:Using rsync to retrieve log files使用 rsync 检索日志文件
【发布时间】:2015-08-24 15:18:54
【问题描述】:

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

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

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

要说检索我的假期视频以向我的家人展示。但我现在想使用 rsync 将文件从服务器检索到备份位置。由于我的日志文件只是附加的,并且经常被写入,有没有办法让 rsync 足够聪明地“跟踪”更改,而不是一遍又一遍地重新验证最初的百万行?如果没有,是否还有其他应用程序可供人们使用?我不想使用 UDP 连接,因为我希望能够在不丢失数据的情况下处理流量峰值,而 TCP 会太慢,所以我想使用在不活动期间赶上备份的本地文件。

【问题讨论】:

    标签: logging rsync sysadmin


    【解决方案1】:

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

    原来,rsync 有一个--append 标志,它允许rsync 只更新日志文件的“新部分”。 (我只在日志文件上测试过)

    来自手册页:

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

    来自explainshell.com

    --追加

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

    例如

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

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

    【讨论】:

    • 酷!我还没有机会测试它,但如果它有效,那就太好了!
    • @zachaysan 我提供了一些背景信息。我们希望为开发人员跟踪应用程序的日志文件,这样他们就不必直接登录服务器。在使用这个--append 之前,我们无法进行“实时跟踪”,我们不得不关闭tail -f 并再次运行它。因为 rsync 会删除旧的日志文件并用新的文件替换它。但是现在我们可以使用 rsync 的--append 进行实时日志拖尾。至少对我们有用。
    • 感谢您的澄清。我认为它适用于原始问题,因此感谢您提交此答案和随后的澄清。
    【解决方案2】:

    您可以考虑使用logrotate 将它们自动拆分为更小的文件。

    使用/etc/logrotate.conf 中的dateext 选项使旋转的日志具有一致的文件名(即在每次旋转后不重命名,这是默认功能,但不适用于 rysnc)。

    【讨论】:

    • 感谢您的想法。总的来说还不错,但我希望在一般情况下有一个更实时的解决方案,但我想我可以把它分解成很多小文件。
    • @zachaysan a more real time solution 是什么意思?
    • 我想要一种方法可以告诉 rysnc 文件的开头永远不会改变。对于非常大的文件,我不希望 rsync / 操作系统必须从文件的开头读取,只是为了添加自上次检查以来的最后 0.05%。例如,如果我执行less +G,我可以非常快速地从一个大文件的末尾读取。我希望 rsync 做类似的事情。
    • 如果您轮换日志并且每个日志只有 20MB,这是一个问题吗?您是否注意到它处理此类文件的开头与跳过前 19MB 的区别?
    【解决方案3】:

    2020 年编辑:

    我还没有机会验证 rsync 现在可以支持此功能,但似乎其他人提到了 --append 标志。如果它有效,我不想误导人们,但我暂时保留我原来的评论。

    原文:

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

    1. 目前无法设置标志来执行此操作。
    2. rsync 的工作方式是读取文件并计算文件块的哈希值并将它们发送回与哈希值匹配的调用进程。但它看起来确实每次都读取完整的文件,尽管它并没有占用那么多带宽。

    现在我将使用logrotate 解决方案,但我没有回答这个问题,因为我仍然相信必须有一个更好的解决方案,开箱即用。

    【讨论】:

      猜你喜欢
      • 2016-02-18
      • 1970-01-01
      • 2013-09-11
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多