1 安装ganglia 1.1安装环境 CentOS, fedora 1.2单机版安装步骤 假设机器的IP地址是192.168.1.253, 首先安装好所需要的软件
Copy to Clipboard引用的内容:[www.veryhuo.com]
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpmyum install rrdtool ganglia ganglia-gmetad ganglia-gmond ganglia-web httpd php apr apr-util
1.3 设置1 gmond的设置文件位置是/etc/gmond.conf,打开其进行编辑,只需修改下面的内容: cluster { name = "cluster1" owner = "owner1" latlong = "unspecified" url = "unspecified" } udp_send_channel { host = 192.168.1.253 port = 8649 ttl = 1 } udp_recv_channel { port = 8649 } 2 gmetad的设置文件位置是/etc/gmetad.conf,打开其进行编辑,只需修改下面的内容:
Copy to Clipboard引用的内容:[www.veryhuo.com]
data_source "my cluster" 192.168.1.253:8649
1.4 启动服务 1 启动gmond chkconfig gmond on service gmond start 2 启动gmetad chkconfig gmetad on service gmetad start 3启动httpd chkconfig httpd on service httpd start 1.5 观察结果打开localhost/ganglia就可以看到结果了。 2 python模块扩展 2.1 安装python模块进行功能扩展yum install ganglia-gmond-python 2.2 检查是否安装成功
2.3 定制一个pyphton模块定制一个python模块很简单,只需按照一定的模板编写.py文件,然后将这个模块(.py)放在 /usr/lib/ganglia/python_modules 目录下。对应的配置文件(.pyconf)放在/etc/ganglia/conf.d/目录下。 python模块可能要访问服务器的多个文件,由于运行python模块的用户和运行gmond的用户是一致的,所以必须保证运行gmond的用户有访问这些文件的权限。 在安装好ganglia-gmond-python后,已经自带了一个例子/usr/lib/ganglia/python_modules/example.py。下面将针对example.py解释python模块的格式,以及它的配置文件。 2.4 python模块模板以example为例(安装完ganglia-gmond-python 后已经自带)
import random
descriptors = list()
Random_Max = 50
Constant_Value = 50
def Random_Numbers(name):
'''Return a random number.'''
global Random_Max
return int(random.uniform(0,Random_Max))
def Constant_Number(name):
'''Return a constant number.'''
global Constant_Value
return int(Constant_Value)
def metric_init(params):
'''Initialize the random number generator and create the
metric definition dictionary object for each metric.'''
global descriptors
global Random_Max
global Constant_Value
random.seed()
print '[pyexample] Received the following parameters'
print params
if 'RandomMax' in params:
Random_Max = int(params['RandomMax'])
if 'ConstantValue' in params:
Constant_Value = int(params['ConstantValue'])
d1 = {'name': 'PyRandom_Numbers',
'call_back': Random_Numbers,
'time_max': 90,
'value_type': 'uint',
'units': 'N',
'slope': 'both',
'format': '%u',
'description': 'Example module metric (random numbers)',
'groups': 'example,random'}
d2 = {'name': 'PyConstant_Number',
'call_back': Constant_Number,
'time_max': 90,
'value_type': 'uint',
'units': 'N',
'slope': 'zero',
'format': '%hu',
'description': 'Example module constant (constant number)'}
descriptors = [d1,d2]
return descriptors
def metric_cleanup():
'''Clean up the metric module.'''
pass
#This code is for debugging and unit testing
if __name__ == '__main__':
params = {'RandomMax': '500',
'ConstantValue': '322'}
metric_init(params)
for d in descriptors:
v = d['call_back'](d['name'])
print 'value for %s is %u' % (d['name'], v)
模块中必须包含的三个方法是:
前面两个方法的名字必须是一定的,而最后一个 metric_handler可以任意命名。 __main__是便于debug用,可以单独调试该模块,以检测是否有错。 下面将对每个方法的功能做解释。 def metric_init(params):对模块的初始化,在gmond服务被启动的时候,运行一次。 该方法必须返回一个词典列表,每个词典表示了一个metric的信息。每个词典的格式如下:
d1 = {'name': 'PyRandom_Numbers', #metric的名字
'call_back': Random_Numbers, #收集到数据后调用的方法
'time_max': 90, #没有什么用。。。
'value_type': 'uint', #string | uint | float | double
'units': 'N', # metric的单位
'slope': 'both', #zero | positive | negative | both
'format': '%u', #必须和value_type对应 (reference: http://docs.python.org/library/stdtypes.html#string-formatting)
'description': 'Example module metric (random numbers)', #对metric的描述,在前端可以看到
'groups': 'example,random'} #这个metric属于的组,如果没有定义,会分到no_group metric中
在example这个例子中,d2的slope是zero,最后显示在Constant Metrics中,而不显示在下面的面板里。 def metric_cleanup():gmond关掉的时候执行,不能返回值。 def metric_handler(name):可以取任何的名字,要在call_back中调用,参数name在是metric字典里定义的name。 2.4 pyconf模板pyconf是python模块的配置文件,位置是/etc/ganglia/conf.d/example.pyconf(没有自带,需自己创建example.pyconf), 代码如下 modules{ module { name = "example" language = "python" # The following params are examples only # They are not actually used by the temp module param RandomMax { value = 600 } param ConstantValue { value = 112 } } } collection_group { collect_every = 10 time_threshold = 50 metric { name = "PyRandom_Numbers" #要显示的metric,与example.py中的d1名字对应 title = "Random" #metric在网页上显示的标题 value_threshold = 70 } metric { name = "PyConstant_Number" #要显示的metric,与example.py中的d2名字对应 title = "Constant" #metric在网页上显示的标题 value_threshold = 70 } } Modules:对每个模块进行配置 name:模块名,同时必须与创建的python文件名一致 language: 语言 param:参数列表,所有的参数作为一个dict(即map)传给python脚本的metric_init(params)函数。 本例中,metric_init调用时, params={“RandomMax”:”600”,”ConstantValue”:”112”} collection_group:需要收集的metric列表,一个模块中可以扩展任意个metric collect_every: 汇报周期,以秒为单位。 metric:可以有多个,定义每个metric的信息。 (责任编辑:IT) |