2017-08-04 1 views
0

Ich brauche JMX-Metriken aus dem Hazelcast-Produkt. Ich habe einen Logstash-Prozess erstellt, der eine Verbindung zum JMX-Port herstellt. Dieser Prozess muss einen JSON lesen, wo die Informationen des Hostnamens, Ports, Clusters, der Umgebung usw. von Hazelcast JMX sind. Ich muss auf den Logstash-Rechnern die JSON-Datei für jeden Hazelcast-Rechner/Port bereitstellen. In diesem Fall gibt es drei Hazelcast-Maschinen und insgesamt 6 Prozesse mit unterschiedlichen Ports.So generieren Sie JSON-Dateien in der gleichen Aufgabe mit Vorlagen in Ansible

Beispiel Daten:

Hazelcast Host-Name: hazelcast01, hazelcast02, hazelcast03 Hazelcast Ports: 6661, 6662, 6663, 6664, 6665 Logstash Host-Name: logstash01, logstash02, logstash03

Dictionary of Hazelcast Informationen in ansible:

logstash_hazelcast_jmx: 
    - hazelcast_pre: 
     name: hazelcast_pre 
     port: 15554 
     cluster: PRE 
    - hazelcast_dev: 
     name: hazelcast_dev 
     port: 15555 
     cluster: DEV 

Beispiel Aufgabe in 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 

Das Endergebnis sollte wie folgt lauten:

/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 
... 

Hier ein Beispiel für das json-Gehalt:

{ 
    "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" 
    } 
    ] 
} 

Ich denke, ich habe das Problem ist, dass die with_dict Option erlaubt es nicht, mit eine Liste der Inventar-Hosts und ein Wörterbuch.

Wie bekomme ich diese Generation von JSON-Dateien für jede Maschine/Port?

Antwort

0

Wenn Sie Ihr Textbuch gegen logstash Rechner ausführen, können Sie with_nested verwenden:

--- 
- hosts: logstash_hosts 
    tasks: 
    - name: Deploy HAZELCAST JMX config 
     template: 
     src: "hazelcast_jmx.json.j2" 
     dest: "{{ logstash_directory_jmx_hazelcast }}/hazelcast_jmx_{{ helper_host }}_{{ helper_cluster }}.json" 
     owner: "{{ logstash_system_user }}" 
     group: "{{ logstash_system_group }}" 
     mode: 0640 
     with_nested: 
     - "{{ groups['HAZELCAST'] }}" 
     - "{{ logstash_hazelcast_jmx }}" 
     vars: 
     helper_host: "{{ item.0 }}" 
     helper_cluster: "{{ item.1.cluster }}" 
     helper_port: "{{ item.1.port }}" 

ich auch Hilfsvariablen mit aussagekräftigeren Namen verwendet. Sie sollten Ihre Vorlage auch mit Hilfe von Hilfsvariablen oder item.0, ändern - wobei item.0 ein Host aus der Gruppe HAZELCAST ist und ein Element aus der Liste logstash_hazelcast_jmx ist.

Verwandte Themen