2017-08-09 3 views
0

私はSplunkフォワーダ/opt/splunkforwarder/etc/apps/search/local/inputs.confファイルを、特定のホストが持つ役割に基づいて設定しています。私は、(明らかに)JSONとして格納されているモニター、インデックス、およびソースタイプのロール固有の値を定義しました。シェフ:default.rbの代わりにjsonをロールに使用

ほとんどの例は、テンプレートリソースに渡された引数がattributes/default.rbファイルのエントリとして格納されているレシピのテンプレートリソースを使用してファイルを作成する方法を示しています。

今私はhereを実行しようとしているものに近い質問を見つけましたが、属性はJSONではなくハッシュであると仮定しています。

このアプローチを使用する際の私の躊躇は、フォーマットがJSONではなくハッシュであるだけでなく、必要なホスト上で実行されている各アプリケーションのモニタ、インデックス、ソースタイプに複数のエントリがあるという事実Splunkインデクサーに送信します。したがって、template.ergはJSONを繰り返し処理し、各アプリケーションログに新しいエントリを追加する必要があります。 JSONの役割の小さな例を以下に示します。

{ 
    "chef_type": "role", 
    "default_attributes": { 
    "gateway_common_input": { 
     "monitor": "/home/app/logs/common", 
     "index": "gateway_common", 
     "sourcetype": "common" }, 
    "gateway_recv_counter_input": { 
     "monitor": "/home/app/logs/recv_counter", 
     "index": "gateway_recv_counter", 
     "sourcetype": "recv_counter" }, 
    "gateway_send_counter_input": { 
     "monitor": "/home/app/logs/send_counter", 
     "index": "gateway_send_counter", 
     "sourcetype": "send_counter" } 

    }, 
    "description": "Role for Gateway hosts", 
    "env_run_lists": {}, 
    "json_class": "Chef::Role", 
    "name": "rgateway", 
    "override_attributes": {}, 
    "run_list": [ 
    "role[gateway]", 
    "recipe[gateway_dimensions]" 
    ] 
} 

編集: ファイルinputs.confのSplunkフォワーダに追加する必要が3件のアプリケーションログがある「rgateway」の役割を定義する上でJSONでの事項を明確に支援すること。 gateway_common_input、gateway_recv_counter_input、およびgateway_send_counter_inputそれぞれに、「monitor」、「index」、および「sourcetype」の独自の設定があります。

inputs.confファイルは、次のように3つのエントリを持っているでしょう:

[monitor:///home/app/logs/common/] 
disabled = false 
index = gateway_common 
sourcetype = common 

[monitor:///home/app/logs/recv_counter/] 
disabled = false 
index = gateway_recv_counter 
sourcetype = recv_counter 

[monitor:///home/app/logs/send_counter] 
disabled = false 
index = gateway_send_counter 
sourcetype = send_counter 

その他の役割は、5つのエントリか一つだけを有することができます。

答えて

0

シェフからJSONを出力するときは、Rubyコードでデータ構造を構築してから、.to_jsonを呼び出して文字列を取得します。

+0

私はJSONを出力するのではなく、テンプレートリソースを使用してファイルを構築するときに役割の属性を読み込みます。シェフサーバーにJSONとして保存されているロール属性を持つテンプレートリソースを使用してファイルを作成する明確な例は見つかりませんでした。それは、残念ながら私の問題です。 – user3481957

+0

あなたは "ロール属性"を直接使用せず、シェフの実行開始時にノード属性にマージされ、他のすべてのノード属性と同様に通常の 'node'オブジェクトを通じてアクセスします。 – coderanger

+0

それでも、2つの問題が残る: 1.これは、ノードが最初に収束してからロール属性を読み取ることができるということです。 2。レシピは、すべてのロールのすべての属性を知るか、実行時に属性を検出する方法が必要です(私がOPで言及したJSONを反復する問題)。 – user3481957

0

私が探していたものが見つかりましたhere。あなたは役割属性がどのように機能しているのかをよく把握していなかったという点で正しいコーデンガンでした。だから、私はJSONのロールでネストされた属性を解析する方法をあまり理解していませんでした。答えはテンプレートERBを正しく設定することにあります。クックブックでは、ノードの役割にリンクする属性はハッシュとして渡され、ERBはハッシュに対して反復処理を行います。

template "#{node['splunk']['forwarder']['home']}/etc/apps/search/local/inputs.conf" do 
    source "inputs.conf.erb" 
    if node["os"] == "linux" 
     owner "root" 
     group "root" 
     mode "0600" 
    end 
    variables ({ 
     :splunk_monitors => node['splunk']['monitors'], 
     :splunk_scripts => node['splunk']['scripts'] 
    }) 
    notifies :restart, resources(:service => servicename) 
end 

を使用すると、レシピは通常の方法でテンプレートリソースを呼び出して見ることができるように:ここでは、次のようにこれはデフォルトのレシピによって呼び出され

<% @splunk_monitors.each_with_index do |parameters, index| -%> 
# Begin new monitor stanza 
# 
<% parameters.each_key do |monitor_name| -%> 
[monitor://<%= parameters[monitor_name]['location'] %>] 
disabled = false 
<%= "sourcetype = " + parameters[monitor_name]['sourcetype'] if parameters[monitor_name]['sourcetype'] %> 
<%= "index = " + parameters[monitor_name]['index'] if parameters[monitor_name]['index'] %> 
<%= "whitelist = " + parameters[monitor_name]['whitelist'] if parameters[monitor_name]['whitelist'] %> 
<%= "blacklist = " + parameters[monitor_name]['blacklist'] if parameters[monitor_name]['blacklist'] %> 
<%= "host = " + parameters[monitor_name]['host'] if parameters[monitor_name]['host'] %> 
<%= "crcSalt = <SOURCE>" if parameters[monitor_name]['crcSalt'] %> 

<% end -%> 
<% end -%> 

を説明するために、その料理からテンプレートERBです。その後、 "モニタ"配列はナイフコマンドで設定されます(私の場合は、すでに役割によって定義されています)。

"override_attributes": { "splunk": { "monitors": [ { "thisistheshortlogname": { "location": "/var/log/fileordirectory", "index": "couldomitthis", "sourcetype": "", #optional "whitelist": "", #optional "blacklist": "", #optional "crcSalt": "" #optional } } ], ... 
関連する問題