zoukankan      html  css  js  c++  java
  • 通过python脚本和zabbix配合监控zookeeper的节点数

    通过python脚本和zabbix配合监控zookeeper的节点数
    
    需求描述:
    在日常zabbix监控zookeeper的时候,无法通过shell来获取zookeeper的具体节点信息,没有开放具体的接口,只能通过交互式的shell获取
    python提供了操作zookeeper的api,我们可以使用python脚本结合zabbix来监控zookeeper的服务端是否上线
    
    
    1.安装相关的依赖
    由于python客户端依赖c的客户端所以要先安装c版本的客户端
    cd /usr/local/src
    wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
    tar -zxvf zookeeper-3.4.6.tar.gz
    cd /usr/local/src/zookeeper-3.4.6/src/c
    ./configure  
    make   
    make install  
    
    # 验证是否成功,测试是否能够连上zookeeper
    [root@localhost c]# ./cli_mt 1.1.1.1:9181
    Watcher SESSION_EVENT state = CONNECTED_STATE
    Got a new session id: 0x35f2e9cf58103e6
    
    2.下载安装zkpython
    wget https://pypi.python.org/packages/source/z/zkpython/zkpython-0.4.2.tar.gz  
    tar -zxf zkpython-0.4.2.tar.gz
    cd zkpython-0.4.2
    python setup.py build
    python setup.py install
    
    # 加入环境变量
    # vim /etc/profile
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
    
    source /etc/profile
    或者
    
    # echo "/usr/local/lib" >> /etc/ld.so.conf  
    # /sbin/ldconfig  
    
    3.测试
    使用ipython访问zookeeper
    
    [root@localhost zkpython-0.4.2]# ipython
    Python 2.7.5 (default, Aug  4 2017, 00:39:18) 
    Type "copyright", "credits" or "license" for more information.
    
    IPython 5.5.0 -- An enhanced Interactive Python.
    ?         -> Introduction and overview of IPython's features.
    %quickref -> Quick reference.
    help      -> Python's own help system.
    object?   -> Details about 'object', use 'object??' for extra details.
    
    import zookeeper as zoo
    # 初始化连接到集群  
    zk = zoo.init("1.1.1.1:2181")
      
    # 获取所有节点
    zoo.get_children(zk, "/", None)
    # 获取voice-server所有节点
    nodes = zoo.get_children(zk, "/sdk/voice/server/info", None)
    # 获取zookeeper节点中voice-server的个数
    print len(nodes)
    
    
    # 具体代码
    
    #!/usr/bin/python
    #encoding:utf-8
    
    import zookeeper as zoo
    import sys
    
    # 设置zookeeper的日志等级,避免python输出大量无用信息
    zoo.set_debug_level(zoo.LOG_LEVEL_ERROR) 
    
    DEFAULT_TIMEOUT = 30000
    
    class zookServer():
        def __init__(self, timeout=DEFAULT_TIMEOUT):
            # 初始化连接到集群
            self.timeout = timeout
            self.zk = zoo.init("ip1:2181,ip2:2181,ip3:2181")
    
        # 获取zookeeper所有的节点长度
        def get_children_len(self, _path, watcher = None):
            self.connected = True
            # 获取voice-server所有节点
            nodes = zoo.get_children(self.zk, _path, watcher)
            # 获取zookeeper节点中voice-server的个数
            return len(nodes)
    
    if __name__ == "__main__":
        z = zookServer()
        print z.get_children_len('/sdk/voice/server/info')
  • 相关阅读:
    Linux_磁盘管理
    Linux_安装软件包
    Linux_文件打包,压缩,解压
    Linux_系统管理命令(工作中经常使用到的)
    The method queryForMap(String, Object...) from the type JdbcTemplate refers to the missing type DataAccessException
    org.springframework.beans.factory.BeanDefinitionStoreException错误
    Java中动态代理工作流程
    Spring之<context:property-placeholder location="classpath:... "/>标签路径问题
    数据库连接问题之:Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database!
    java环境变量的配置
  • 原文地址:https://www.cnblogs.com/reblue520/p/8075090.html
Copyright © 2011-2022 走看看