如何告诉 syslog-ng 忽略不存在的源文件

如何告诉 syslog-ng 忽略不存在的源文件

我正在尝试在多台 Linux 服务器上部署 syslog-ng 的标准配置文件。我的基础架构包括许多服务(apache、confluence 等),日志文件位于不同位置。

请参阅我的自定义 syslog-ng 配置文件的摘录:

source s_auditd {
  file("/var/log/audit/audit.log" flags(no-parse) program-override("auditd"));
};

source s_app {
  file("/opt/atlassian/confluence/logs/catalina.out" flags(no-parse) program-override("confluence"));
  file("/opt/atlassian/jira/logs/catalina.out" flags(no-parse) program-override("jira"));
};

例如,我的配置文件可以部署在未托管 confluence 的服务器上。但 syslog-ng 无论如何都会尝试查找我在源 s_app 中声明的日志文件,并抛出错误。

我的问题很简单:是否存在一种机制可以让我告诉 syslog-ng 忽略缺失的日志文件?

谢谢

答案1

我认为你以错误的方式处理这个问题。

不要使用必须包含所有内容的单一配置,而是采用最小的通用配置,利用从插入目录动态加载外部配置文件/片段:

@include "/path/to/syslog-ng.conf.d/"

这种最小配置可以部署到任何地方,并且始终有效,同时您可以将系统/角色特定的 syslog-ng 配置部分添加为插入文件,每个角色/服务都安装在该特定服务器上。无论在您的站点使用什么部署和/或配置管理解决方案,以及大多数发行版对大量工具采用的方法,都可以轻松管理这一点。

例如,当您部署 Confluence 时,还会部署/path/to/syslog-ng.conf.d/confluence.conf在该主机上监控 Confluence 所需的特定附加配置。

答案2

您还可以尝试使用通配符文件源,据我所知,如果它与任何文件都不匹配,则不会抛出错误。

(该链接指向 Axosyslog 的文档,Axosyslog 是一个支持云的 syslog-ng 发行版,由 syslog-ng 的原始创建者维护)

相关内容