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#/
在这里插入图片描述

posted on 2020-09-01 14:09  luzhouxiaoshuai  阅读(1491)  评论(0编辑  收藏  举报

导航