背景
最近正在想法做一个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=