我正在尝试在多个 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 忽略不存在的日志文件?
谢谢
恕我直言,你正在以错误的方式处理这个问题。
与其必须包含所有内容的整体配置,不如选择最小的通用配置,它利用从下拉目录动态加载外部配置文件/片段:
@include "/path/to/syslog-ng.conf.d/"
该最小配置可以部署在任何地方并且始终有效,同时您将系统/角色特定的 syslog-ng 配置部分添加为嵌入式文件,每个角色/服务对应安装在该特定服务器上的每个角色/服务。这是可以通过您站点上使用的任何部署和/或配置管理解决方案以及大多数发行版针对大量工具所采用的方法轻松管理的。
例如,当您部署 Confluence 时,还要部署
/path/to/syslog-ng.conf.d/confluence.conf
具有监视该主机上的 Confluence 所需的特定附加配置的服务器。您还可以尝试使用通配符文件源,据我所知,如果它与任何文件不匹配,则不会抛出错误。
(该链接指向 Axosyslog 的文档,这是一个由 syslog-ng 的原始创建者维护的云就绪 syslog-ng 发行版)