MyCat多实例LLD监控

 

 

Discovery_Mycat.py 

#!/usr/bin/python2.6
# coding: utf-8

import sys
import json
import subprocess
from xml.etree import ElementTree as ET


def mycat_info(path):
    """
    根据路径读取Mycat应用的配置信息
    return: {'password': 'materialcenter@137', 'managerPort': '9081', 'user': 'material_center_mycat'}
    """
    mycat_dict = {}
    info = ["managerPort", "password"]
    root = ET.parse(path).getroot()
    for node in root.findall('system/property'):
        if node.get("name") == 'managerPort':
             mycat_dict["managerPort"] = node.text

    for node in root.findall('user'):
        mycat_dict["user"] = node.get('name')
        for i in node:
            if i.get("name") == "password":
                mycat_dict["password"] = i.text
                break
        break
    return mycat_dict


def discovery_mycat( name=None):
    """
    发现运行状态的Mycat应用
    """
    mycat_dic = {}
    mycat_check = {}
    for i in path_list:
        mycat_name = i.split('/')[-1]
        mycat_path = '/'.join([i, 'conf/server.xml'])
        mycat_dic.setdefault("data", []).append({"{#MYCAT}": mycat_name})
        mycat_check[mycat_name] = mycat_info(mycat_path)

    if name is not None:
        return mycat_check[name]
    return json.dumps(mycat_dic, indent=4)


def cmd(item, **kwargs):
    """
    组合命令,返回符合条件的行数
    """
    parse_cmd = {
        "active": "mysql -u{user} -p{password} -P{managerPort} -h127.0.0.1 -N -e 'show @@datasource;'|awk '$7>30' |wc -l".format(**kwargs),
        "IDIL": "mysql -u{user} -p{password} -P{managerPort} -h127.0.0.1 -N -e 'show @@datasource;'|awk '$8>20' |wc -l".format(**kwargs)
    }

    print(parse_cmd[item])
    status = subprocess.Popen(parse_cmd[item], shell=True, stdout=subprocess.PIPE).stdout.read()
    return status.strip()

if __name__ == '__main__':
    result = subprocess.Popen("ps -ef |grep mycat", shell=True, stdout=subprocess.PIPE)
    result_list = result.stdout.read().split()
    path_list = [i.split('=')[1] for i in result_list if 'MYCAT_HOME' in i]
    
    if len(sys.argv) == 1:
        print(discovery_mycat())
    elif len(sys.argv) == 3:
        print(cmd(sys.argv[2], **discovery_mycat(sys.argv[1])))

 

 

zabbix配置

UserParameter=Discovery_Mycat,/usr/local/zabbix/bin/Discovery_Mycat.py

 

posted @ 2017-06-10 11:22  跟随心走  阅读(649)  评论(0)    收藏  举报