您的位置:首页 > 产品设计 > UI/UE

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

2018-02-05 15:35 363 查看
一、动态监控服务器节点变动——脚本编写

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监控页面情况
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: