2016-07-17 190 views
5

我在群集中有> 10个节点。我使用Cloudera(YARN,HBase,Hue,Hadoop FS,Spark,Flink)在群集上安装了Hadoop堆栈。是否有一种简单的方法来收集所有节点的全局统计信息(就CPU使用情况,内存使用情况和网络使用情况而言)并使用Python进行读取?使用Python的目的是,我可以完全自由地指定绘图并确保在报告中使用统一的绘图风格。我可以使用哪些软件来完成此操作?它不必分发,只需一个简单的库就足够了。监视节点群集

+0

我使用librato.com,它有一个非常简单的一体化进程读取指标,并显示在一个漂亮的仪表盘,也是一个Python模块用于发布或检索数据。 – Maviles

回答

1

为了这个目的,我建议考虑使用ansible。 下面是一个简单playbook收集在inventory file指定的主机上的一些数据,并将其添加到本地文件:

- 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 

可以按照如下运行: ansible-playbook -i ansible-inventory stats-playbook.yml --forks=1

  • ansible_inventory是文件包含您的主机列表
  • stats-playbook.yml是上面打印的文件

当然,取决于你将如何存储收集的数据,它可能以不同的方式实现,但我认为总体思路是明确的。无论如何,有很多方法可以解决它在ansible

此外,ansible有python API,你可以直接从python做大多数事情!即,这是我们可以收集群集的配置:

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

看起来很棒!谢谢 :-) –