Logging 使用rsync检索日志文件

Logging 使用rsync检索日志文件,logging,rsync,sysadmin,Logging,Rsync,Sysadmin,这个问题很难在谷歌上找到,因为存在由rsync生成的日志文件,这不是我感兴趣的 我想做的是使用rsync从一组服务器检索日志文件。通常,当我想从家庭服务器向笔记本电脑发送一堆个人文件时,我会采取以下措施: rsync--rsh='ssh'-av--progress--partialuser@host:源-目的地 也就是说,找回我的假期录像带,给我的家人看。但我现在想使用rsync将文件从服务器检索到备份位置。由于我的日志文件是仅附加的,并且经常写入,有没有一种方法可以使rsync足够智能,能够“

这个问题很难在谷歌上找到,因为存在由rsync生成的日志文件,这不是我感兴趣的

我想做的是使用rsync从一组服务器检索日志文件。通常,当我想从家庭服务器向笔记本电脑发送一堆个人文件时,我会采取以下措施:

rsync--rsh='ssh'-av--progress--partialuser@host:源-目的地


也就是说,找回我的假期录像带,给我的家人看。但我现在想使用rsync将文件从服务器检索到备份位置。由于我的日志文件是仅附加的,并且经常写入,有没有一种方法可以使rsync足够智能,能够“跟踪”更改,而不是一次又一次地重新验证最初的一百万行?如果没有,是否有其他应用程序供人们使用?我不想使用UDP连接,因为我希望能够在不丢失数据的情况下处理流量尖峰,TCP会太慢,所以我想在备份期间赶上备份的本地文件。

< P>可以考虑使用<代码> LogSurvivs/Copy>自动将它们拆分为更小的文件。 使用
/etc/logrotate.conf
中的
dateext
选项,使旋转后的日志具有一致的文件名(即每次旋转后不重命名,这是默认功能,但与rysnc不兼容)。

2020编辑:

我还没有机会验证
rsync
现在是否支持此功能,但似乎有人提到了
--append
标志。如果它有效的话,我不想误导人们,但我现在保留我最初的评论

原件:

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

  • 目前无法设置标志来执行此操作
  • rsync
    的工作方式是读取文件并计算文件块的哈希值,然后将其发送回与哈希值匹配的调用进程。但它看起来确实像是每次读取一个完整的文件,即使它不会占用那么多带宽

  • 现在我将使用
    logrotate
    解决方案,但我没有回答这个问题,因为我仍然相信一定有一个更好的解决方案,它是现成的。

    我也有同样的问题。我想使用
    rsync
    构建日志集中化。问题是,只要源日志文件得到更新,
    rsync
    就会将整个日志文件传输到远程服务器,并删除旧的日志文件。这种行为太彻底了,让我不知所措

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

    从手册页:

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

    发件人:

    --附加

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

    比如说

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

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

    谢谢您的建议。一般来说,这还不错,但我希望在一般情况下有一个更实时的解决方案,但我想我可以将它分解成许多小文件。@zachaysan你所说的
    更实时的解决方案是什么意思?
    ?我想知道一种方法,可以告诉rysnc文件的开头永远不会改变。对于非常大的文件,我不希望rsync/操作系统必须从文件的开头读取,只是为了添加自上次检查以来的最后0.05%。例如,如果我执行
    less+G
    操作,我可以非常快速地读取一个大文件的末尾。我希望rsync做一些类似的事情。如果你旋转日志,它们每个只有20MB,这是一个问题吗?你会注意到它处理这样一个文件的开头与跳过前19MB的区别吗?酷!我还没有机会测试它,但如果它能工作,那就太棒了@zachaysan,我在讲一些背景知识。我们希望为开发人员跟踪应用程序的日志文件,这样他们就不必直接登录到服务器。在使用
    --append
    之前,我们无法进行“实时跟踪”,我们必须关闭
    tail-f
    并再次运行它。因为rsync删除旧的日志文件并用新的日志文件替换它。但是现在我们可以使用rsync的
    --append
    进行实时日志跟踪。至少对我们来说是有效的。谢谢你的澄清。我认为这将适用于原始问题,因此感谢您提交此答案和随后的澄清。