zookeeper监控znode

package zookeeper;

import java.util.List;

import org.apache.zookeeper.KeeperException;

import org.apache.zookeeper.WatchedEvent;

import org.apache.zookeeper.Watcher;

import org.apache.zookeeper.Watcher.Event.EventType;

import org.apache.zookeeper.ZooKeeper;

/**

* 众所周知,ZooKeeper中的ZNode是树形结构, 现在我需要给/app1结点设置watcher,监听/app1下增减、删除和修改的结点,

* 并将相应的事件使用log4j记录到日志文件中。ZNode的变化可以直接通过event.getType来获取 使用zk.exists(PATH,

* wc);来为PATH结点设置watcher,所有结点都可以使用wc做watcher。

*

* @author 小明 2015.5.23

*/

public class WatchClient implements Runnable {

//

private List<String> nodeList;

private static final String path = "/app";

private static ZooKeeper zk;

public static void main(String[] args) throws Exception {

WatchClient client = new WatchClient();

Thread thread = new Thread(client);

thread.start();

}

public WatchClient() throws Exception {

zk = new ZooKeeper("192.168.1.97:2181", 99999, new Watcher() {

public void process(WatchedEvent event) {

System.out.println(event.getPath() + event.getType());

}

});

}

/**

* 设置watch线程

*/

public void run() {

Watcher watcher = new Watcher() {

public void process(WatchedEvent event) {

//System.out.println("__________");

// 结点数据改变前的节点列表

List<String> nodeListBefore = nodeList;

// 主结点的数据发生改变时

if (event.getType() == EventType.NodeDataChanged) {

System.out.println("Node data changed:" + event.getPath());

}

if (event.getType() == EventType.NodeDeleted) {

System.out.println("Node data deleted:" + event.getPath());

}

if (event.getType() == EventType.NodeCreated) {

System.out.println("Node data created:" + event.getPath());

}

// 获取跟新后的nodeList

try {

nodeList=zk.getChildren(event.getPath(), false);

} catch (KeeperException e) {

System.out.println(event.getPath()+" has no child, deleted.");

} catch (InterruptedException e) {

e.printStackTrace();

}

// 增加结点

List<String> nodeListNow = nodeList;

if (nodeListBefore.size() < nodeListNow.size()) {

for (String str : nodeListNow) {

if (!nodeListBefore.contains(str)) {

System.out.println("Node created:" + event.getPath() + "/" + str);

}

}

}

// 删除结点

if (nodeListBefore.size() > nodeListNow.size()) {

for (String str : nodeListNow) {

if (!nodeListBefore.contains(str)) {

System.out.println("Node deleted:" + event.getPath() + "/" + str);

}

}

}

}

};

/**

* 监控Path下的节点

*/

while (true) {

try {

zk.exists(path, watcher);// 所要监控的主结点

} catch (Exception e) {

}

try {

nodeList = zk.getChildren(path, watcher);

} catch (Exception e) {

e.printStackTrace();

}

// 对path下每一个结点都设置一个watcher

for (String nodeName : nodeList) {

try {

zk.exists(path + "/" + nodeName, watcher);

} catch (Exception e) {

e.printStackTrace();

}

}

try {

//System.out.println("hhhh");

Thread.sleep(3000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

时间: 2024-12-28 16:03:06

zookeeper监控znode的相关文章

zookeeper监控告警

一.ZooKeeper简介 ZooKeeper作为分布式系统中重要的组件,目前在业界使用越来越广泛,ZooKeeper的使用场景非常多,以下是几种典型的应用场景: l  数据发布与订阅(配置中心) l  负载均衡 l  命名服务(Naming Service) l  分布式通知/协调 l  集群管理与Master选举 l  分布式锁 zk环境搭建 这里不详细说明,提供详细blog说明. Zookeeper集群搭建:http://www.cnblogs.com/linuxbug/p/4840137

ZooKeeper监控(taokeeper)

http://jm.taobao.org/?p=1450 在公司内部,有不少应用已经强依赖zookeeper,zookeeper的工作状态直接影响它们的正常工作.目前开源世界中暂没有一个比较成熟的zookeeper-monitor, 于是开始zookeeper监控这块工作. 目前zookeeper-monitor能做哪些事情,讲到这个,首先来看看哪些因素对zookeeper正常工作比较大的影响: 用于zookeeper写日志的目录要有足够大小,并且强烈建议在单独的磁盘(挂载点)上,这是影响ZK性

ZooKeeper监控

http://jm-blog.aliapp.com/?p=1450 在公司内部,有不少应用已经强依赖zookeeper,zookeeper的工作状态直接影响它们的正常工作.目前开源世界中暂没有一个比较成熟的zookeeper-monitor, 于是开始zookeeper监控这块工作. 目前zookeeper-monitor能做哪些事情,讲到这个,首先来看看哪些因素对zookeeper正常工作比较大的影响: 用于zookeeper写日志的目录要有足够大小,并且强烈建议在单独的磁盘(挂载点)上,这是

Zookeeper监控(Zabbix)

一直在弄监控,这些个中间件Zookeeper.Kafka......,平时也只知道一点皮毛,也就搭建部署过,没有真正的用过,一般都是大数据的同学在用,作为运维人员我需要对他做一个监控,由于对他不是知根知底,监控哪些指标就真的是一个大头了.经过不断的在网上搜集,看别人是怎么做的,做了以下一个基本的监控. 一.效果图 二.指标 监控最重要的就是数据,一切皆数据,有了数据想怎么监控就怎么监控.那么哪些数据是重要的?这些数据怎么获取?监控指标尤其重要. Zookeeper的监控指标(通过网上收集,等实际

zookeeper 监控 —— 阿里taokeeper

TaoKeeper是一个围绕ZooKeeper做的监控与报表系统. 主要功能如下: 能够统计ZK集群连接数,Watcher数目 ,节点数等系列信息,并按一定规则进行一些聚合操作; 能够通过设置一些阈值来达到监控报警的效果; 能够按天按周进行ZK运行状 况的报表展现; 其中ZK实时运行状态的统计和机器存活性的检查功能能够帮助ZK的运维人员进行排错,及时发现系统隐患,确保故障的及时恢复. http://sofar.blog.51cto.com/353572/1298468/ http://www.i

Zookeeper监控的作用

当服务越来越多.规模越来越大时,相应的机器数量也越来越大,单靠人工来管理和维护服务及地址的配置地址信息,已经非常困难了,而且.依赖单一的硬件负载均衡设备或者使用LVS.nginx等软件方案进行路由和负载均衡调度.单点故障的问题也開始凸显,一旦服务路由或者负载均衡server宕机.依赖他的全部服务均将失效. 此时,须要一个可以动态注冊和获取服务信息的地方.来统一管理服务名称和其对应的server列表信息,称之为服务配置中心,服务提供者在启动时,将其提供的服务名称.server地址注冊到服务配置宗新

ZooKeeper的Znode剖析

版权声明:本文为博主原创文章,转载请注明出处: http://blog.csdn.net/lihao21 目录(?)[-] 类型 持久节点 临时节点 顺序节点 节点的数据 节点的属性 版本号 事务ID 时间戳 参考资料 在ZooKeeper中,节点也称为znode.由于对于程序员来说,对zk的操作主要是对znode的操作,因此,有必要对znode进行深入的了解. ZooKeeper采用了类似文件系统的的数据模型,其节点构成了一个具有层级关系的树状结构.例如,图1展示了zk节点的层级树状结构.  

通过TelnetClient获取Zookeeper监控数据

如果想编写一个监控Zookeeper的Java程序,可以通过两种方式 : (1)通过TelnetClient发送命令 ,命令的详解参考:http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html#sc_zkCommands (2)通过JMX,说明请参考:http://zookeeper.apache.org/doc/trunk/zookeeperJMX.html 本文通过一个简单的例子来演示如何通过TelnetClient发送mntr命令获

ZooKeeper的znode说明和znode状态

1.znode znode的官方说明:http://zookeeper.apache.org/doc/r3.4.12/zookeeperProgrammers.html#sc_zkDataModel_znodes ZooKeeper以一种类似于文件系统的树形数据结构实现名称空间.名称空间中的每个节点都是一个znode.znode和文件系统的路径不一样,在文件系统中,路径只是一个名称,不包含数据.而znode不仅是一个路径,还携带数据. 此外,znode还维护了包括版本号和时间戳的状态信息.通过版