python监控redis主从_监控redis python脚本

#!/bin/env python

#-*- coding:utf-8 -*-import json

import time

import socket

import os

import re

import sys

import commands

import urllib2, base64

import requestsclassRedisStats:

redis_cli= '/data/redis/bin/redis-cli'stat_regex= re.compile(ur'(\w+):([0-9]+\.?[0-9]*)\r')

def __init__(self,port='6379',host='127.0.0.1',status='info'):

self.cmd= '%s -h %s -p %s %s' %(self.redis_cli, host, port,status)

def stats(self):

info=commands.getoutput(self.cmd)returndict(self.stat_regex.findall(info))

def main():

timestamp= int(time.time())

step= 60p=[]

monit_keys=[

('connected_clients','GAUGE'),

('blocked_clients','GAUGE'),

('used_memory','GAUGE'),

('used_memory_rss','GAUGE'),

('mem_fragmentation_ratio','GAUGE'),

('total_commands_processed','COUNTER'),

('rejected_connections','COUNTER'),

('expired_keys','COUNTER'),

('evicted_keys','COUNTER'),

('keyspace_hits','COUNTER'),

('keyspace_misses','COUNTER'),

('keyspace_hit_ratio','GAUGE'),

]

insts_list= [ '/etc/redis/6379.conf']

with open('./cfg.json') asf:

data= f.read().replace('\n','')

jsonlist=json.loads(data)

hostpoint= jsonlist['hostname']

port= "6979"metric= "redis"endpoint= '%s' %(hostpoint)

tags= 'port=%s' %(port)

conn=RedisStats()

stats=conn.stats()for key,vtype inmonit_keys:if key == 'keyspace_hit_ratio':try:

value= float(stats['keyspace_hits'])/(int(stats['keyspace_hits']) + int(stats['keyspace_misses']))

except ZeroDivisionError:

value= 0elif key== 'mem_fragmentation_ratio':

value= float(stats[key])else:try:

value= int(stats[key])

except:continuei={'Metric': '%s.%s' %(metric, key),'Endpoint': endpoint,'Timestamp': timestamp,'Step': step,'Value': value,'CounterType': vtype,'TAGS': tags

}

p.append(i)

print json.dumps(p, sort_keys=True,indent=4)

method= "POST"handler=urllib2.HTTPHandler()

opener=urllib2.build_opener(handler)

url= 'http://127.0.0.1:1988/v1/push'request= urllib2.Request(url, data=json.dumps(p) )

request.add_header("Content-Type",'application/json')

request.get_method=lambda: methodtry:

connection=opener.open(request)

except urllib2.HTTPError,e:

connection=e

# check. Substitute with appropriate HTTP code.if connection.code == 200:

print connection.read()else:

print'{"err":1,"msg":"%s"}' %connectionif __name__ == '__main__':

# proc= commands.getoutput('ps -ef|grep %s|grep -v grep|wc -l' % os.path.basename(sys.argv[0]))

#if int(proc) < 5:

# main()

main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值