Chinaunix首页 | 论坛 | 博客
  • 博客访问: 528603
  • 博文数量: 81
  • 博客积分: 8020
  • 博客等级: 中将
  • 技术积分: 1085
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-08 10:36
文章分类

全部博文(81)

文章存档

2010年(3)

2009年(25)

2008年(53)

我的朋友

分类: LINUX

2008-08-30 14:57:51

源代码下载和安装配制方法见官方站点:http://dealnews.com/developers/cacti/memcached.html
文中提到如果memcahed没有运行在默认的11211端口,可以修改Data Input Methods->Memcached - Statistics->Input String中加入-p 端口号,但是如果一台服务器运行了多个memcached,存在多个端口,这种方法就不行了,因为它只能传递一个端口号。
 
经过测试,我想到了解决的方法。
我的思路是:端口号由hostname来传递,做法是在添加设备的时候,在Hostname中加上-port,如:192.168.0.1-11011,然后在memcached.py脚本中从hostname分离出hostname和端口号,我修改后的源代码是:
#!/usr/bin/python
import sys
import memcache
from optparse import OptionParser
stats = {'total_items': 0, 'bytes_written': 0, 'uptime': 0, 'bytes': 0,
         'cmd_get': 0, 'curr_items': 0, 'curr_connections': 0, 'connection_structures': 0,
         'limit_maxbytes': 0, 'rusage_user': 0.0, 'total_connections': 0, 'cmd_set': 0,
         'time': 0, 'get_misses': 0, 'bytes_read': 0, 'rusage_system': 0.0, 'get_hits': 0}
parser = OptionParser(usage="usage: %prog [-h] [-p PORT] HOSTNAME1 HOSTNAME2 ...\nTotals will be returned for multiple HOSTNAME arguments.")
parser.set_defaults(port = "11211")
parser.add_option("-p", "--port", dest="port", metavar="PORT",
                  help="default memcached port [default: 11211]")
(options, args) = parser.parse_args()
hosts = []
subStr = '-'
if (args):
    for host in args:
        if subStr in host:
           host,port = host.split('-')
           hosts.append("%s:%s" % (host, port));
        else:

           hosts.append("%s:%s" % (host, options.port));
else:
    parser.error("At least one HOSTNAME is required.")
    sys.exit(1)
mc = memcache.Client(hosts, debug=0)
mem_stats = mc.get_stats()
if (not mem_stats):
        sys.exit()
if (len(mem_stats) > 1):
    for mstat in mem_stats:
        for key, val in stats.iteritems():
            if (key == 'rusage_user' or key == 'rusage_system'):
                stats[key] += float(mstat[1][key])
            else:
                stats[key] += int(mstat[1][key])
               
else:
    mstat = mem_stats[0][1];
    for key, val in stats.iteritems():
        if (key == 'rusage_user' or key == 'rusage_system'):
            stats[key] = float(mstat[key])
        else:
            stats[key] = int(mstat[key])
           
for stat, count in stats.iteritems():
    print "%s:%s" % (stat, count),
 
 
其中红色为我加的代码,这样的话数据输入方法和图形模板都不用改
如果是默认的11211端口,那么在cacti中Hostname正常添加就行了,不用加端口号。
阅读(1525) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~