zoukankan      html  css  js  c++  java
  • 监控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 requests
    
    class RedisStats:
        redis_cli = '/data/redis/bin/redis-cli'
        stat_regex = re.compile(ur'(w+):([0-9]+.?[0-9]*)
    ')
    
        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)
            return dict(self.stat_regex.findall(info))
    
    def main():
        timestamp = int(time.time())
        step = 60
        
        p = []
        
        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') as f:
        data = f.read().replace('
    ','')
        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 in monit_keys:
            if key == 'keyspace_hit_ratio':
                try:
                    value = float(stats['keyspace_hits'])/(int(stats['keyspace_hits']) + int(stats['keyspace_misses']))
                except ZeroDivisionError:
                    value = 0
            elif key == 'mem_fragmentation_ratio':
                value = float(stats[key])
            else:
                try:
                    value = int(stats[key])
                except:
                    continue
    
            i = {
                '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: method
        try:
            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"}' % connection
    if __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()
  • 相关阅读:
    关于获取系统平台下的根目录名,分隔符等等
    AlineTransform 的应用
    网上书店例子(JSP和JavaBean)
    在Servlet中实现永久计数器思想
    关于TOmcat的一些小小的知识
    Java 编程基础,应用与实例
    日历类显示多一行
    使用UPnP连接远程交易服务(翻译)
    涂鸦板代码
    网站
  • 原文地址:https://www.cnblogs.com/fengjian2016/p/5979020.html
Copyright © 2011-2022 走看看