我正在根據特定主機的角色配置Splunk forwarder /opt/splunkforwarder/etc/apps/search/local/inputs.conf文件。我已經定義了監視器,索引和源類型特定的值,這些值明顯地被存儲爲JSON。廚師:使用角色json而不是default.rb模板
大多數示例顯示如何使用配方中的模板資源創建文件,其中傳遞給模板資源的參數作爲條目存儲在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]"
]
}
編輯: ,來說明在上述JSON定義了「rgateway」角色有需要被添加到Splunk的轉發inputs.conf文件中的三個應用程序日誌事項; gateway_common_input,gateway_recv_counter_input和gateway_send_counter_input,每個都有它們自己的「monitor」,「index」和「sourcetype」設置。
的inputs.conf文件將不得不三個條目是這樣的:
[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條記錄或只有一個。
我不輸出JSON,而是在使用模板資源構建文件時讀取角色屬性。我還沒有找到任何使用具有角色屬性的模板資源創建文件的明確示例,這些角色屬性在Chef服務器上以JSON形式存儲。那不幸的是我的問題。 – user3481957
您不直接使用「角色屬性」,它們會在Chef運行開始時合併到節點屬性中,並像所有其他節點屬性一樣通過普通的「節點」對象訪問它們。 – coderanger
好吧,這仍然留下兩個問題: 1.這意味着節點必須先收斂,然後才能讀取角色屬性。 2。配方必須知道每個角色的所有屬性,或者有辦法在運行時發現屬性(關於迭代OP中提到的JSON的問題)。 – user3481957