Я пытаюсь использовать Puppet для автоматической настройки мониторинга Splunk. Это включает добавление списка путей к файлам в файл конфигурации Splunk (inputs.conf).
Каждая роль (веб-сервер, база данных и т. Д.) В нашем приложении имеет свой собственный модуль Puppet, который включает некоторые базовые модули, общие для всех ролей.
Контролируемые файлы будут различаться в зависимости от роли - для веб-серверов мы хотим, чтобы отслеживался /var/log/nginx/error.log. Для серверов баз данных /var/log/postgresql/postgresql.log. Есть некоторые файлы (/ var / log / syslog), которые следует отслеживать для каждой роли.
Я заполняю файл inputs.conf, используя шаблон EBR, например:
# $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 необходимо будет перезапустить после добавления последней строки. У меня есть исполнитель, который это делает, но я не уверен, в какое «лучшее» время его запускать. Я бы предпочел избегать перезапуска Splunk после каждой дополнительной строки.
Мне сложно разработать чистый макет модуля, который поддерживает это. Я пробовал несколько разных раскладок, но, к сожалению, пока безуспешно. Виртуальные ресурсы могут быть хорошим решением, но я не думаю, что возможно иметь «виртуальную переменную», которая реализуется непосредственно перед ее использованием в шаблоне файла. Augeas также не кажется правильным решением, хотя, возможно, мне что-то здесь не хватает.
Есть ли у кого-нибудь предложения относительно того, как я могу этого добиться?
Это должно помочь вам
вы можете попробовать изучить concat модуль для сборки вашего файла конфигурации из фрагментов, объявленных в разных классах
В зависимости от того, что именно вы хотите, file_line ресурс в марионетка-stdlib могут быть вам полезны:
Сделать это можно двумя способами. с использованием марионеточного конкатенации или с использованием экспортированных ресурсов. Посмотрите учебные пособия по автоматическому добавлению проверок nagios с использованием экспортированных ресурсов. Что-то подобное должно сработать для splunk.