文中提到如果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) |