Назад | Перейти на главную страницу

Использование Puppet для постепенного добавления строк в файл из нескольких классов

Я пытаюсь использовать 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 также не кажется правильным решением, хотя, возможно, мне что-то здесь не хватает.

Есть ли у кого-нибудь предложения относительно того, как я могу этого добиться?

Это должно помочь вам

https://github.com/ripienaar/puppet-concat

вы можете попробовать изучить concat модуль для сборки вашего файла конфигурации из фрагментов, объявленных в разных классах

В зависимости от того, что именно вы хотите, file_line ресурс в марионетка-stdlib могут быть вам полезны:

Сделать это можно двумя способами. с использованием марионеточного конкатенации или с использованием экспортированных ресурсов. Посмотрите учебные пособия по автоматическому добавлению проверок nagios с использованием экспортированных ресурсов. Что-то подобное должно сработать для splunk.