ganglia是采用yum的安装,因此安装相关内容路径可能不同,但是不影响插件的扩展编写;
本次介绍的扩展是采用python脚本进行扩展,因此监控节点上需要安装python的相关插件;
sudo yum -y install ganglia-gmond-python python-devel*
由于脚本要引入psutil的库,因此需要加载此模块,安装此模块需要首先按装gcc和pip
sudo yum -y install gcc python-pip
最后安装psutil模块
sudo pip install psutil
一般进入ganglia的python脚本模块,编写脚本
路径一般为: /usr/lib64/ganglia/python_modules,新建脚本编辑,vi tomcat_mem.py
#encoding=utf-8 import psutil import time import sys import commands #获取tomcat的id进程号 commandLine1="sudo ps -ef | grep tomcat | grep -v grep|grep -v python | awk '{print $2}'"; (status,pid)=commands.getstatusoutput(commandLine1) print pid dscriptors = list() def tomcat_res(name): p=psutil.Process(int(pid)) return int((p.memory_info()[0])) def metric_init(params): global descriptors d1 ={ "name":"tomcat_res", "call_back":tomcat_res, "time_max":90, "value_type":"uint", "units": "memory info", "slope":"both", "format":"%u", "description": "", "groups":"tomcat", } descriptors = [d1] return descriptors def metric_cleanup(): pass #This code is for debugging and unit testing if __name__=='__main__': metric_init('init') for d in descriptors: v=d["call_back"](d["name"]) print 'value for %s is %u '%(d["name"],v)
在到配置目录下,vi /etc/ganglia/conf.d/tomcat.pyconf,前提是已经配置好了modpython.conf
1 modules{ 2 module{ 3 name="tomcat_mem" 4 language="python" 5 } 6 } 7 8 collection_group{ 9 collect_every = 2 10 time_threshold =90 11 metric{ 12 name="tomcat_res" 13 title="tomcat memory" 14 value_threshold = 0 15 } 16 }
modpython.conf
1 /* 2 params - path to the directory where mod_python 3 should look for python metric modules 4 5 the "pyconf" files in the include directory below 6 will be scanned for configurations for those modules 7 */ 8 modules { 9 module { 10 name = "python_module" 11 path = "modpython.so" 12 params = "/usr/lib64/ganglia/python_modules" 13 } 14 } 15 16 include ("/etc/ganglia/conf.d/*.pyconf")
这个有一个缺点就是,tomcat挂了以后重启,ganglia就获取不到数据,需要重启gmond进程,原因目前未知;