分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比

时间:2023-03-09 08:49:39
分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比

               分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比

                                           作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

  

  JMX是用来远程监控Java应用的框架,这个也可以用来监控其他的Java应用。JMX使用起来也很简单。当然还有一款比较优秀的监控工具就是ZkWeb,本片博客都会简单介绍部署方式。

  JMX官方地址:http://zookeeper.apache.org/doc/r3.4.14/zookeeperJMX.html

  ZkWeb的github地址:https://github.com/zhitom/zkweb

  分布式协调服务Zookeeper集群搭建:https://www.cnblogs.com/yinzhengjie/p/10747747.html

一.zookeeper服务开启JMX监控(不推荐使用该方式)

1>.修改zookeeper的启动脚本

   ..........
#ZOOMAIN="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=$JMXLOCALONLY org.apache.zookeeper.server.quorum.QuorumPeerMain"          #将ZOOMAIN的默认配置注释掉!
ZOOMAIN="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false #是否建立远程连接,false可远程建立连接
-Djava.rmi.server.hostname=127.0.0.1 #zookeeper地址
-Dcom.sun.management.jmxremote.port= #JMX连接端口,并不是zookeeper端口,也不能和zookeeper端口冲突
-Dcom.sun.management.jmxremote.ssl=true # 是否ssl连接,如果JMX无法ssl连接上zookeeper,需要改为false
-Dcom.sun.management.jmxremote.authenticate=true # 是否开启访问权限,如果设置为true的话,需要指定access和password存放路径,就在下面两行(如果不配置安全认真删除当前行和下面2行即可!)
-Dcom.sun.management.jmxremote.access.file=/yinzhengjie/softwares/zookeeper-3.4./conf/jmxremote.access # 设置访问权限,需要指定对应的路径,下面哪个文件是指定具体的用户名和密码
-Dcom.sun.management.jmxremote.password.file=/yinzhengjie/softwares/zookeeper-3.4./conf/jmxremote.password
-Dzookeeper.jmx.log4j.disable=true # 是否开日志
org.apache.zookeeper.server.quorum.QuorumPeerMain"
   ..........

分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比

2>.在“Dcom.sun.management.jmxremote.access.file”和“Dcom.sun.management.jmxremote.password.file”对应的目录下创建相应的文件,结合上面咱们写的文件名称

[root@node101.yinzhengjie.org.cn ~]# cat /yinzhengjie/softwares/zookeeper-3.4./conf/jmxremote.access
monitorRole readonly
controlRole readwrite create javax.management.monitor.*,javax.management.timer.* unregister
[root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# cat /yinzhengjie/softwares/zookeeper-3.4.14/conf/jmxremote.access

[root@node101.yinzhengjie.org.cn ~]# cat /yinzhengjie/softwares/zookeeper-3.4./conf/jmxremote.password
monitorRole
controlRole
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# cat /yinzhengjie/softwares/zookeeper-3.4.14/conf/jmxremote.password

[root@node101.yinzhengjie.org.cn ~]# ll /yinzhengjie/softwares/zookeeper-3.4./conf/ | grep jmxremote
-rw-r--r--. root root Apr : jmxremote.access
-rw-r--r--. root root Apr : jmxremote.password
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# chmod /yinzhengjie/softwares/zookeeper-3.4./conf/jmxremote.*
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll /yinzhengjie/softwares/zookeeper-3.4./conf/ | grep jmxremote
-rw-------. root root Apr : jmxremote.access
-rw-------. root root Apr : jmxremote.password
[root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# chmod 600 /yinzhengjie/softwares/zookeeper-3.4.14/conf/jmxremote.*            #权限配置,这个步骤一定要做!

  需要注意的是,如果上面修改的2个文件的权限配置为600,会抛出异常,如下图所示:

[root@node102.yinzhengjie.org.cn ~]# cat zookeeper.out
Error: Password file read access must be restricted: /yinzhengjie/softwares/zookeeper-3.4./conf/jmxremote.password
sun.management.AgentConfigurationError
at sun.management.jmxremote.ConnectorBootstrap.checkPasswordFile(ConnectorBootstrap.java:)
at sun.management.jmxremote.ConnectorBootstrap.startRemoteConnectorServer(ConnectorBootstrap.java:)
at sun.management.Agent.startAgent(Agent.java:)
at sun.management.Agent.startAgent(Agent.java:)
[root@node102.yinzhengjie.org.cn ~]#

[root@node102.yinzhengjie.org.cn ~]# cat zookeeper.out

分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比

3>.同步配置文件到其他节点中并重启zookeeper集群

[root@node101.yinzhengjie.org.cn ~]# scp -rp /yinzhengjie/softwares/zookeeper-3.4./ node102.yinzhengjie.org.cn:/yinzhengjie/softwares/
......
WatchedEvent.java % .2MB/s :
VerGen.java % .8MB/s :
ClientCnxn.java % 60KB .7MB/s :
AtomicFileOutputStream.java % .7MB/s :
Time.java % .9MB/s :
IOUtils.java % .4MB/s :
PathUtils.java % .6MB/s :
PathTrie.java % .1MB/s :
Watcher.java % .8MB/s :
SaslClientCallbackHandler.java % .8MB/s :
StatsTrack.java % .1MB/s :
SaslServerPrincipal.java % .9MB/s :
ServerAdminClient.java % 11KB .7MB/s :
AsyncCallback.java % 12KB .1MB/s :
ManagedUtil.java % .5MB/s :
ZKMBeanInfo.java % .1MB/s :
CommonNames.java % .8MB/s :
MBeanRegistry.java % .5MB/s :
OpResult.java % .4MB/s :
ZooKeeper.java % 73KB .8MB/s :
Environment.java % .3MB/s :
Op.java % 11KB .4MB/s :
ZooKeeperTestable.java % .2MB/s :
ClientCnxnSocketNIO.java % 15KB .4MB/s :
StaticHostProvider.java % .3MB/s :
FourLetterWordMain.java % .9MB/s :
HostProvider.java % .5MB/s :
ZooKeeperSaslClient.java % 20KB .7MB/s :
ConnectStringParser.java % .5MB/s :
Testable.java % .8MB/s :
MultiTransactionRecord.java % .7MB/s :
ZooKeeperMain.java % 32KB .4MB/s :
ClientWatchManager.java % .8MB/s :
MultiResponse.java % .9MB/s :
pom.template % .5MB/s :
NOTICE.txt % .3MB/s :
lastRevision.bat % .5MB/s :
LICENSE.txt % 12KB .6MB/s :
overview.html % .1MB/s :
lastRevision.sh % .7MB/s :
log4j-1.2..LICENSE.txt % 11KB .4MB/s :
jline-0.9..LICENSE.txt % .5MB/s :
slf4j-1.7..LICENSE.txt % .5MB/s :
README.txt % .1KB/s :
zookeeper_3.1.1.xml % 113KB .3MB/s :
zookeeper_3.4.14.xml % 204KB .5MB/s :
zookeeper-env.sh % .3MB/s :
update-zookeeper-env.sh % .8MB/s :
zookeeper % .3MB/s :
prerm % .8MB/s :
conffile % .5MB/s :
control % .0MB/s :
preinst % .0MB/s :
postrm % .2MB/s :
postinst % .9MB/s :
zookeeper % .0MB/s :
zookeeper.spec % .6MB/s :
log4j-1.2..LICENSE.txt % 11KB .4MB/s :
jline-0.9..LICENSE.txt % .5MB/s :
netty-3.10..Final.jar % 1262KB .0MB/s :
slf4j-api-1.7..jar % 40KB .1MB/s :
slf4j-1.7..LICENSE.txt % .0MB/s :
audience-annotations-0.5..jar % 20KB .2MB/s :
log4j-1.2..jar % 478KB .3MB/s :
slf4j-log4j12-1.7..jar % 12KB .6MB/s :
README.txt % .9KB/s :
zookeeper_3.1.1.xml % 113KB .6MB/s :
zookeeper_3.4.14.xml % 204KB .7MB/s :
jline-0.9..jar % 85KB .5MB/s :
[root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# scp -rp /yinzhengjie/softwares/zookeeper-3.4.14/ node102.yinzhengjie.org.cn:/yinzhengjie/softwares/        #拷贝过去是把文件的属性也拷贝哟!

[root@node101.yinzhengjie.org.cn ~]# scp -rp /yinzhengjie/softwares/zookeeper-3.4./ node103.yinzhengjie.org.cn:/yinzhengjie/softwares/
......
StatsTrack.java % .8MB/s :
SaslServerPrincipal.java % .7MB/s :
ServerAdminClient.java % 11KB .2MB/s :
AsyncCallback.java % 12KB .2MB/s :
ManagedUtil.java % .9MB/s :
ZKMBeanInfo.java % .1MB/s :
CommonNames.java % .1MB/s :
MBeanRegistry.java % .4MB/s :
OpResult.java % .8MB/s :
ZooKeeper.java % 73KB .7MB/s :
Environment.java % .1MB/s :
Op.java % 11KB .1MB/s :
ZooKeeperTestable.java % .7MB/s :
ClientCnxnSocketNIO.java % 15KB .8MB/s :
StaticHostProvider.java % .8MB/s :
FourLetterWordMain.java % .7MB/s :
HostProvider.java % .2MB/s :
ZooKeeperSaslClient.java % 20KB .3MB/s :
ConnectStringParser.java % .3MB/s :
Testable.java % .5MB/s :
MultiTransactionRecord.java % .5MB/s :
ZooKeeperMain.java % 32KB .8MB/s :
ClientWatchManager.java % .9MB/s :
MultiResponse.java % .7MB/s :
pom.template % .3MB/s :
NOTICE.txt % .1MB/s :
lastRevision.bat % .4MB/s :
LICENSE.txt % 12KB .3MB/s :
overview.html % .6MB/s :
lastRevision.sh % .8MB/s :
log4j-1.2..LICENSE.txt % 11KB .7MB/s :
jline-0.9..LICENSE.txt % .0MB/s :
slf4j-1.7..LICENSE.txt % .1MB/s :
README.txt % .6KB/s :
zookeeper_3.1.1.xml % 113KB .5MB/s :
zookeeper_3.4.14.xml % 204KB .3MB/s :
zookeeper-env.sh % .3KB/s :
update-zookeeper-env.sh % .6MB/s :
zookeeper % .1MB/s :
prerm % .5MB/s :
conffile % .3MB/s :
control % .7MB/s :
preinst % .8MB/s :
postrm % .2MB/s :
postinst % .1MB/s :
zookeeper % .9MB/s :
zookeeper.spec % .8MB/s :
log4j-1.2..LICENSE.txt % 11KB .9MB/s :
jline-0.9..LICENSE.txt % .3MB/s :
netty-3.10..Final.jar % 1262KB .0MB/s :
slf4j-api-1.7..jar % 40KB .0MB/s :
slf4j-1.7..LICENSE.txt % .5MB/s :
audience-annotations-0.5..jar % 20KB .0MB/s :
log4j-1.2..jar % 478KB .9MB/s :
slf4j-log4j12-1.7..jar % 12KB .6MB/s :
README.txt % .0KB/s :
zookeeper_3.1.1.xml % 113KB .8MB/s :
zookeeper_3.4.14.xml % 204KB .9MB/s :
jline-0.9..jar % 85KB .1MB/s :
[root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# scp -rp /yinzhengjie/softwares/zookeeper-3.4.14/ node103.yinzhengjie.org.cn:/yinzhengjie/softwares/

[root@node101.yinzhengjie.org.cn ~]# cat /usr/local/bin/xzk.sh
#!/bin/bash
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie
#EMAIL:y1053419035@qq.com #判断用户是否传参
if [ $# -ne ];then
echo "无效参数,用法为: $0 {start|stop|restart|status}"
exit
fi #获取用户输入的命令
cmd=$ #定义函数功能
function zookeeperManger(){
case $cmd in
start)
echo "启动服务"
remoteExecution start
;;
stop)
echo "停止服务"
remoteExecution stop
;;
restart)
echo "重启服务"
remoteExecution restart
;;
status)
echo "查看状态"
remoteExecution status
;;
*)
echo "无效参数,用法为: $0 {start|stop|restart|status}"
;;
esac
} #定义执行的命令
function remoteExecution(){
for (( i= ; i<= ; i++ )) ; do
tput setaf
echo ========== node${i}.yinzhengjie.org.cn zkServer.sh $ ================
tput setaf
ssh node${i}.yinzhengjie.org.cn "source /etc/profile ; zkServer.sh $1"
done
} #调用函数
zookeeperManger
[root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# cat /usr/local/bin/xzk.sh

[root@node101.yinzhengjie.org.cn ~]# xzk.sh restart
重启服务
========== node101.yinzhengjie.org.cn zkServer.sh restart ================
ZooKeeper JMX enabled by default
Using config: /yinzhengjie/softwares/zookeeper-3.4./bin/../conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: /yinzhengjie/softwares/zookeeper-3.4./bin/../conf/zoo.cfg
Stopping zookeeper ... no zookeeper to stop (could not find file /home/yinzhengjie/zookeeper/zookeeper_server.pid)
ZooKeeper JMX enabled by default
Using config: /yinzhengjie/softwares/zookeeper-3.4./bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
========== node102.yinzhengjie.org.cn zkServer.sh restart ================
ZooKeeper JMX enabled by default
Using config: /yinzhengjie/softwares/zookeeper-3.4./bin/../conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: /yinzhengjie/softwares/zookeeper-3.4./bin/../conf/zoo.cfg
Stopping zookeeper ... no zookeeper to stop (could not find file /home/yinzhengjie/zookeeper/zookeeper_server.pid)
ZooKeeper JMX enabled by default
Using config: /yinzhengjie/softwares/zookeeper-3.4./bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
========== node103.yinzhengjie.org.cn zkServer.sh restart ================
ZooKeeper JMX enabled by default
Using config: /yinzhengjie/softwares/zookeeper-3.4./bin/../conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: /yinzhengjie/softwares/zookeeper-3.4./bin/../conf/zoo.cfg
Stopping zookeeper ... no zookeeper to stop (could not find file /home/yinzhengjie/zookeeper/zookeeper_server.pid)
ZooKeeper JMX enabled by default
Using config: /yinzhengjie/softwares/zookeeper-3.4./bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# xzk.sh restart

[root@node101.yinzhengjie.org.cn ~]# xzk.sh status
查看状态
========== node101.yinzhengjie.org.cn zkServer.sh status ================
ZooKeeper JMX enabled by default
Using config: /yinzhengjie/softwares/zookeeper-3.4./bin/../conf/zoo.cfg
Mode: follower
========== node102.yinzhengjie.org.cn zkServer.sh status ================
ZooKeeper JMX enabled by default
Using config: /yinzhengjie/softwares/zookeeper-3.4./bin/../conf/zoo.cfg
Mode: leader
========== node103.yinzhengjie.org.cn zkServer.sh status ================
ZooKeeper JMX enabled by default
Using config: /yinzhengjie/softwares/zookeeper-3.4./bin/../conf/zoo.cfg
Mode: follower
[root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# xzk.sh status

[root@node101.yinzhengjie.org.cn ~]# ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 172.30.1.101: *:*
LISTEN *: *:*
LISTEN 192.168.122.1: *:*
LISTEN *: *:*
LISTEN 127.0.0.1: *:*
LISTEN *: *:*     #我们可以看到JMX端口被启用啦!
LISTEN *: *:*
LISTEN *: *:*
LISTEN *: *:*
LISTEN ::: :::*
LISTEN ::: :::*
[root@node101.yinzhengjie.org.cn ~]#

   参考链接1:https://blog.csdn.net/u013673976/article/details/47321067

  参考链接2:https://blog.csdn.net/zk_chs/article/details/84776095#

  按照网上的说法我们就可以使用JConsole等工具可以访问该我们配置的JMX端口,可惜我测试了一个下午都没有搞定!不知道是不是我机器有问题,大家是否遇到跟我一样的问题呢?(还好这种监控我没有弄出来,于是我找到了另外的一款监控工具,基于Web的)

  

分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比

二.zookeeper的web监控工具之ZkWeb(官方地址:https://github.com/zhitom/zkweb

1>.下载“ZkWeb For Zookeeper”的jar包

  下载地址:https://github.com/zhitom/zkweb/releases

分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比

2>.运行ZkWeb的jar包(默认启动端口是8099)

[root@node101.yinzhengjie.org.cn ~]# ll
total
-rw-r--r--. root root Apr : zkWeb-v1.2.1.jar
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# java -jar zkWeb-v1.2.1.jar
::19.229 [main] INFO com.yasenagat.zkweb.ZkWebSpringBootApplication - applicationYamlFileName(application-zkweb.yaml)=file:/root/zkWeb-v1.2.1.jar!/BOOT-INF/classes!/application-zkweb.yaml . ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.2.RELEASE) [-- :: INFO main StartupInfoLogger.java:] c.y.zkweb.ZkWebSpringBootApplication --> Starting ZkWebSpringBootApplication vv1.2.1 on node101.yinzhengjie.org.cn with PID (/root/zkWeb-v1.2.1.jar started by root in /root)
[-- :: INFO main SpringApplication.java:] c.y.zkweb.ZkWebSpringBootApplication --> The following profiles are active: local
[-- :: INFO main AbstractApplicationContext.java:] o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext --> Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@39ba5a14: startup date [Fri Apr :: CST ]; root of context hierarchy
[-- :: INFO main DefaultListableBeanFactory.java:] o.s.b.f.s.DefaultListableBeanFactory --> Overriding bean definition for bean 'requestMappingHandlerAdapter' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=; dependencyCheck=; autowireCandidate=true; primary=false; factoryBeanName=zkSpringBootConfiguration; factoryMethodName=requestMappingHandlerAdapter; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [com/yasenagat/zkweb/util/ZkSpringBootConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=; dependencyCheck=; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration; factoryMethodName=requestMappingHandlerAdapter; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]]
[-- :: INFO main TomcatWebServer.java:] o.s.b.w.e.tomcat.TomcatWebServer --> Tomcat initialized with port(s): (http)
[-- :: INFO main DirectJDKLog.java:] o.a.coyote.http11.Http11NioProtocol --> Initializing ProtocolHandler ["http-nio-8099"]
[-- :: INFO main DirectJDKLog.java:] o.a.catalina.core.StandardService --> Starting service [Tomcat]
[-- :: INFO main DirectJDKLog.java:] o.a.catalina.core.StandardEngine --> Starting Servlet Engine: Apache Tomcat/8.5.
[-- :: INFO localhost-startStop- DirectJDKLog.java:] o.a.c.core.AprLifecycleListener --> The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
[-- :: INFO localhost-startStop- DirectJDKLog.java:] o.a.c.c.C.[Tomcat].[localhost].[/] --> Initializing Spring embedded WebApplicationContext
[-- :: INFO localhost-startStop- ServletWebServerApplicationContext.java:] o.s.web.context.ContextLoader --> Root WebApplicationContext: initialization completed in ms
[-- :: INFO localhost-startStop- ServletRegistrationBean.java:] o.s.b.w.s.ServletRegistrationBean --> Servlet dispatcherServlet mapped to [/]
[-- :: INFO localhost-startStop- ServletRegistrationBean.java:] o.s.b.w.s.ServletRegistrationBean --> Servlet webServlet mapped to [/console/*]
[2019-04-26 16:44:23 INFO localhost-startStop-1 ServletRegistrationBean.java:185] o.s.b.w.s.ServletRegistrationBean --> Servlet cacheServlet mapped to [/cache/*]
[2019-04-26 16:44:23 INFO localhost-startStop-1 AbstractFilterRegistrationBean.java:244] o.s.b.w.s.FilterRegistrationBean --> Mapping filter: 'characterEncodingFilter' to: [/*]
[2019-04-26 16:44:23 INFO localhost-startStop-1 AbstractFilterRegistrationBean.java:244] o.s.b.w.s.FilterRegistrationBean --> Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
[2019-04-26 16:44:23 INFO localhost-startStop-1 AbstractFilterRegistrationBean.java:244] o.s.b.w.s.FilterRegistrationBean --> Mapping filter: 'httpPutFormContentFilter' to: [/*]
[2019-04-26 16:44:23 INFO localhost-startStop-1 AbstractFilterRegistrationBean.java:244] o.s.b.w.s.FilterRegistrationBean --> Mapping filter: 'requestContextFilter' to: [/*]
[2019-04-26 16:44:23 INFO MLog-Init-Reporter Slf4jMLog.java:212] com.mchange.v2.log.MLog --> MLog clients using slf4j logging.
[2019-04-26 16:44:23 INFO main Slf4jMLog.java:212] com.mchange.v2.c3p0.C3P0Registry --> Initializing c3p0-0.9.5.2 [built 08-December-2015 22:06:04 -0800; debug? true; trace: 10]
[2019-04-26 16:44:24 INFO main Slf4jMLog.java:212] c.m.v.c.i.AbstractPoolBackedDataSource --> Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, contextClassLoaderSource -> caller, dataSourceName -> 1br8b51a2on62pc1idrz68|5bd03f44, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> org.h2.Driver, extensions -> {}, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, forceSynchronousCheckins -> false, forceUseNamedDriverClass -> false, identityToken -> 1br8b51a2on62pc1idrz68|5bd03f44, idleConnectionTestPeriod -> 60, initialPoolSize -> 10, jdbcUrl -> jdbc:h2:file:~/.h2/zkweb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=TRUE;FILE_LOCK=SOCKET, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 60, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 20, maxStatements -> 100, maxStatementsPerConnection -> 0, minPoolSize -> 5, numHelperThreads -> 3, preferredTestQuery -> null, privilegeSpawnedThreads -> false, properties -> {user=******, password=******}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ]
[2019-04-26 16:44:24 ERROR main ZkCfgManagerImpl.java:406] c.y.zkweb.util.ZkCfgManagerImpl --> isTableOk Failed,A problem occurred while trying to acquire a cached PreparedStatement in a background thread.
[2019-04-26 16:44:24 ERROR main ZkCfgManagerImpl.java:70] c.y.zkweb.util.ZkCfgManagerImpl --> create table (CREATE TABLE IF NOT EXISTS ZK(ID VARCHAR PRIMARY KEY, DESC VARCHAR, CONNECTSTR VARCHAR, SESSIONTIMEOUT VARCHAR))...
[2019-04-26 16:44:24 ERROR main ZkCfgManagerImpl.java:76] c.y.zkweb.util.ZkCfgManagerImpl --> create table OK !ret=0
[2019-04-26 16:44:24 ERROR main ZkCfgManagerImpl.java:81] c.y.zkweb.util.ZkCfgManagerImpl --> table select check OK!
[2019-04-26 16:44:24 INFO main ZkCache.java:41] com.yasenagat.zkweb.util.ZkCache --> zk info size=0
[2019-04-26 16:44:24 INFO main ZkCfgManagerImpl.java:436] c.y.zkweb.util.ZkCfgManagerImpl --> afterPropertiesSet init 0 zk instance
[2019-04-26 16:44:24 INFO main RequestMappingHandlerAdapter.java:574] o.s.w.s.m.m.a.RequestMappingHandlerAdapter --> Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@39ba5a14: startup date [Fri Apr 26 16:44:20 CST 2019]; root of context hierarchy
[2019-04-26 16:44:25 INFO main AbstractUrlHandlerMapping.java:373] o.s.w.s.h.SimpleUrlHandlerMapping --> Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[-- :: INFO main AbstractHandlerMethodMapping.java:] o.s.w.s.m.m.a.RequestMappingHandlerMapping --> Mapped "{[/zkcfg/queryZkCfgById]}" onto public java.util.Map<java.lang.String, java.lang.Object> com.yasenagat.zkweb.web.ZkCfgController.queryZkCfg(java.lang.String)
[-- :: INFO main AbstractHandlerMethodMapping.java:] o.s.w.s.m.m.a.RequestMappingHandlerMapping --> Mapped "{[/zkcfg/queryZkCfg]}" onto public java.util.Map<java.lang.String, java.lang.Object> com.yasenagat.zkweb.web.ZkCfgController.queryZkCfg(int,int,java.lang.String)
[-- :: INFO main AbstractHandlerMethodMapping.java:] o.s.w.s.m.m.a.RequestMappingHandlerMapping --> Mapped "{[/zkcfg/addZkCfg],produces=[text/html;charset=UTF-8]}" onto public java.lang.String com.yasenagat.zkweb.web.ZkCfgController.addZkCfg(java.lang.String,java.lang.String,java.lang.String)
[-- :: INFO main AbstractHandlerMethodMapping.java:] o.s.w.s.m.m.a.RequestMappingHandlerMapping --> Mapped "{[/zkcfg/updateZkCfg],produces=[text/html;charset=UTF-8]}" onto public java.lang.String com.yasenagat.zkweb.web.ZkCfgController.updateZkCfg(java.lang.String,java.lang.String,java.lang.String,java.lang.String)
[-- :: INFO main AbstractHandlerMethodMapping.java:] o.s.w.s.m.m.a.RequestMappingHandlerMapping --> Mapped "{[/zkcfg/delZkCfg],produces=[text/html;charset=UTF-8]}" onto public java.lang.String com.yasenagat.zkweb.web.ZkCfgController.delZkCfg(java.lang.String)
[-- :: INFO main AbstractHandlerMethodMapping.java:] o.s.w.s.m.m.a.RequestMappingHandlerMapping --> Mapped "{[/zk/queryZnodeInfo],produces=[text/html;charset=UTF-8]}" onto public java.lang.String com.yasenagat.zkweb.web.ZkController.queryzNodeInfo(java.lang.String,org.springframework.ui.Model,java.lang.String)
[-- :: INFO main AbstractHandlerMethodMapping.java:] o.s.w.s.m.m.a.RequestMappingHandlerMapping --> Mapped "{[/zk/queryZKOk]}" onto public java.lang.String com.yasenagat.zkweb.web.ZkController.queryZKOk(org.springframework.ui.Model,java.lang.String)
[-- :: INFO main AbstractHandlerMethodMapping.java:] o.s.w.s.m.m.a.RequestMappingHandlerMapping --> Mapped "{[/zk/queryZKJMXInfo],produces=[application/json;charset=UTF-8]}" onto public java.util.List<com.yasenagat.zkweb.util.ZkManager$PropertyPanel> com.yasenagat.zkweb.web.ZkController.queryZKJMXInfo(java.lang.String,java.lang.String,javax.servlet.http.HttpServletResponse)
[-- :: INFO main AbstractHandlerMethodMapping.java:] o.s.w.s.m.m.a.RequestMappingHandlerMapping --> Mapped "{[/zk/saveData],produces=[text/html;charset=UTF-8]}" onto public java.lang.String com.yasenagat.zkweb.web.ZkController.saveData(java.lang.String,java.lang.String,java.lang.String)
[-- :: INFO main AbstractHandlerMethodMapping.java:] o.s.w.s.m.m.a.RequestMappingHandlerMapping --> Mapped "{[/zk/createNode],produces=[text/html;charset=UTF-8]}" onto public java.lang.String com.yasenagat.zkweb.web.ZkController.createNode(java.lang.String,java.lang.String,java.lang.String)
[-- :: INFO main AbstractHandlerMethodMapping.java:] o.s.w.s.m.m.a.RequestMappingHandlerMapping --> Mapped "{[/zk/deleteNode],produces=[text/html;charset=UTF-8]}" onto public java.lang.String com.yasenagat.zkweb.web.ZkController.deleteNode(java.lang.String,java.lang.String)
[-- :: INFO main AbstractHandlerMethodMapping.java:] o.s.w.s.m.m.a.RequestMappingHandlerMapping --> Mapped "{[/zk/queryZnode]}" onto public java.util.List<com.yasenagat.zkweb.model.Tree> com.yasenagat.zkweb.web.ZkController.query(java.lang.String,java.lang.String,java.lang.String)
[-- :: INFO main AbstractHandlerMethodMapping.java:] o.s.w.s.m.m.a.RequestMappingHandlerMapping --> Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
[-- :: INFO main AbstractHandlerMethodMapping.java:] o.s.w.s.m.m.a.RequestMappingHandlerMapping --> Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
[-- :: INFO main AbstractUrlHandlerMapping.java:] o.s.w.s.h.SimpleUrlHandlerMapping --> Root mapping to handler of type [class org.springframework.web.servlet.mvc.ParameterizableViewController]
[-- :: INFO main AbstractUrlHandlerMapping.java:] o.s.w.s.h.SimpleUrlHandlerMapping --> Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[2019-04-26 16:44:25 INFO main AbstractUrlHandlerMapping.java:373] o.s.w.s.h.SimpleUrlHandlerMapping --> Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[2019-04-26 16:44:25 INFO main AbstractUrlHandlerMapping.java:373] o.s.w.s.h.SimpleUrlHandlerMapping --> Mapped URL path [/resources/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[2019-04-26 16:44:25 INFO main MBeanExporter.java:433] o.s.j.e.a.AnnotationMBeanExporter --> Registering beans for JMX exposure on startup
[2019-04-26 16:44:25 INFO main DirectJDKLog.java:180] o.a.coyote.http11.Http11NioProtocol --> Starting ProtocolHandler ["http-nio-8099"]
[2019-04-26 16:44:25 INFO main DirectJDKLog.java:180] o.a.tomcat.util.net.NioSelectorPool --> Using a shared selector for servlet write/read
[2019-04-26 16:44:25 INFO main DirectJDKLog.java:180] o.a.c.c.C.[Tomcat].[localhost].[/] --> Initializing Spring FrameworkServlet 'dispatcherServlet'
[2019-04-26 16:44:25 INFO main FrameworkServlet.java:494] o.s.web.servlet.DispatcherServlet --> FrameworkServlet 'dispatcherServlet': initialization started
[2019-04-26 16:44:25 INFO main FrameworkServlet.java:509] o.s.web.servlet.DispatcherServlet --> FrameworkServlet 'dispatcherServlet': initialization completed in 16 ms
[2019-04-26 16:44:25 INFO main TomcatWebServer.java:206] o.s.b.w.e.tomcat.TomcatWebServer --> Tomcat started on port(s): 8099 (http) with context path ''
[2019-04-26 16:44:25 INFO main StartupInfoLogger.java:59] c.y.zkweb.ZkWebSpringBootApplication --> Started ZkWebSpringBootApplication in 6.499 seconds (JVM running for 7.016)
[2019-04-26 16:48:35 INFO http-nio-8099-exec-8 ZkCfgController.java:36] c.y.zkweb.web.ZkCfgController --> Fri Apr 26 16:48:35 CST 2019
[2019-04-26 16:48:35 INFO http-nio-8099-exec-8 ZkCfgManagerImpl.java:285] c.y.zkweb.util.ZkCfgManagerImpl --> whereSq=desc like '%%'

[root@node101.yinzhengjie.org.cn ~]# java -jar zkWeb-v1.2.1.jar

分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比

3>.成功添加一个节点

分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比

4>.查看添加节点的信息

分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比

5>.我们可以使用他提供的web界面操作zookeeper集群哟!

分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比