监控与管理dubbo服务

Dubbo 是阿里多年前开源的一套服务治理框架,在众多互联网企业里应用广泛。本文介绍了一些如何监控与管理dubbo服务。使用的工具与 《dubbox 的各种管理和监管》 大致相同,本文更侧重于命令细节与实践。

首先参考 《服务治理框架dubbo上手指南》 ,实现自己的 HelloService 服务。在此基础上运行 Provider.java 启动服务,接下来就可以开始管理工作啦。让我们来下载dubbo的源码并安装:

git clone https://github.com/alibaba/dubbo.git dubbo
cd ~/dubbo
mvn clean install -Dmaven.test.skip

telnet

Dubbo支持使用telnet来查看服务状态。下面让我们来试一下:

telnet localhost 19880

敲下回车便能看到 dubbo> 的提示符了。以下命令可以看到服务列表、服务的方法详细信息列表和服务地址列表:

ls
ls -l org.ggg.hello.service.HelloService
ps -l

以下命令可以跟踪服务方法的调用情况:

trace org.ggg.hello.service.HelloService

这时会看见光标停止住了。运行 Consumer.java 来消费服务,就可以看到跟踪结果啦。详细的命令可以参考 Telnet命令参考手册 。若是服务端没有开启监控,使用telnet命令对查看甚至配置服务来说,是依赖最少最简便的方式。

简易监控中心

先前安装过的dubbo项目里包含了 dubbo-monitor-simple 的包,解压之:

tar zxvf dubbo-simple/dubbo-monitor-simple/target/dubbo-monitor-simple-2.5.4-SNAPSHOT-assembly.tar.gz

配置 dubbo.properties 为自己的zk服务地址: 192.168.33.88:2181

# 操作系统是Linux的话
sed -i "s/multicast:\/\/224.5.6.7:1234/zookeeper:\/\/192.168.33.88:2181/" dubbo-monitor-simple-2.5.4-SNAPSHOT/conf/dubbo.properties
# 操作系统是OS X的话(接下来的sed命令以OS X为例)
sed -i "" "s/multicast:\/\/224.5.6.7:1234/zookeeper:\/\/192.168.33.88:2181/" dubbo-monitor-simple-2.5.4-SNAPSHOT/conf/dubbo.properties

简易监控中心以文件的方式记录监控数据。创建基本文件夹并运行 start.sh 启动简易监控中心:

mkdir ~/monitor
dubbo-monitor-simple-2.5.4-SNAPSHOT/bin/start.sh

访问 http://localhost:8080/ 便能看到简易监控中心的首页了:

Applications 里可以看到我们先前启动的 hello-world-appsimple-monitor 自己。可见 simple-monitor 也是一个dubbo服务,把自己注册到 dubbo.properties 里指定的配置中心里去。为了接收到监控数据,需要在dubbo服务端打开监控。在 provider.xml 文件里加入下面这行配置,然后重新启动dubbo服务:

<dubbo:monitor protocol="registry" />

过一会儿就能看到监控的统计信息和图标了:

而运行 ls ~/monitor/ 也能看到简易监控中心所生成的文件夹 chartsstatistics 。如果迟迟没有生成这些信息,有一种可能是在多(虚拟)网卡的情况下,simple-monitor绑定到了错误的IP地址去了。万一真是如此,在 dubbo.properties 里增加一行 dubbo.protocol.host 的配置即可。

运行 stop.sh 停止简易监控中心服务:

dubbo-monitor-simple-2.5.4-SNAPSHOT/bin/stop.sh

管理控制台

Dubbo为服务治理提供了管理控制台。这是一个webapp,可以很轻松地运行在web容器中。经由源代码安装后便会生成 dubbo-admin-2.5.4-SNAPSHOT.war 文件,将其部署在tomcat容器中即可。这里用docker启动一个tomcat 7:

docker run -d -p 8080:8080 --name=tomcat tomcat:7
docker cp dubbo-admin/target/dubbo-admin-2.5.4-SNAPSHOT.war tomcat:/usr/local/tomcat/webapps/
docker exec tomcat sed -i "s/127.0.0.1/192.168.33.88/" /usr/local/tomcat/webapps/dubbo-admin-2.5.4-SNAPSHOT/WEB-INF/dubbo.properties
docker restart tomcat

文件 dubbo.properties 里配置了zookeep的地址,所以用sed将其替换为自己的zk服务地址: 192.168.33.88 。里面还配置了root账户和guest账户的密码。默认即为 rootguest 。访问 http://localhost:8080/dubbo-admin-2.5.4-SNAPSHOT/ 并输入 rootroot ,就能看到管理控制台的首页了:

输入 hello 进行查询,便能看到我们的服务了:

可以在此页面进行各种服务治理操作。更详细的资料,请参考 运维手册

运行以下命令删除tomcat容器:

docker rm -f tomcat

dubbo-monitor

简易监控中心和管理控制台的页面风格看起来还停留在上个世纪。韩都衣舍提供了一个 dubbo-monitor ,除了更加现代化的页面,还用数据库代替了简易监控中心写文件的方式。除了mysql,还支持 mongo 。那我们先来下载代码:

cd ..
git clone https://github.com/handuyishe/dubbo-monitor
cd dubbo-monitor

然后启动一个mysql数据库实例:

docker run -d --name=mysql -e MYSQL_ROOT_PASSWORD=raycool -v `pwd`/sql/create.sql:/create.sql mysql:5.7.12
docker exec -it mysql mysql -uroot -praycool

创建数据库和表(可能需要等数据库启动一小会儿之后才能连上去):

CREATE DATABASE dubbokeeper DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
USE dubbokeeper;
SOURCE /create.sql;
SHOW TABLES;
exit

修改配置文件 application.properties 并打包(目前版本中spring的引用有问题,所以也需要修改 pom.xml ):

MYSQL_IP=`docker exec -it mysql hostname -i | sed 's/.$//'`
sed -i "" -e "s/dubbo.registry.address.*/dubbo.registry.address=zookeeper:\/\/192.168.33.88:2181/" -e "s/default/${MYSQL_IP}/" src/main/resources/application.properties
sed -i "" s/4.1.6.RELEASE/3.2.9.RELEASE/" pom.xml
mvn clean package

启动dubbo-monitor:

docker run -d -p 8080:8080 -v `pwd`/target/dubbo-monitor-x.war:/usr/local/tomcat/webapps/dubbo-monitor-x.war --name=tomcat tomcat:7

访问 http://localhost:8080/dubbo-monitor-x/ 并输入 adminadmin ,就能看到dubbo-monitor的首页了:

可以在dubbo-monitor提供的页面上监控各种数据,但由于笔者是mac配docker版tomcat的方式,监控的dubbo服务只能绑定在docker内部IP上,导致监控数据过不去(com.alibaba.dubbo.remoting.RemotingException: message can not send, because channel is closed)。真正运行的时候还是使用linux+docker(配合net=host)或是mac+原生tomcat的方式吧。运行以下命令删除mysql和tomcat容器:

docker rm -f mysql tomcat

DubboKeeper

除了dubbo-monitor以外,github里还有一个社区版的 DubboKeeper ,功能最为强大。既提供监控功能,又提供服务治理功能。监控数据的持久化除了支持mysql和mongo,还支持lucene。现在下载代码并打包。Dubbokeeper的打包方式略有些不同,需要执行根目录里的 install-xxx.sh 脚本。这里还是以mysql为例:

cd ..
git clone https://github.com/dubboclub/dubbokeeper
cd dubbokeeper
./install-mysql.sh

首先启动DubboKeeper的UI:

docker run -d -p 8080:8080 -v `pwd`/target/mysql-dubbokeeper-ui/dubbokeeper-ui-1.0.1.war:/usr/local/tomcat/webapps/dubbokeeper-ui-1.0.1.war --name=tomcat tomcat:7
docker exec tomcat sed -i "s/localhost/192.168.33.88/" /usr/local/tomcat/webapps/dubbokeeper-ui-1.0.1/WEB-INF/classes/dubbo.properties
docker restart tomcat

访问 http://localhost:8080/dubbokeeper-ui-1.0.1/index.htm#/statistics ,就能看到DubboKeeper的首页了:

很显然在这些UI里,DubboKeeper的逼格是最高的。第二个tab就是 Admin (管理):

接下来就是 Monitor (监控),不过只有启动过监控数据存储端才能使用,现在点击会报 后端系统出现异常,请稍后再试 的错。接下来启动数据库:

docker run -d --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=19890314 -v `pwd`/doc/storage/mysql/sql/application.sql:/create.sql mysql:5.7.12
docker exec -it mysql mysql -uroot -p19890314

初始化数据库:

CREATE DATABASE dubbokeeper;
USE dubbokeeper;
SOURCE /create.sql;
SHOW TABLES;
exit

修改监控数据存储端的配置并启动之:

sed -i "" -e "s/localhost:2181/192.168.33.88:2181/" -e "s/dubbo-monitor/dubbokeeper/" target/mysql-dubbokeeper-server/conf/dubbo-mysql.properties
chmod +x target/mysql-dubbokeeper-server/bin/start-mysql.sh
target/mysql-dubbokeeper-server/bin/start-mysql.sh

现在就可以顺利打开监控页面了:

DubboKeeper甚至还提供了ZooKeeper的窥视版 ZooPeeper

最后收尾,Ctrl+C掉监控数据存储端,并删除各个容器:

docker rm -f mysql tomcat
我来评几句
登录后评论

已发表评论数()

相关站点

热门文章