动态监控zookeeper服务节点变动(附zkUI使用)

一、动态监控服务器节点变动——脚本编写

1、定义一个监控标记类

public class ListenerParam {
   public static int flag=0;//标记作用,用于判断线程执行情况
 public static long start =0;//记录开始时间
 public static Vector<Long> vector=new Vector<Long>();//存储各个线程获取节点变动的时间
 
}

2、编写监控线程

public class ListenerThread extends Thread{
 public ZkClient zk;
 public String nodeName;
 public ListenerThread(String nodeName, ZkClient zk)
    {
       this.zk=zk;
 this.nodeName=nodeName;
 }
 public void run(){     
        //监控指定节点变动
 zk.subscribeDataChanges(nodeName, new IZkDataListener() {
            //节点change
 public void handleDataChange(String s, Object o) throws Exception {
// //计算时间间隔
// long time = System.currentTimeMillis() - ListenerParam.start;
// ListenerParam.vector.addElement(time);

 }
            //节点删除
 public void handleDataDeleted(String s) throws Exception {
                //计算时间间隔
 long time = System.currentTimeMillis() - ListenerParam.start;
 ListenerParam.vector.addElement(time);
 }
        });
 //监控指定节点下的子节点变动,仅能监控儿子节点
 if(zk.exists(nodeName)){//判断节点是否存在
 if (!zk.getChildren(nodeName).equals(null)){//节点存在

 zk.subscribeChildChanges(nodeName, new IZkChildListener() {
                    //子节点变动
 public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception {
                            //计算时间间隔
// long time = System.currentTimeMillis() - ListenerParam.start;
// ListenerParam.vector.addElement(time);
 }
                });
 }
        }else {
            System.out.println("节点:"+nodeName+"不存在");
 }
        System.out.println("listener start"+ListenerParam.flag);
 ListenerParam.flag++;//标记作用
 //保持持续监控
 while (true) {
            try {
            TimeUnit.SECONDS.sleep(1);
 } catch (InterruptedException e) {
            // TODO Auto-generated catch block
 e.printStackTrace();
 } } }}

3、调用线程,实时监控

public class ZK_Main {
 private ZkClient zk;
 private String nodeName = "/server3";//指定节点 添加需要在下面在设置子节点
 public void initTest() {
    zk = new ZkClient("172.31.7.170:2181");
 System.out.println("connection successful");
 }
 public void UpdateNode() throws InterruptedException {
 initTest();//启动连接
 //String path =nodeName+"/add3";//设置添加的节点
 for (int i=0;i<1000;i++){//启动一千个监控线程
 ListenerThread listenerThread =new ListenerThread(nodeName,zk);//调用线程 启动监控
 listenerThread.start();
 }

 while (true){//等待线程启动完成
 Thread.sleep(10);//避免堵塞
 if (ListenerParam.flag==1000){//一千个监控完全启动后
// ListenerParam.start=System.currentTimeMillis();//记录开始时间
// zk.createPersistent(nodeName);//执行添加二级节点
// zk.writeData(nodeName,"update0");//修改节点
// zk.delete(nodeName);

// ListenerParam.start=System.currentTimeMillis();//记录开始时间
 break;
 }}} 
public static void main(String[] args) throws InterruptedException {
  ZK_Main Main=new ZK_Main();

 try {
                    Main.UpdateNode();//调用添加方法
 } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
 e.printStackTrace();
 }
   while (true){//等待所有监控完成 捕捉 节点变动
 if (ListenerParam.vector.size()==1000){
                        System.out.println(ListenerParam.vector);
 //处理 获取max、min、avg,三个值
 long max=ListenerParam.vector.get(0);
 long min=ListenerParam.vector.get(0);
 long sum=ListenerParam.vector.get(0);
 for (int i=1;i<1000;i++){
      if (ListenerParam.vector.get(i)>max){max=ListenerParam.vector.get(i);}
      if (ListenerParam.vector.get(i)<min){ min=ListenerParam.vector.get(i);}
      sum=sum+ListenerParam.vector.get(i);
 }
      System.out.println("time_max:"+max);
 System.out.println("time_min:"+min);
 System.out.println("time_vag:"+sum/1000);

 break;
 }}}}
二、服务器环境部署

1、zookeeper部署

http://blog.csdn.net/lihao21/article/details/51778255

2、zkUI部署

 下载zkUI工具程序,修改配置文件  服务器zk地址

本地可以用开发软件直接运行,服务器需要打jar包,在运行

(打包jar    执行nohup java -jar zkui-2.0-SNAPSHOT-jar-with-dependencies.jar &)

更具自己配置的地址打开监控页面   例如172.31.7.170:9090(默认端口)

3、执行脚本  ,查看控制台及ZKUI监控页面情况

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值