Puppetを使用してSplunkモニタリングを自動的に構成しようとしています。これには、ファイルパスのリストをSplunk構成ファイル(inputs.conf)に追加することが含まれます。
アプリケーションの各ロール(webserver、dbなど)には、すべてのロールに共通のいくつかの基本モジュールを含む独自のPuppetモジュールがあります。
監視されるファイルはロールによって異なります。Webサーバーの場合、/ var/log/nginx /error.logを監視する必要があります。データベースサーバーの場合、/ var/log/postgresql /postgresql.log。すべての役割について監視する必要があるいくつかのファイル(/ var/log/syslog)があります。
EBRテンプレートを使用してinputs.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を再起動する必要があります。私にはこれを行う幹部がいますが、それを実行するための「最適な」時期がわかりません。行を追加するたびにSplunkを再起動しないようにしたいと思います。
これをサポートするクリーンなモジュールレイアウトを設計するのに苦労しています。いくつかの異なるレイアウトを試しましたが、残念ながらこれまでのところ成功していません。仮想リソースは良い解決策かもしれませんが、ファイルのテンプレートで使用される直前に実現される「仮想変数」を持つことは不可能だと思います。 Augeasも正しい解決策のようには思えませんが、おそらくここで何かが欠けています。
私がこれをどのように達成できるかについて誰かが何か提案がありますか?
これはあなたのためにトリックをするはずです
concat モジュールを使用して、さまざまなクラスで宣言されたフラグメントから構成ファイルを構築することを検討できます。
正確に何が必要かによっては、 puppet-stdlib の file_line リソースが役立つ場合があります。
これは2つの方法で行うことができます。 puppet concatを使用するか、エクスポートされたリソースを使用します。エクスポートされたリソースを使用してnagiosチェックを自動的に追加するチュートリアルをご覧ください。 Splunkでも同様のことが機能するはずです。