Usando o Puppet para adicionar incrementalmente linhas a um arquivo, de várias classes

1

Estou tentando usar o Puppet para configurar automaticamente o monitoramento do Splunk. Isso envolve adicionar uma lista de caminhos de arquivos a um arquivo de configuração do Splunk (inputs.conf).

Cada função (servidor da Web, banco de dados, etc.) em nosso aplicativo possui seu próprio módulo Puppet, que inclui alguns módulos básicos comuns a todas as funções.

Os arquivos monitorados variarão entre as funções - para servidores da web que desejamos /var/log/nginx/error.log, devem ser monitorados. Para servidores db, /var/log/postgresql/postgresql.log. Existem alguns arquivos (/ var / log / syslog) que devem ser monitorados para cada função.

Eu preenchei o arquivo inputs.conf usando um modelo EBR, por exemplo:

# $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 -%>

Idealmente, quero incluir um módulo de "logging" em cada uma dessas classes e criar incrementalmente uma lista de arquivos que devem ser monitorados. Esta lista deve ser combinada e a variável $ files usada no template.

Algo parecido com isto:

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

class webserver {
    require base

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

... resultaria nos seguintes arquivos sendo monitorados: fileA, fileB, file1, file2.

O Splunk precisará ser reiniciado assim que a linha final for adicionada. Eu tenho um exec que faz isso, mas não tenho certeza do melhor momento para executá-lo. De preferência, gostaria de evitar o reinício do Splunk após cada linha adicional.

Estou com dificuldades para criar um layout de módulo limpo que suporte isso. Eu tentei alguns layouts diferentes, mas infelizmente sem sucesso até agora. Recursos virtuais podem ser uma boa solução, mas eu não acho que é possível ter uma "variável virtual" que é realizada antes de ser usada no modelo do arquivo. Augeas também não parece a solução certa, embora talvez esteja faltando alguma coisa aqui.

Alguém tem alguma sugestão de como eu poderia conseguir isso?

    
por Mike Ryan 06.12.2012 / 13:37

4 respostas

3

Isso deve fazer o truque para você

link

    
por 06.12.2012 / 14:34
2

você pode tentar usar o módulo concat para criar seu arquivo de configuração a partir de fragmentos declarados em classes diferentes

    
por 06.12.2012 / 14:28
1

Dependendo do que você quer exatamente, o file_line recurso em puppet-stdlib pode ser útil para você:

    
por 06.12.2012 / 19:38
1

Você pode fazer isso de duas maneiras. usando concat de marionetes ou usando recursos exportados. Veja os tutoriais de adição automática de verificações de nagios usando recursos exportados. Algo semelhante deve funcionar para o splunk.

    
por 06.12.2012 / 19:59

Tags