如何创建可配置的python脚本来提取石墨数据?

时间:2017-11-30 22:46:51

标签: python graphite

我在不同的计算机上运行了一个软件(代理,平衡器,注册商......),并希望使用collectd将统计信息发送到graphite

为此,我创建了一个python脚本,在其中对命令的返回值进行一些正则表达式搜索,该命令列出了属于该软件的所有统计信息。由于我想在所有不同的机器上使用相同的脚本,我需要以某种方式使用设置文件进行配置。因此,根据设置文件,每台机器将向石墨发送不同的参数。

我的部分内容:

stats = softwareX.get_all_statistics()   
call_mem = stats.findall(...mem_regex...).group(1)  
call_time = stats.findall(...time_regex...).group(1)  

考虑到我从stats中提取了许多参数,并且希望根据脚本运行的机器只发送它们中的某一组。对于示例,call_mem是平衡器机器发送到graphite的参数之一(但call_time不会被发送),而代理机器则是另一种方式(我会发送call_time,但不会发送call_mem

如何在所有机器的单个可配置python脚本中完成此操作?

1 个答案:

答案 0 :(得分:0)

我不知道您是否仍然对此有一个答案,但是您可以尝试这样的事情:

collect_and_send_stats.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys

all_stats_regex_dict = {
    'call_mem': 'here goes the call_mem regex',
    'call_time': 'here goes the call_time regex',
    # ...
}

def parse_stats(stat_name_list, all_stats_of_this_software):
    parsed_stats = {}
    for stat_name in stat_name_list:
        stat_regex = all_stats_regex_dict[stat_name]
        parsed_stats[stat_name] = all_stats_of_this_software.findall(stat_regex).group(1)

    return parsed_stats

if __name__ == '__main__':
    stat_name_list = sys.argv[1:]

    # somehow get the stats of this machine/software
    all_stats = get_all_statistics()

    stats = parse_stats(stat_name_list, all_stats)

    # send stats to graphite
    send(stats)

然后您可以在平衡器上这样调用此脚本:

./collect_and_send_stats.py call_mem

并在代理服务器上这样

./collect_and_send_stats.py call_time

希望这会为您提供有用的指导(如果您尚未解决问题)。