使用 Puppet 从多个类中逐步向文件添加行

使用 Puppet 从多个类中逐步向文件添加行

我正在尝试使用 Puppet 自动配置 Splunk 监控。这涉及将文件路径列表添加到 Splunk 配置文件 (inputs.conf)。

我们的应用程序中的每个角色(web 服务器、db 等)都有自己的 Puppet 模块,其中包括一些所有角色共有的基础模块。

受监控的文件会因角色而异 - 对于 Web 服务器,我们希望监控 /var/log/nginx/error.log。对于数据库服务器,我们希望监控 /var/log/postgresql/postgresql.log。有些文件 (/var/log/syslog) 应该针对每个角色进行监控。

我使用 EBR 模板填充 input.conf 文件,例如:

# $files is actually a parameter to the logging class
$files = ['/var/log/syslog', '/var/log/nginx/error.log']
file {"/opt/splunkforwarder/etc/apps/search/local/inputs.conf":
    ensure  => "present",
    content => template("logging/splunk_inputs.conf.erb"),
    require => Package["splunkforwarder"],
}

# splunk_inputs.conf.erb:
<% files.each do |file| %>
    [monitor://<%= file %>]
    disabled = false  
<% end -%>

理想情况下,我希望在每个类中都包含一个“日志”模块,并逐步构建应监视的文件列表。应合并此列表,并在模板中使用 $files 变量。

像这样:

class base {
    class {'logging':
        files => ['fileA', 'fileB']
    }
}

class webserver {
    require base

    class {'logging':
        files => ['file1', 'file2']
    }
}

... 将导致监视以下文件:fileA,fileB,file1,file2。

添加完最后一行后,需要重新启动 Splunk。我有一个 exec 可以执行此操作,但我不确定运行它的“最佳”时间。我最好避免在添加每行后重新启动 Splunk。

我在设计一个支持此功能的简洁模块布局时遇到了困难。我尝试了几种不同的布局,但遗憾的是到目前为止都没有成功。虚拟资源可能是一个很好的解决方案,但我认为不可能有一个在文件模板中使用之前实现的“虚拟变量”。Augeas 似乎也不是正确的解决方案,尽管我可能在这里遗漏了一些东西。

有人对我如何实现这一目标有什么建议吗?

答案1

答案2

您可以尝试使用连接模块从不同类中声明的片段构建配置文件

答案3

取决于你到底想要什么,文件行资源puppet-stdlib可能对你有用:

答案4

您可以通过两种方式执行此操作。使用 puppet concat,或使用导出的资源。查看使用导出的资源自动添加 nagios 检查的教程。类似的东西应该适用于 splunk。

相关内容