Ganglia 安装和使用

1、安装路径规划

ganglia安装路径 /usr/local/ganglia

2、安装依赖包

yum -y install apr-devel  python-devel pcre-devel  pkgconfig rrdtool-devel rrdtool-python libconfuse-devel  libconfuse expat-devel zlib-devel

3、安装CK (服务端和客户端都要装)

git clone https://github.com/concurrencykit/ck
./configure --prefix=/usr/ && make && make install

4、安装ganglia服务端

git clone https://github.com/ganglia/monitor-core.git
./bootstrap
CK_LIBS=-L/usr/lib/ CK_CFLAGS=-I/usr/include/ ./configure --prefix=/usr/local/gmetad --with-gmetad&&make&&make install

5、修改配置文件gmetad.conf

setuid_username  "www"
rrd_rootdir "/usr/local/gmetad/rrds"

赋予权限

chwnn -R www:www /usr/local/gmetad/rrds

6、部署ganalia web服务

nginx和php配置就不说了,这里主要注意到是把nginx和php用户都要修改为www启动

git clone https://github.com/ganglia/ganglia-web.git "/var/webroot/"
cd /var/webroot/ganalia

把下面选项修改

cp conf_default.php.in conf_default.php
cat conf_default.php
$conf['gweb_confdir'] = $conf['gweb_root'];
$conf['gmetad_root'] = "/usr/local/gmetad";

然后在/var/webroot/ganalia 创建compiled和cache目录

mkdir dwoo/compiled  dwoo/cache
chown -R www:www *

7、安装客户端

git clone https://github.com/ganglia/monitor-core.git
./bootstrap
CK_LIBS=-L/usr/lib/ CK_CFLAGS=-I/usr/include/ ./configure --prefix=/usr/local/gmond&&make&&make install

./sbin/gmond -t > etc/gmond.conf

8、日志调试

编辑etc/gmond.conf 打开debug_level =1

9、脚本自定义

cat /usr/local/gmond/lib64/ganglia/python_modules/fs_web_current.py
#!/usr/bin/python
#coding:utf-8
__author__ = 'Slevin'

import commands
from IPy import IP

fsIp1="11.8.0.0/16"
fsIp2="11.1.0.0/16"

def web_current_handle(name):
    count=0
  #  global count,fsIp1,fsIp2
    ip1=IP(fsIp1)
    ip2=IP(fsIp2)
    cmd="netstat -tn | grep :17553 | grep ESTABLISHED | awk '{print $5}' | awk -F : '{print $1}'"
    output=commands.getoutput(cmd)
    #print output
    for line in str(output).split('\n'):
        if line in ip1 or line in ip2:
    #       print line
           count=count+1
    return int(count)

def metric_init(params):
    #global fsIp1,fsIp2
    global descriptors
    if params:
       if params.has_key("fsIp1"):
            fsIp1 = str(params["fsIp1"])
            print fsIp1
       if params.has_key("fsIp2"):
            fsIp2 = str(params["fsIp2"])
    tmpDict = {
           'name':'fs_web_current',
           'call_back':web_current_handle,
           'value_type':'uint',
           'units':'req/s',
           'slope':'both',
           'format':'%u',
           'description':'fo shan video current',
           'groups':'web_current'
          }
    descriptors = [tmpDict]
    return descriptors

def metric_cleanup():
    pass

if __name__=='__main__':
  metric_init(None)
  for d in descriptors:
    v = d['call_back'](d['name'])
    print "value for %s is %d" % (d['name'],v)

metric_init(params) 这个函数必须要有的,返回的必须是一个列表

cat /usr/local/gmond/etc/conf.d/fs_web_current.pyconf
[root@96956_video-01 conf.d]# cat fs_web_current.pyconf
modules {
  module {
    name = "fs_web_current"
    language = "python"
  param fsIp1{
        value = "11.8.0.0/16"
    }
  param fsIp2{
        value = "11.1.0.0/16"
    }
  }
}
collection_group {
 collect_every = 10
  time_threshold = 50
  metric {
    name = "fs_web_current"
    title = "fs_web_current"
    value_threshold = 50
  }
}

启动之后 观察日志有无报错,如果有报错,打开gmond调试模式进行调试

你可能感兴趣的:(python,ganglia)