我可以使用 syslog-ng 镜像远程服务器上的所有日志文件,而无需指定每个文件吗?

我可以使用 syslog-ng 镜像远程服务器上的所有日志文件,而无需指定每个文件吗?

我可以使用 syslog-ng 将所有日志文件镜像到远程服务器而无需指定每个文件吗?两者都运行 syslog-ng OSE 版本 3.5.2。文件(“/var/log/*”)设置看起来很有希望,但它似乎没有递归,并且在 syslog() 源的另一端重建文件名似乎很困难。

我是否应该放弃这个并进行某种脚本编写或使用 rsync 或其他完全不同的东西?

源本质上是一台闪存有限的嵌入式 Linux 计算机,其他计算机则相当笨重。它们连接到同一个 1GB 的快速交换机。嵌入式 Linux 在没有发送大部分日志的情况下崩溃是不行的,因此某种持续更新似乎是合适的。

答案1

这取决于。

如果你的应用程序直接登录到 /var/log/ 下的文件,那么你有以下可能性

  • 重新配置应用程序以登录 syslog 而不是文件,然后 syslog-ng 可以读取传入的消息并将其转发到您的日志服务器。如果您的应用程序支持登录 syslog,那么这是推荐的方法。
  • syslog-ng 商业版本支持通配符文件源(/var/log/* 等)。此功能目前在 syslog-ng 开源版本中不可用
  • 作为一种解决方法,您可以使用 syslog-ng 的 confgen 插件(我不确定它是否在 3.5 版中可用,但它肯定在 3.6 及更新版本中可用)。使用confgen 插件,你可以运行一个脚本,在 syslog-ng 配置文件中生成一个部分:您可以使用它将 /var/log 中的文件列为文件源(请注意,此解决方案不会自动从 /var/log 添加新文件,您必须定期重新启动 syslog-ng)。

顺便说一句,如果可能的话,您可能希望将 syslog-ng 更新到较新的版本,3.5 版本相当旧,而且有些错误。最新的 3.9 版本支持磁盘缓冲区和其他不错的功能。

高血压

答案2

您可以通过以下配置简单地导出日志:

destination d_syslog_central { udp( "SERVER"); };
log { source(s_all); destination(d_syslog_central); };

其中 SERVER 是日志服务器的 IP。所有使用 syslog 的服务都将被导出。您可以配置缺少的服务以使用它们(例如 Apache...)

相关内容