我需要从 Hazelcast 产品中获取 JMX 指标。我创建了一个连接到 JMX 端口的 Logstash 进程。这个过程必须读取一个 json,其中包含 Hazelcast JMX 的主机名、端口、集群、环境等信息。我需要在 Logstash 机器上部署每个 Hazelcast 机器/端口的 json 文件。在这种情况下,有 3 台 Hazelcast 机器,共有 6 个进程,具有不同的端口。
示例数据:
Hazelcast 主机名:hazelcast01、hazelcast02、hazelcast03 Hazelcast 端口:6661、6662、6663、6664、6665 Logstash 主机名:logstash01、logstash02、logstash03
Ansible 中的 Hazelcast 信息字典:
logstash_hazelcast_jmx:
- hazelcast_pre:
name: hazelcast_pre
port: 15554
cluster: PRE
- hazelcast_dev:
name: hazelcast_dev
port: 15555
cluster: DEV
Ansible 中的任务示例:
- name: Deploy HAZELCAST JMX config
template:
src: "hazelcast_jmx.json.j2"
dest: "{{ logstash_directory_jmx_hazelcast }}/hazelcast_jmx_{{ item }}_{{ item.value.cluster }}.json"
owner: "{{ logstash_system_user }}"
group: "{{ logstash_system_group }}"
mode: 0640
with_dict:
- "{{ groups['HAZELCAST'] }}"
- logstash_hazelcast_jmx
最终结果应如下所示:
/opt/logstash/jmx/hazelcast/hazelcast_jmx_hazelcast01_DEV.json
/opt/logstash/jmx/hazelcast/hazelcast_jmx_hazelcast01_PRE.json
/opt/logstash/jmx/hazelcast/hazelcast_jmx_hazelcast02_DEV.json
...
以下是 json 内容的示例:
{
"host" : "{{ hostname of groups['HAZELCAST' }}",
"port" : {{ item.value.port }},
"alias" : "{{ hostname of groups['HAZELCAST' }}_{{ item.value.cluster }}",
"queries" : [
{
"object_name" : "com.hazelcast:instance=_hz_{{ item.value.cluster }},type=XXX,name=YYY",
"attributes" : [ "size", "localHits" ],
"object_alias" : "Hazelcast_map"
} ,{
"object_name" : "com.hazelcast:instance=_hz_{{ item.value.cluster }},type=IMap,name=user",
"attributes" : [ "size", "localHits" ],
"object_alias" : "Hazelcast_map"
}
]
}
我认为我遇到的问题是 with_dict 选项不允许使用清单主机列表和字典。
如何为每台机器/端口获取这一代的 json 文件?