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

  • Post author:
  • Post category: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()



版权声明:本文为weixin_39837352原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。