注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

老和山小和尚

敬天爱人

 
 
 

日志

 
 
 
 

针对ganglia3.1.1开发自定义的模块  

2009-01-08 17:41:00|  分类: 系统管理 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
开发ganglia3.1.1的C模块
 
1、安装apr-1开发库:
sudo apt-get install libapr1-dev libconfuse-dev libganglia1-dev python-dev
2、下载ganglia monitor core组件,并安装:
./configure && make
sudo make install
3、尝试编译自定义模块(例子在‘gmond/modules/example’下面):
gcc -fpic -I/usr/include/apr-1 -D_LARGEFILE64_SOURCE -Wall -c mod_example.c -o mod_example.o
注意:貌似我加了-fpic参数以后,在gmond启动时出现了undefined symbol: _stack_chk_fail_local的错误,去掉就可以了。
    连接:
ld -shared mod_example.o -ldl -lnsl -lexpat -lconfuse -lapr-1 -lpthread -soname  modexample.so -o modexample.so
4、把模块拷贝到ganglia存放模块的目录下面:
cp modexample.so /usr/lib/ganglia/modexample.so
5、修改/etc/ganglia/gmond.conf,在里面加入下面这些配置:
modules {
  module {
name = "example_module"
path = 
"/usr/lib/ganglia/modexample.so" 
Param RandomMax {
  Value = 75
}
Param ConstantValue {
  Value = 25
}
  }
}
/* Define Collection Groups */ 
collection_group { 
  collect_every = 10 
  time_threshold = 50 
  metric { 
name = "Random_Numbers"
value_threshold = 30.0 
  } 
}
collection_group { 
  collect_once = yes 
  time_threshold = 20 
  metric { 
name = "Constant_Number"
  } 
}
6、然后你重启gmond,过几分钟后,应该可以从前台看到这些数据了。
    查看gmond加载了哪些模块:
   gmond -m

自定义的python模块 
这里有一个例子:http://ganglia.wiki.sourceforge.net/ganglia_gmond_python_modules,模块的代码为(temp.py):
def temp_handler(name):
    acpi_file = "/proc/acpi/thermal_zone/THRM/temperature"
 
    try:
        f = open(acpi_file, 'r')
 
    except IOError:
        return 0
 
    for l in f:
        line = l.split()
 
    return int(line[1])
 
def metric_init(params):
    global descriptors
 
    d1 = {'name': 'temp',
        'call_back': temp_handler,
        'time_max': 90,
        'value_type': 'uint',
        'units': 'C',
        'slope': 'both',
        'format': '%u',
        'description': 'Temperature of host',
        'groups': 'health'}
 
    descriptors = [d1]
 
    return descriptors
 
def metric_cleanup():
    '''Clean up the metric module.'''
    pass
 
#This code is for debugging and unit testing
if __name__ == '__main__':
    metric_init(None)
    for d in descriptors:
        v = d['call_back'](d['name'])
        print 'value for %s is %u' % (d['name'],  v)
    python模块不用编译,直接把它拷贝到:/usr/lib/ganglia/python_modules目录下面。如果没有这个目录就建一个。
cp temp.py /usr/lib/ganglia/python_modules/
    然后在gmond.conf加入下面这些配置:
modules {
    module {
      name = "python_module"
      path = "/usr/lib/ganglia/modpython.so"
      params = "/usr/lib/ganglia/python_modules"
    }
}
modules {
  module {
    name = "temp"
    language = "python"
    param RandomMax {
      value = 600
    }
    param ConstantValue {
      value = 112
    }
  }
}
 
collection_group {
  collect_every = 10
  time_threshold = 50
  metric {
    name = "temp"
    title = "Temperature"
    value_threshold = 70
  }
}
你也可以在/etc/ganglia下面建立一个conf.d的目录,把那些python模块都加到下面,然后用Include加进来:
 Include(‘/etc/ganglia/conf.d/*.pyconf’)
然后重启gmond,就可以看到数据了。 
  评论这张
 
阅读(2410)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018