Dubbo服務的監控和高可用機制


Dubbo給我們提供了dubbo-admin和dubbo-monitor-simple用於監控Dubbo服務,可以用來監控接口暴露,注冊情況,也可以顯示接口的調用明細和調用時間。dubbo-admin和dubbo-monitor-simple的下載地址為:https://github.com/apache/incubator-dubbo-admin/tree/master,這里簡單介紹它們如何使用。

 

 這里我們采用第一種方式,在上一節中的server-provider和server-consumer的配置文件中添加如下配置:

dubbo:
  monitor:
    protocol: registry

在服務提供方和消費方需要配置如下:
<dubbo:monitor protocol=”registry”/>
protocol為”registry”,表示服務提供方和消費方從注冊中心發現監控中心(monitor)地址。

配置好后,依次啟動server-provider和server-consumer,接下來開始搭建監控中心。

dubbo-monitor-simple
下載https://github.com/apache/incubator-dubbo-admin/tree/master源碼后,使用IDEA導入dubbo-monitor-simple應用,修改其配置文件dubbo.properties內容:

dubbo.container=log4j,spring,registry,jetty-monitor
dubbo.application.name=simple-monitor
dubbo.application.owner=dubbo
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.port=7070
dubbo.jetty.port=7000
dubbo.jetty.directory=${user.home}/monitor
dubbo.charts.directory=${user.home}/monitor/charts
dubbo.statistics.directory=${user.home}/monitor/statistics
dubbo.log4j.file=logs/dubbo-monitor-simple.log
dubbo.log4j.level=WARN

上面主要指定了注冊中心地址為zookeeper://127.0.0.1:2181,監控中心協議端口為7070以及監控應用訪問端口為7000。

配置好后,運行啟動類MonitorStarter的main方法來啟動應用,啟動后,訪問http://localhost:7000便可看到如下頁面:

上面主要指定了注冊中心地址為zookeeper://127.0.0.1:2181,監控中心協議端口為7070以及監控應用訪問端口為7000。

配置好后,運行啟動類MonitorStarter的main方法來啟動應用,啟動后,訪問http://localhost:7000便可看到如下頁面:

QQ截圖20190323151212.png

在線應用信息:

QQ截圖20190323102900.png

多次訪問http://localhost:8081/hello/mrbird后,便可以在監控中心查看服務調用情況:

QQ截圖20190323102923.png

QQ截圖20190323102936.png

dubbo-admin

使用IDEA導入dubbo-admin應用,修改其配置文件application.properties:

server.port=7001
spring.velocity.cache=false
spring.velocity.charset=UTF-8
spring.velocity.layout-url=/templates/default.vm
spring.messages.fallback-to-system-locale=false
spring.messages.basename=i18n/message
spring.root.password=root
spring.guest.password=guest

dubbo.registry.address=zookeeper://127.0.0.1:2181

使用dubbo-admin一定要注意修改其注冊中心的地址和端口

上面配置主要配置了注冊中心地址為zookeeper://127.0.0.1:2181,應用端口號為7001,root和guest賬戶的密碼。

配置好后,啟動應用(dubbo-admin使用Spring Boot構建,啟動入口類即可),訪問http://localhost:7001:

QQ截圖20190323152110.png

QQ截圖20190323152133.png

QQ截圖20190323152146.png

QQ截圖20190323152215.png

duubo提供了新版的dubbo-admin,采用前后端分離的方式,前端由Vue.js構建,UI更為nice,不過還不完善,所以這里就不介紹了。

源碼鏈接:https://github.com/wuyouzhuguli/SpringAll/tree/master/52.Dubbo-OPS-Mointor

4.Dubbo之dubbo-spring-boot-actuator

dubbo-spring-boot-actuator 提供 Production-Ready 特性:

健康檢查
控制斷點
外部化配置

GitHub https://github.com/apache/incubator-dubbo-spring-boot-project/tree/master/dubbo-spring-boot-actuator#health-checks

版本

目前,dubbo-spring-boot-actuator將支持Spring Boot 2.x和1.x兩個版本:

0.2.x是Spring Boot 2.x的主流發行版

0.1.x是用於維護Spring Boot 1.x的舊版本

與Maven整合

您可以通過向pom.xml添加以下依賴項,將最新的dubbo-spring-boot-actuator引入到您的項目中,

 <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-actuator</artifactId> <version>0.2.0</version> </dependency> 

還依賴

 <!-- dubbo actuator 依賴spring boot actuator --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 

如果您的項目無法解決依賴關系,請嘗試添加以下存儲庫:

 <repositories> <repository> <id>sonatype-nexus-snapshots</id> <url>https://oss.sonatype.org/content/repositories/snapshots</url> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> 

健康檢查

dubbo-spring-boot-actuator支持標准的Spring Boot健康指示器作為生產就緒特性,它將聚合到Spring Boot的健康中,並在運行MVC (Spring Web MVC)和JMX (Java管理擴展)的HealthEndpoint上導出(如果它們都可用的話)。

Web端點:/health

假設Spring Boot Web應用程序未指定management.server.port,您可以通過Web Client訪問http://localhost:8080/actuator/health,你可以可以專門為訪問端點設置端口號,通過management.server.port設置。獲得JSON格式的響應,如下所示:

 { "status": "UP", "dubbo": { "status": "UP", "memory": { "source": "management.health.dubbo.status.defaults", "status": { "level": "OK", "message": "max:3641M,total:383M,used:92M,free:291M", "description": null } }, "load": { "source": "management.health.dubbo.status.extras", "status": { "level": "OK", "message": "load:1.73583984375,cpu:8", "description": null } }, "threadpool": { "source": "management.health.dubbo.status.extras", "status": { "level": "OK", "message": "Pool status:OK, max:200, core:200, largest:0, active:0, task:0, service port: 12345", "description": null } }, "server": { "source": "dubbo@ProtocolConfig.getStatus()", "status": { "level": "OK", "message": "/192.168.1.103:12345(clients:0)", "description": null } } } // ignore others } 

在上面的例子中,內存,負載,線程池和服務器是Dubbo的內置StatusCheckers。 Dubbo允許應用程序擴展StatusChecker的SPI。

默認,內存和負載將添加到Dubbo的HealthIndicator中,它可以被外部化配置StatusChecker的默認值覆蓋。

JMX端點:健康

Health是一個JMX (Java管理擴展)端點,具有ObjectName org.springframework.boot:type=Endpoint,name=Health,它可以由JMX代理管理,例如。JDK工具:jconsole等等。

內置StatusCheckers

META-INF /dubbo/internal/com.alibaba.dubbo.common.status.StatusChecker聲明內置StatusCheckers如下:

 
image
memory=com.alibaba.dubbo.common.status.support.MemoryStatusChecker
load=com.alibaba.dubbo.common.status.support.LoadStatusChecker
spring=com.alibaba.dubbo.config.spring.status.SpringStatusChecker
datasource=com.alibaba.dubbo.config.spring.status.DataSourceStatusChecker
server=com.alibaba.dubbo.rpc.protocol.dubbo.status.ServerStatusChecker
threadpool=com.alibaba.dubbo.rpc.protocol.dubbo.status.ThreadPoolStatusChecker
registry=com.alibaba.dubbo.registry.status.RegistryStatusChecker

作為StatusChecker名稱的屬性鍵可以是外部化配置中的management.health.dubbo.status.*的有效值。

端點

Actuator端點dubbo支持Actuator端點:

 ID | Enabled | HTTP URI | HTTP Method | Description | Content Type ---------------- | ------- | -------------------------- | ----------- | --------------------------------- | ---------------- dubbo | true | /actuator/dubbo | GET | Exposes Dubbo's meta data | application/json dubbo-properties | true | /actuator/dubbo/properties | GET | Exposes all Dubbo's Properties | application/json dubbo-services | false | /dubbo/services | GET | Exposes all Dubbo's ServiceBean | application/json dubbo-references | false | /actuator/dubbo/references | GET | Exposes all Dubbo's ReferenceBean | application/json dubbo-configs | true | /actuator/dubbo/configs | GET | Exposes all Dubbo's *Config | application/json dubbo-shutdown | false | /actuator/dubbo/shutdown | POST | Shutdown Dubbo services | application/json 
 
image
 # Dubbo Endpoints Default Properties is loaded by @PropertySource with low order,
# those values of properties can be override by higher PropertySource
# @see DubboEndpointsAutoConfiguration

# Set enabled for Dubbo Endpoints
management.endpoint.dubbo.enabled = true
management.endpoint.dubbo-shutdown.enabled = false
management.endpoint.dubbo-configs.enabled = true
management.endpoint.dubbo-services.enabled = false
management.endpoint.dubbo-references.enabled = false
management.endpoint.dubbo-properties.enabled = true

# "management.endpoints.web.base-path" should not be configured in this file

# Re-defines path-mapping of Dubbo Web Endpoints
management.endpoints.web.path-mapping.dubbo-shutdown = dubbo/shutdown
management.endpoints.web.path-mapping.dubbo-configs = dubbo/configs
management.endpoints.web.path-mapping.dubbo-services = dubbo/services
management.endpoints.web.path-mapping.dubbo-references = dubbo/references
management.endpoints.web.path-mapping.dubbo-properties = dubbo/properties

Web端點

/actuator/dubbo

/dubbo暴露了Dubbo的元數據:

 { "timestamp": 1516623290166, "versions": { "dubbo-spring-boot": "0.2.0" "dubbo": "2.6.2" }, "urls": { "dubbo": "https://github.com/alibaba/dubbo", "google-group": "http://groups.google.com/group/dubbo", "github": "https://github.com/dubbo/dubbo-spring-boot-project", "issues": "https://github.com/dubbo/dubbo-spring-boot-project/issues", "git": "https://github.com/dubbo/dubbo-spring-boot-project.git" } } 

/actuator/dubbo/properties

/actuator/dubbo/properties從Spring Boot外化配置(a.k.a PropertySources)公開所有Dubbo的屬性:

 { "dubbo.application.id": "dubbo-provider-demo", "dubbo.application.name": "dubbo-provider-demo", "dubbo.application.qos-enable": "false", "dubbo.application.qos-port": "33333", "dubbo.protocol.id": "dubbo", "dubbo.protocol.name": "dubbo", "dubbo.protocol.port": "12345", "dubbo.registry.address": "N/A", "dubbo.registry.id": "my-registry", "dubbo.scan.basePackages": "com.alibaba.boot.dubbo.demo.provider.service" } 

JSON的結構是簡單的Key-Value格式,鍵是屬性名稱,值是屬性值。

/actuator/dubbo/services

/actuator/dubbo/services公開在Spring ApplicationContext中通過<dubbo:service />或@Service聲明的所有Dubbo的ServiceBean

 { "ServiceBean@com.alibaba.boot.dubbo.demo.api.DemoService#defaultDemoService": { "accesslog": null, "actives": null, "cache": null, "callbacks": null, "class": "com.alibaba.dubbo.config.spring.ServiceBean", "cluster": null, "connections": null, "delay": null, "document": null, "executes": null, "export": null, "exported": true, "filter": "", "generic": "false", "group": null, "id": "com.alibaba.boot.dubbo.demo.api.DemoService", "interface": "com.alibaba.boot.dubbo.demo.api.DemoService", "interfaceClass": "com.alibaba.boot.dubbo.demo.api.DemoService", "layer": null, "listener": "", "loadbalance": null, "local": null, "merger": null, "mock": null, "onconnect": null, "ondisconnect": null, "owner": null, "path": "com.alibaba.boot.dubbo.demo.api.DemoService", "proxy": null, "retries": null, "scope": null, "sent": null, "stub": null, "timeout": null, "token": null, "unexported": false, "uniqueServiceName": "com.alibaba.boot.dubbo.demo.api.DemoService:1.0.0", "validation": null, "version": "1.0.0", "warmup": null, "weight": null, "serviceClass": "com.alibaba.boot.dubbo.demo.provider.service.DefaultDemoService" } } 

關鍵是ServiceBean的Bean名稱,ServiceBean的屬性組成值。

/actuator/dubbo/references

/actuator/dubbo/references公開所有通過@Reference on Field或Method聲明的Dubbo的ReferenceBean

 { "private com.alibaba.boot.dubbo.demo.api.DemoService com.alibaba.boot.dubbo.demo.consumer.controller.DemoConsumerController.demoService": { "actives": null, "cache": null, "callbacks": null, "class": "com.alibaba.dubbo.config.spring.ReferenceBean", "client": null, "cluster": null, "connections": null, "filter": "", "generic": null, "group": null, "id": "com.alibaba.boot.dubbo.demo.api.DemoService", "interface": "com.alibaba.boot.dubbo.demo.api.DemoService", "interfaceClass": "com.alibaba.boot.dubbo.demo.api.DemoService", "layer": null, "lazy": null, "listener": "", "loadbalance": null, "local": null, "merger": null, "mock": null, "objectType": "com.alibaba.boot.dubbo.demo.api.DemoService", "onconnect": null, "ondisconnect": null, "owner": null, "protocol": null, "proxy": null, "reconnect": null, "retries": null, "scope": null, "sent": null, "singleton": true, "sticky": null, "stub": null, "stubevent": null, "timeout": null, "uniqueServiceName": "com.alibaba.boot.dubbo.demo.api.DemoService:1.0.0", "url": "dubbo://localhost:12345", "validation": null, "version": "1.0.0", "invoker": { "class": "com.alibaba.dubbo.common.bytecode.proxy0" } } } 

關鍵是@Reference Field或Method的字符串表示,ReferenceBean的屬性組成值。

/actuator/dubbo/configs

actuator / dubbo / configs暴露所有Dubbo的* Config:

 { "ApplicationConfig": { "dubbo-consumer-demo": { "architecture": null, "class": "com.alibaba.dubbo.config.ApplicationConfig", "compiler": null, "dumpDirectory": null, "environment": null, "id": "dubbo-consumer-demo", "logger": null, "name": "dubbo-consumer-demo", "organization": null, "owner": null, "version": null } }, "ConsumerConfig": { }, "MethodConfig": { }, "ModuleConfig": { }, "MonitorConfig": { }, "ProtocolConfig": { "dubbo": { "accepts": null, "accesslog": null, "buffer": null, "charset": null, "class": "com.alibaba.dubbo.config.ProtocolConfig", "client": null, "codec": null, "contextpath": null, "dispatcher": null, "dispather": null, "exchanger": null, "heartbeat": null, "host": null, "id": "dubbo", "iothreads": null, "name": "dubbo", "networker": null, "path": null, "payload": null, "port": 12345, "prompt": null, "queues": null, "serialization": null, "server": null, "status": null, "telnet": null, "threadpool": null, "threads": null, "transporter": null } }, "ProviderConfig": { }, "ReferenceConfig": { }, "RegistryConfig": { }, "ServiceConfig": { } } 

關鍵是Dubbo Config類的簡單名稱,值是Config bean的名稱屬性映射。

/actuator/dubbo/shutdown

/ actuator / dubbo / shutdown關閉Dubbo的組件,包括注冊表,協議,服務和引用:

 { "shutdown.count": { "registries": 0, "protocols": 1, "services": 0, "references": 1 } } 

“shutdown.count”表示Dubbo組件的關閉計數,該值表示已關閉的組件數。

外部化配置

默認的 StatusChecker

management.health.dubbo.status.defaults是用於設置StatusCheckers名稱的屬性名稱,其值允許為多個值,例如

 management.health.dubbo.status.defaults = registry,memory,load

默認值

默認值是

 management.health.dubbo.status.defaults = memory,load

StatusChecker額外功能

management.health.dubbo.status.extras用於覆蓋[StatusChecker的默認值],多個值由逗號分隔:

 management.health.dubbo.status.extras = load,threadpool

健康檢查已啟用

management.health.dubbo.enabled是一個啟用配置來打開或關閉運行狀況檢查功能,其默認值為true。

如果您要禁用運行狀況檢查,則應將management.health.dubbo.enabled應用於false:

 management.health.dubbo.enabled = false

端點啟用

Dubbo Spring Boot提供執行器端點,但其中一些是禁用的。 如果您要啟用它們,請將以下屬性添加到外部配置中:

 # Enables Dubbo All Endpoints
management.endpoint.dubbo.enabled = true
management.endpoint.dubbo-shutdown.enabled = true
management.endpoint.dubbo-configs.enabled = true
management.endpoint.dubbo-services.enabled = true
management.endpoint.dubbo-references.enabled = true
management.endpoint.dubbo-properties.enabled = true

源碼地址:https://gitee.com/niugangxy/dubbo



新版 Dubbo Admin 2.7.8 管理控制台搭建教程

官網地址

官網地址:https://github.com/apache/dubbo-admin
中文文檔說明:https://github.com/apache/dubbo-admin/blob/develop/README_ZH.md
Dubbo服務swagger地址:http://localhost:8080/swagger-ui.html#/

 

官網地址

官網地址:https://github.com/apache/dubbo-admin
中文文檔說明:https://github.com/apache/dubbo-admin/blob/develop/README_ZH.md
Dubbo服務swagger地址:http://localhost:8080/swagger-ui.html#/

在這里插入圖片描述
2019年初,官方發布了Dubbo管理控制台0.1版本,結構上采用了前后端分離的方式,前端使用Vue和Vuetify作為UI框架,后端采用的是SpringBoot框架。

一、修改配置

在下載的 dubbo-admin-develop.zip 文件的解壓目錄中,修改dubbo-admin-server\server\src\main\resource下的application.properties 配置文件,主要修改此配置文件中的注冊中心,配置中心,與元數據中心的 zk 地址。(改成自己服務器或虛擬機的地址,如果是在本地搭建的 則不需要修改)
在這里插入圖片描述

二、打包(后端)

1、進入dubbo-admin-server 目錄,打開cmd窗口,在當前目錄下執行以下兩條命令

mvn install -Dmaven.test.skip=true //跳過測試環節(如果打包過程中測試環節不報錯也可以不加 -Dmaven.test.skip=true) 
  • 1

2、進入dubbo-admin-server\target 目錄,執行jar包

java -jar dubbo-admin-server-0.2.0-SNAPSHOT.jar 
  • 1

三、安裝依賴及啟動(前端)

進入到dubbo-admin-ui 目錄,打開cmd窗口,在當前目錄下分別執行以下兩條命令

npm install # 安裝依賴

npm run dev # 啟動Vue項目
  • 1
  • 2
  • 3

四、啟動zookeeper

1、下載:https://zookeeper.apache.org/releases.html
在這里插入圖片描述在這里插入圖片描述

2、解壓到本地后,需要修改下配置文件名,進入 conf 目錄,將zoo_sample.cfg配置文件復制一份,將復制后的文件重命名為zoo.cfg。如果僅將 zk 做單點來用,那么進入 bin 目錄雙擊 zkServer.cmd 啟動服務端,出現以下命令行窗口即運行成功:

 zkServer.cmd 
  • 1

在這里插入圖片描述在bin目錄下,再啟動 zkCli.cmd 啟動客戶端:

zkCli.cmd 
  • 1

在這里插入圖片描述
這時就可以開始在客戶端敲命令了,同時服務端也會打印出客戶端過來的請求:
客戶端:

[zk: localhost:2181(CONNECTED) 2] ls / [zookeeper] [zk: localhost:2181(CONNECTED) 3] create /zk hello,world! Created /zk [zk: localhost:2181(CONNECTED) 4] ls / [zk, zookeeper] [zk: localhost:2181(CONNECTED) 5] get /zk hello,world! cZxid = 0x2 ctime = Tue Sep 11 11:22:48 CST 2018 mZxid = 0x2 mtime = Tue Sep 11 11:22:48 CST 2018 pZxid = 0x2 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 12 numChildren = 0 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

服務端:

2018-09-11 11:19:48,064 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@192] - Accepted socket connection from /0:0:0:0:0:0:0:1:57459 2018-09-11 11:19:48,073 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:ZooKeeperServer@942] - Client attempting to establish new session at /0:0:0:0:0:0:0:1:57459 2018-09-11 11:19:48,076 [myid:] - INFO [SyncThread:0:FileTxnLog@203] - Creating new log file: log.1 2018-09-11 11:19:48,088 [myid:] - INFO [SyncThread:0:ZooKeeperServer@687] - Established session 0x165c6a41e3a0000 with negotiated timeout 30000 for client /0:0:0:0:0:0:0:1:57459 
  • 1
  • 2
  • 3
  • 4

五、啟動dubbo 管理控制台

http://localhost:8082/
默認的賬號密碼都是root。
在這里插入圖片描述swagger地址如下:http://localhost:8080/swagger-ui.html#/
在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM