2016-07-17 121 views
5

Ho> 10 nodi in un cluster. Ho installato uno stack Hadoop sul cluster usando Cloudera (YARN, HBase, Hue, Hadoop FS, Spark, Flink). C'è un modo semplice per raccogliere statistiche globali di tutti i nodi (in termini di utilizzo della CPU, utilizzo della memoria e utilizzo della rete) e leggerlo con Python? Lo scopo di usare Python è che sono completamente libero di specificare i grafici e di assicurare uno stile di stampa uniforme nel mio rapporto. Quale software posso usare per realizzare questo? Non deve essere distribuito, basta una libreria facile.Monitorare un cluster di nodi

+0

sto usando librato.com, ha un processo molto semplice integrazione di leggere metriche e mostrare loro in un bel cruscotto, e anche un modulo python per pubblicare o recuperare dati. – Maviles

risposta

1

Vorrei suggerire di utilizzare ansible per questo scopo. Ecco un semplice playbook che raccoglie alcuni dati su host specificati nel inventory file e lo aggiunge un file locale:

- hosts: all 
    remote_user: your_user 
    tasks: 
    - name: collect load average 
    shell: cat /proc/loadavg 
    register: cluster_node_la 

    - name: write to local disk 
    lineinfile: dest=/tmp/cluster_stat create=yes line="{{ ansible_fqdn }}:{{ cluster_node_la.stdout_lines }}" 
    delegate_to: 127.0.0.1 

è possibile eseguirlo come segue: ansible-playbook -i ansible-inventory stats-playbook.yml --forks=1

  • ansible_inventory è il file contenente un elenco dei tuoi host
  • stats-playbook.yml è il file stampato sopra

Ovviamente, a seconda di come archiviare i dati raccolti potrebbe essere implementato in modo diverso, ma penso che l'idea generale sia chiara. In ogni caso, ci sono molti modi per risolverlo in ansible.

Inoltre, ansible ha API python e puoi fare la maggior parte delle cose direttamente da python! Vale a dire, questo è il modo siamo in grado di raccogliere la configurazione del cluster:

import pprint 

import ansible.runner 
import ansible.inventory 

inventory_file = 'ansible_inventory' # see ansible inventory files 
inventory = ansible.inventory.Inventory(inventory_file) 

runner = ansible.runner.Runner(
    module_name='setup', 
    module_args='', 
    pattern='all', 
    inventory=inventory 
) 

cluster_facts = runner.run() 
pprint.pprint(cluster_facts) 
+0

Sembra fantastico! Grazie :-) –

Problemi correlati