python监视twemproxy(代码片段)

author author     2022-12-27     589

关键词:

### Option: UserParameter
#       User-defined parameter to monitor. There can be several user-defined parameters.
#       Format: UserParameter=<key>,<shell command>
#       See 'zabbix_agentd' directory for examples.
#
# Mandatory: no
# Default:
# UserParameter=
UserParameter=redis_pool.discovery,/usr/bin/python /usr/local/zabbix/bin/twemproxy_pools_discovery.py
UserParameter=redis_server.discovery,/usr/bin/python /usr/local/zabbix/bin/twemproxy_pools_servers_discovery.py
UserParameter=nutcracker_info[*],/usr/bin/python /etc/zabbix/zabbix_agentd.d/twemproxy_status.py --metric $1
UserParameter=nutcracker_pool_info[*],/usr/bin/python /etc/zabbix/zabbix_agentd.d/twemproxy_status.py --metric $1 --poolname $2
UserParameter=nutcracker_server_info[*],/usr/bin/python /etc/zabbix/zabbix_agentd.d/twemproxy_status.py --metric $1 --poolserver $2
#! /usr/bin/env python
import socket
import json
import argparse
 
#
#    "service": "nutcracker",
#    "source": "gintama-taiwan-redis1",
#    "version": "0.4.0",
#    "uptime": 136873,
#    "timestamp": 1427168759,
#    "total_connections": 489,
#    "curr_connections": 7,
#    "gintama": 
#        "client_eof": 0,
#        "client_err": 420,
#        "client_connections": 0,
#        "server_ejects": 62,
#        "forward_error": 57,
#        "fragments": 0,
#        "192.168.100.68:6379": 
#            "server_eof": 1,
#            "server_err": 10,
#            "server_timedout": 0,
#            "server_connections": 1,
#            "server_ejected_at": 1427074216548518,
#            "requests": 627,
#            "request_bytes": 329980,
#            "responses": 617,
#            "response_bytes": 280709,
#            "in_queue": 0,
#            "in_queue_bytes": 0,
#            "out_queue": 0,
#            "out_queue_bytes": 0
#        ,
#
#
 
##"#REDIS_SERVER":"gintama@192.168.100.69:6381"
##"#REDIS_POOL":"gintama"
 
 
 
 
class NutcrackerServer(object):
    def __init__(self): 
        self.server = '127.0.0.1'
        self.port = '22222'
 
    def nutcracker_status(self):        
        conn = socket.create_connection((self.server, self.port))
        buf = True
        content = ''
 
        while buf:
            buf = conn.recv(4096)
            content += buf
        conn.close()
        self.data = json.loads(content)
 
    def nutcracker_info(self,base_metric):
        self.nutcracker_status()
        print self.data[base_metric]
 
    def nutcracker_pool_info(self,pool,pool_metric):
        self.nutcracker_status()
        print self.data[pool][pool_metric]
 
    def nutcracker_server_info(self,pool,redis_server,server_metric):
        self.nutcracker_status()
        print self.data[pool][redis_server][server_metric]
 
 
def parse_args():
    parser=argparse.ArgumentParser(description='Twemproxy monitoring tool with Zabbix!', argument_default=False)
    parser.add_argument('--metric',default='service',dest='metric',action='store',required=True,help='the twemproxy metric,such as uptime or version,etc')
    parser.add_argument("--poolname",default='gintama',dest='poolname',action='store',required=False,help='the twemproxy pool and server discoveried by zabbix')
    parser.add_argument("--poolserver",default='gintamaXXXX192.168.100.69:6380',dest='poolserver',action='store',required=False,help='the twemproxy pool and server discoveried by zabbix')
    args=parser.parse_args()
    return args
 
def main():
    args=parse_args()
    metric=''
    pool=''
    redis_server=''
    if args.metric:       
       metric=args.metric
    else:
       print "invalid metric" 
    if args.poolname:
       pool=args.poolname
    else:
       print "invalid pool name"
 
    if args.poolserver:
       pool=args.poolserver.split('XXXX')[0]
       redis_server=args.poolserver.split('XXXX')[1]
    else:
       print "invalid pool server"
 
    twemproxy = NutcrackerServer()
     
 
    if not metric:    
       print "invalid metric"
    elif metric in ["service","source","version","uptime","timestamp","total_connections","curr_connections"]:
#       print "nutcracker base information"
       twemproxy.nutcracker_info(metric)
    elif pool!="" and metric in ["client_eof","client_err","client_connections","server_ejects","forward_error","fragments"]:
#       print "nutcracker" + " " + pool + " " + "information"
       twemproxy.nutcracker_pool_info(pool,metric)
    elif pool and redis_server and metric in ["server_eof","server_err","server_timedout","server_connections","server_ejected_at","requests","request_bytes","responses","response_bytes","in_queue","in_queue_bytes","out_queue","out_queue_bytes"]:
#       print "nutcracker" + " " + pool + " " + redis_server + " " + "information"
       twemproxy.nutcracker_server_info(pool,redis_server,metric)
    else:
       print "invalid metric" 
 
 
 
if __name__ == '__main__':
     main()

python循环监视器(代码片段)

查看详情

python用于监视对象属性的工具(代码片段)

查看详情

python线程简单文件监视器(代码片段)

查看详情

python在python脚本中监视内存使用情况(代码片段)

查看详情

python设置数据包捕获的监视器接口设置(代码片段)

查看详情

twemproxy发送流程探索——剖析twemproxy代码正编

本文想要完成对twemproxy发送流程——msg_send的探索,对于twemproxy发送流程的数据结构已经在《twemproxy接收流程探索——剖析twemproxy代码正编》介绍过了,msg_send和msg_recv的流程大致类似。请在阅读代码时,查看注释,英文注释是作... 查看详情

vuewatch深度监视(代码片段)

watch:chartData:deep:true,handle(val)this.setOption(val);, 当chartData 数据比较复杂时,监视chartData数据变化需要用到深度监视 查看详情

pythonpythonarduino监视器(代码片段)

查看详情

sqlstmt事件监视器(代码片段)

查看详情

css状态监视器(代码片段)

查看详情

sql监视列表sqlschema(代码片段)

查看详情

sqldb2事件监视(代码片段)

查看详情

sqlstmt事件监视器(代码片段)

查看详情

sqldb2事件监视(代码片段)

查看详情

laravel项目利用twemproxy部署redis集群的完整步骤

Twemproxy是一个代理服务器,可以通过它减少Memcached或Redis服务器所打开的连接数。下面这篇文章主要给大家介绍了关于laravel项目利用twemproxy部署redis集群的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下前... 查看详情

htmlcampaign监视器ajax(代码片段)

查看详情

powershell文件监视对象事件帮助(代码片段)

查看详情

sql电子查询监视器(代码片段)

查看详情