有没有可靠的方法将日志从一台服务器传输到另一台服务器?
scp
目前我正在使用 cron 脚本每 5 分钟将文件传输到另一台服务器。
*/5 * * * * root
scp ~/my_log_file.txt user@remote_host.com:/remote/log/directory
答案1
- ryekayo 建议我的首选方法是将系统日志消息发送到本地文件和远程主机:
/etc/rsyslog.conf:
authpriv。* /var/log/secure authpriv.*@remote_host.com
(我认为该功能的一部分几乎适用于所有 syslog 守护进程。关于在另一端整理事情的部分特定于 rsyslog。)
然后在远程端,您需要设置接收服务器以将远程消息过滤到适当的位置(通过发送以 %HOSTNAME% 作为文件名的一部分的主机、通过设施 %syslogfacility-text%、程序名称 %programname% 等)
- 正如你所说,你可以将 scp 与 cron 一起使用
- 或者,我认为如果你使用 rsync
rsync ~/my_log_file.txt 用户@remote_host.com:/remote/log/directory
使用 cron,您可以保存重新复制日志文件的第一部分(我表示不确定,因为您肯定会保存复制已传输的部分,但您仍然在每一侧进行比较以找到要跳过的已传输部分。这应该对 SSD 更温和,并避免弄脏内核 IO 缓冲区,但它仍然会产生 IO 操作来扫描两端的开头。)。 - NFS(或 Ceph/GlusterFS/SMBFS)将一台机器的目录挂载到另一台机器上,并对另一台机器进行连续跟踪。
这些是我能想到的选择。
根据您传输日志的目标,如果目标是将日志长期存储在更大的磁盘上,则可以通过在 logrotate 的 post-rotate 中包含传输来提高效率。如果目标是访问过去 5 分钟的日志(例如 OSSEC),则上述传输方法更好。
另一件需要注意的事情是,如果您觉得生成日志的机器不可靠或不安全,那么最好让日志存储主机从日志生成机器复制,而不是授予其写入远程机器的权限。
答案2
如果你要使用 syslog 方式,你也可以使用 syslog-ng(https://www.balabit.com/documents/syslog-ng-ose-latest-guides/en/syslog-ng-ose-guide-admin/html/chapter-quickstart.html)。
我猜哪种方法适合您的需求实际上取决于您在将日志消息传输到服务器后想要如何处理它们。使用 syslog 可为您提供实时传输的好处,还可以处理消息并在需要时从中提取信息。