我正在根据特定主机的角色配置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