Let's Go!

07_memcached的运行状态监控

上一篇 / 下一篇  2011-05-09 13:35:20 / 个人分类:JAVA学习&编程相关

 

 

memcached的运行状态监控
http://jlsfwq.blog.51cto.com/818700/165628

用cacti监控memcached的性能
http://blogold.chinaunix.net/u/12479/showart_1160088.html


监控宝:
http://www.jiankongbao.com/

 

用cacti监控memcached的性能

源代码下载和安装配制方法见官方站点: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正常添加就行了,不用加端口号。

 

 

 

 

 


TAG:

 

评分:0

我来说两句

Open Toolbar