Dubbo是阿里多年前開源的一套服務治理框架,在眾多互聯網企業里應用廣泛。本文介紹了一些如何監控與管理dubbo服務。使用的工具與《dubbox 的各種管理和監管》大致相同,本文更側重於命令細節與實踐。
首先參考《服務治理框架dubbo上手指南》,實現自己的HelloService
服務。在此基礎上運行Provider.java
啟動服務,接下來就可以開始管理工作啦。讓我們來下載dubbo的源碼並安裝:
1
2
3
|
git
clone https://github.com/alibaba/dubbo.git dubbo
cd ~/dubbo
mvn clean install -Dmaven.test.skip
|
telnet
Dubbo支持使用telnet來查看服務狀態。下面讓我們來試一下:
1
|
telnet localhost 19880
|
敲下回車便能看到dubbo>
的提示符了。以下命令可以看到服務列表、服務的方法詳細信息列表和服務地址列表:
1
2
3
|
ls
ls
-l org.ggg.hello.service.HelloService
ps
-l
|
以下命令可以跟蹤服務方法的調用情況:
1
|
trace org.ggg.hello.service.HelloService
|
這時會看見光標停止住了。運行Consumer.java
來消費服務,就可以看到跟蹤結果啦。詳細的命令可以參考Telnet命令參考手冊。若是服務端沒有開啟監控,使用telnet命令對查看甚至配置服務來說,是依賴最少最簡便的方式。
簡易監控中心
先前安裝過的dubbo項目里包含了dubbo-monitor-simple
的包,解壓之:
1
|
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
:
1
2
3
4
|
# 操作系統是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
啟動簡易監控中心:
1
2
|
mkdir ~/monitor
dubbo-monitor-simple-2.5.4-SNAPSHOT/bin/start.sh
|
訪問http://localhost:8080/便能看到簡易監控中心的首頁了:
在Applications
里可以看到我們先前啟動的hello-world-app
和simple-monitor
自己。可見simple-monitor
也是一個dubbo服務,把自己注冊到dubbo.properties
里指定的配置中心里去。為了接收到監控數據,需要在dubbo服務端打開監控。在provider.xml
文件里加入下面這行配置,然后重新啟動dubbo服務:
1
|
<dubbo:monitor protocol="registry" />
|
而運行ls ~/monitor/
也能看到簡易監控中心所生成的文件夾charts
和statistics
。如果遲遲沒有生成這些信息,有一種可能是在多(虛擬)網卡的情況下,simple-monitor綁定到了錯誤的IP地址去了。萬一真是如此,在dubbo.properties
里增加一行dubbo.protocol.host
的配置即可。
運行stop.sh
停止簡易監控中心服務:
1
|
dubbo-monitor-simple-2.5.4-SNAPSHOT/bin/stop.sh
|
管理控制台
Dubbo為服務治理提供了管理控制台。這是一個webapp,可以很輕松地運行在web容器中。經由源代碼安裝后便會生成dubbo-admin-2.5.4-SNAPSHOT.war
文件,將其部署在tomcat容器中即可。這里用docker啟動一個tomcat 7:
1
2
3
4
|
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賬戶的密碼。默認即為root
和guest
。訪問http://localhost:8080/dubbo-admin-2.5.4-SNAPSHOT/並輸入root
和root
,就能看到管理控制台的首頁了:
可以在此頁面進行各種服務治理操作。更詳細的資料,請參考運維手冊。
運行以下命令刪除tomcat容器:
1
|
docker rm
-f tomcat
|
dubbo-monitor
簡易監控中心和管理控制台的頁面風格看起來還停留在上個世紀。韓都衣舍提供了一個dubbo-monitor,除了更加現代化的頁面,還用數據庫代替了簡易監控中心寫文件的方式。除了mysql,還支持mongo。那我們先來下載代碼:
1
2
3
|
cd ..
git
clone https://github.com/handuyishe/dubbo-monitor
cd dubbo-monitor
|
然后啟動一個mysql數據庫實例:
1
2
|
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
|
創建數據庫和表(可能需要等數據庫啟動一小會兒之后才能連上去):
1
2
3
4
5
|
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
):
1
2
3
4
|
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:
1
|
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/並輸入admin
和admin
,就能看到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容器:
1
|
docker rm
-f mysql tomcat
|
DubboKeeper
除了dubbo-monitor以外,github里還有一個社區版的DubboKeeper,功能最為強大。既提供監控功能,又提供服務治理功能。監控數據的持久化除了支持mysql和mongo,還支持lucene。現在下載代碼並打包。Dubbokeeper的打包方式略有些不同,需要執行根目錄里的install-xxx.sh
腳本。這里還是以mysql為例:
1
2
3
4
|
cd ..
git
clone https://github.com/dubboclub/dubbokeeper
cd dubbokeeper
./install-mysql.sh
|
首先啟動DubboKeeper的UI:
1
2
3
|
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
(監控),不過只有啟動過監控數據存儲端才能使用,現在點擊會報后端系統出現異常,請稍后再試的錯。接下來啟動數據庫:
1
2
|
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
|
初始化數據庫:
1
2
3
4
5
|
CREATE DATABASE dubbokeeper;
USE dubbokeeper;
SOURCE /create.sql;
SHOW TABLES;
exit
|
修改監控數據存儲端的配置並啟動之:
1
2
3
|
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掉監控數據存儲端,並刪除各個容器:
1
|
docker rm
-f mysql tomcat
|
http://qinghua.github.io/dubbo-3/