jacktangj 2011-11-13
ganglia支持python插件,熟悉了架构后编写起来还是比较简单的.具体安装过程就不说了,各种系统配置不一样,推荐的安装方法也各有不同,这里只记下基本定制插件的写法.
ganglia的体系结构=gmetad+gmond,gmetad作为整个系统的调度和展示的控制中心,gmond则分布在每台受监控机器上定期运行各种监控度量(metric)并将结果送到gmetad.
插件需要写成pythonmodule的方式,放置在/usr/lib64/ganglia/python_modules下面,简单实例模板如
import random def get_foo_count(name): '''可定制业务方法,返回一个整数值''' return random.randrange(5, 100) + 10 def metric_init(params): '''metric''' global descriptors d1 = { 'name': 'foo_count', 'call_back': get_foo_count, # 名字同业务方法一致 'time_max': 90, # 最大调度间隔时间 'value_type': 'uint', 'units': 'C', 'slope': 'both', 'format': '%u', 'description': 'Number of Foo', 'groups': 'foo_group' } descriptors = [d1] return descriptors def metric_cleanup(): "清除metric" if __name__ == '__main__': metric_init({}) for d in descriptors: v = d['call_back'](d['name']) print 'value for %s is %u' % (d['name'], v)
metric_init是初始化方法,返回本plugin要写的metric描述的列表, 在这只返回一个metric.
写完可以在命令行直接测试,如果输出valueforfoo_countis82这样的结果就表示基本没有问题了。
接下来的工作是让gmond知道这里有ganglia插件,在/etc/ganglia/conf.d目录下写个foo.pyconf 就可以
modules { module { name = "foo" language = "python" } } collection_group { collect_every = 60 time_threshold = 60 metric { name = "foo_count" title = "Foo Count" value_threshold = 1.0 } }
详细资料可以看 http://sourceforge.net/apps/trac/ganglia/wiki/ganglia_gmond_python_modules