Zookeeper 监控原型开发

原文地址:http://blog.csdn.net/hackerwin7/article/details/43985049

背景

最近正在想法做一个zookeeper监控的方案,首选第一步就是如何拿到可用于监控zookeeper的监控指标。目前从zookeeper的documentation上面了解到:The ZooKeeper service can be monitored in one of two primary ways; 1) the command port through the use of 4 letter words and 2) JMX. See the appropriate section for your environment/requirements.目前从上面的文档中得到的信息来看主要有两种方式,一种是哦那个过4 letter words的zookeeper commands的方式实现监控(又称为获取监控zookeeper的指标);另外一种则是通过JMX的接口实现监控。但是后一种JMX的方式需要修改所监控server的启动脚本zkServer.sh 的启动内容,让zookeeper原本支持本地JMX变为支持远程JMX连接,这样我们才可以通过JMX Client拿到相应的监控指标,而第一种监控方式似乎不需要做出这样的修改。所以最终我采用第一种方式实现zookeeper的监控原型。

设计

这里我采用socket的方式: 
- 向指定ip和port 发送4 letter words commands 
- 接收返回的数据信息 
- 将返回的数据信息解析与划分(源数据信息是一堆信息) 
- 将解析划分的带有一定格式的处理后的数据返回(这就是我们要的监控指标了)

监控指标

下面我们来梳理一下返回了哪些监控指标:

conf:
clientPort:客户端端口号 
dataDir:数据文件目录
dataLogDir:日志文件目录  
tickTime:间隔单位时间
maxClientCnxns:最大连接数  
minSessionTimeout:最小session超时
maxSessionTimeout:最大session超时  
serverId:id  
initLimit:初始化时间  
syncLimit:心跳时间间隔  
electionAlg:选举算法 默认3  
electionPort:选举端口  
quorumPort:法人端口  
peerType:未确认

cons:
ip=ip
port=端口
queued=所在队列
received=收包数
sent=发包数
sid=session id
lop=最后操作
est=连接时间戳
to=超时时间
lcxid=最后id(未确认具体id)
lzxid=最后id(状态变更id)
lresp=最后响应时间戳
llat=最后/最新 延时
minlat=最小延时
maxlat=最大延时
avglat=平均延时


crst:
重置所有连接


dump:
session id : znode path  (1对多   ,  处于队列中排队的session和临时节点)


envi:
zookeeper.version=版本
host.name=host信息
java.version=java版本
java.vendor=供应商
java.home=jdk目录
java.class.path=classpath
java.library.path=lib path
java.io.tmpdir=temp目录
java.compiler=<NA>
os.name=Linux
os.arch=amd64
os.version=2.6.32-358.el6.x86_64
user.name=hhz
user.home=/home/hhz
user.dir=/export/servers/zookeeper-3.4.6


ruok:
查看server是否正常
imok=正常


srst:
重置server状态


srvr:
Zookeeper version:版本
Latency min/avg/max: 延时
Received: 收包
Sent: 发包
Connections: 连接数
Outstanding: 堆积数
Zxid: 操作id
Mode: leader/follower
Node count: 节点数

stat:
Zookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMT
Clients:
 /192.168.147.102:56168[1](queued=0,recved=41,sent=41)
 /192.168.144.102:34378[1](queued=0,recved=54,sent=54)
 /192.168.162.16:43108[1](queued=0,recved=40,sent=40)
 /192.168.144.107:39948[1](queued=0,recved=1421,sent=1421)
 /192.168.162.16:43112[1](queued=0,recved=54,sent=54)
 /192.168.162.16:43107[1](queued=0,recved=54,sent=54)
 /192.168.162.16:43110[1](queued=0,recved=53,sent=53)
 /192.168.144.98:34702[1](queued=0,recved=41,sent=41)
 /192.168.144.98:34135[1](queued=0,recved=61,sent=65)
 /192.168.162.16:43109[1](queued=0,recved=54,sent=54)
 /192.168.147.102:56038[1](queued=0,recved=165313,sent=165314)
 /192.168.147.102:56039[1](queued=0,recved=165526,sent=165527)
 /192.168.147.101:44124[1](queued=0,recved=162811,sent=162812)
 /192.168.147.102:39271[1](queued=0,recved=41,sent=41)
 /192.168.144.107:45476[1](queued=0,recved=166422,sent=166423)
 /192.168.144.103:45100[1](queued=0,recved=54,sent=54)
 /192.168.162.16:43133[0](queued=0,recved=1,sent=0)
 /192.168.144.107:39945[1](queued=0,recved=1825,sent=1825)
 /192.168.144.107:39919[1](queued=0,recved=325,sent=325)
 /192.168.144.106:47163[1](queued=0,recved=17891,sent=17891)
 /192.168.144.107:45488[1](queued=0,recved=166554,sent=166555)
 /172.17.36.11:32728[1](queued=0,recved=54,sent=54)
 /192.168.162.16:43115[1](queued=0,recved=54,sent=54)

Latency min/avg/max: 0/0/599
Received: 224869
Sent: 224817
Connections: 23
Outstanding: 0
Zxid: 0x68000af707
Mode: follower
Node count: 101081

(同上面的命令整合的信息)


wchs:
connectsions=连接数
watch-paths=watch节点数
watchers=watcher数量


wchc:
session id 对应 path

wchp:
path 对应 session id

mntr:
zk_version=版本
zk_avg_latency=平均延时
zk_max_latency=最大延时
zk_min_latency=最小延时
zk_packets_received=收包数  
zk_packets_sent=发包数
zk_num_alive_connections=连接数
zk_outstanding_requests=堆积请求数
zk_server_state=leader/follower 状态
zk_znode_count=znode数量
zk_watch_count=watch数量
zk_ephemerals_count=临时节点(znode)
zk_approximate_data_size=数据大小
zk_open_file_descriptor_count=打开的文件描述符数量
zk_max_file_descriptor_count=最大文件描述符数量
zk_followers=follower数量
zk_synced_followers=同步的follower数量
zk_pending_syncs=准备同步数

项目

目前写了一个demo的原型出来,完成上面所说的设计流程。 
github:https://github.com/hackerwin7/zookeeper-four-letter

使用

安装:源码用maven编译,到target下找到相应jar包。 
使用(两种使用方式): 
基于命令行:

java -cp zookeeper-four-letter-1.0.jar pers.hw7.zk.monitor.zookeeper.FourLetterCommands 192.168.144.110 2181 mntr

基于API:

import pers.hw7.zk.monitor.deployer.Controller;
import pers.hw7.zk.monitor.utils.metrics.MntrMetrics;

public class ControllerTest {
    public static void main(String[] args) throws Exception {
        Controller cont = new Controller("192.168.144.110", 2181);
        MntrMetrics metrics = cont.getMNTR();
        System.out.println(metrics.toString());

    }
}

这样就能获得相应的指标了。

数据格式

一共有13个 监控指标 , 代码中以类似ConfMetrics这样的类存储详细的指标信息: 
- 普通的指标信息获取如: metrics.avgLatency 这样直接获取普通变量 
- 具有1对多的连接信息的: 一般以 List 或者 Map



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值