我在不同的计算机上运行了一个软件(代理,平衡器,注册商......),并希望使用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脚本中完成此操作?
答案 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
希望这会为您提供有用的指导(如果您尚未解决问题)。