【深入浅出Sentinel原理及实战】「基础实战专题」零基础探索分析Sentinel控制台开发指南(3)

时间:2023-01-04 18:58:21

Sentinel控制台

Sentinel提供了一个轻量级的开源控制台 Sentinel Dashboard,它提供了机器发现与健康情况管理、监控(单机和集群)、规则管理与推送等多种功能。

Sentinel控制台提供的功能如下

  • 查看机器列表以及健康情况:Sentnel 控制台能够收集 Sentinel 客户端发送的心跳包,判断机器是否在线。
  • 监控(单机和集群聚合):Sentinel 控制台通过 Sentinel 客户端暴露的监控 API,可以实现秒级的实时监控。
  • 规则管理和推送:通过 Sentinel 控制台,我们还能够针对资源定义和推送规则。
  • 鉴权:从 Sentinel 1.6.0 起,Sentinel 控制台引入基本的登录功能,默认用户名和密码都是 sentinel。

Sentinel Dashboard是我们配置和管理规则(例如流控规则、熔断降级规则等)的重要入口之一。通过它,我们不仅可以对规则进行配置和管理,还能实时查看规则的效果。

安装Sentinel 控制台

如何下载和安装 Sentinel 控制台,具体步骤如下。

  1. 使用浏览器,您可以从Sentinel Dashboard下载页面在​​release发行版​​中选择下载对应版本的Sentinel控制台的 jar 包,如下图所示。

【深入浅出Sentinel原理及实战】「基础实战专题」零基础探索分析Sentinel控制台开发指南(3)

1.1. 点击下载即可,如下图所示。

【深入浅出Sentinel原理及实战】「基础实战专题」零基础探索分析Sentinel控制台开发指南(3)

  1. 此外也可以从最新版本的​​源码仓库​​自行构建Sentinel控制台,下载源码。如下图所示

【深入浅出Sentinel原理及实战】「基础实战专题」零基础探索分析Sentinel控制台开发指南(3)

2.1. 使用以下命令将代码打包成一个 fat jar: mvn clean package即可。

  1. 打开命令行窗口,跳转到Sentinel Dashboard jar包所在的目录,执行以下命令,启动 Sentinel Dashboard,使用如下命令启动编译后的控制台:
java -Dserver.port=8080 \
-Dcsp.sentinel.dashboard.server=localhost:8080 \
-Dproject.name=sentinel-dashboard \
-jar target/sentinel-dashboard.jar

3.1. 上述命令中我们指定几个 JVM 参数,其中 -Dserver.port=8080 是 Spring Boot 的参数, 用于指定 Spring Boot 服务端启动端口为 8080。其余几个是 Sentinel 客户端的参数。

3.2. 从 Sentinel 1.6.0 起,Sentinel 控制台引入基本的登录功能,默认用户名和密码都是 sentinel。

  • -Dcsp.sentinel.dashboard.server=localhost:8080 向Sentinel接入端指定控制台的地址,经过上述配置,控制台启动后会自动向自己发送心跳。程序启动后浏览器访问localhost:8080即可访问Sentinel 控制台。
  • -Dproject.name=sentinel-dashboard 向Sentinel指定应用名称,比如上面对应的应用名称就为sentinel-dashboard

从 Sentinel 1.6.0 开始,Sentinel 控制台支持简单的登录功能,默认用户名和密码都是 sentinel。用户可以通过如下参数进行配置:

  • -Dsentinel.dashboard.auth.username=sentinel 用于指定控制台的登录用户名为 sentinel;
  • -Dsentinel.dashboard.auth.password=123456 用于指定控制台的登录密码为 123456;如果省略这两个参数,默认用户和密码均为 sentinel;
  • -Dserver.servlet.session.timeout=7200 用于指定 Spring Boot 服务端 session 的过期时间,如 7200 表示 7200 秒;60m 表示 60 分钟,默认为 30 分钟;
  1. 启动完成后,使用浏览器访问“​​http://localhost:8080/”,跳转到​​ Sentinel 控制台登陆页面,如下图。

【深入浅出Sentinel原理及实战】「基础实战专题」零基础探索分析Sentinel控制台开发指南(3)

  1. 分别输入用户名(sentinel)和密码(123456),点击下方的登录按钮,结果如下图。

【深入浅出Sentinel原理及实战】「基础实战专题」零基础探索分析Sentinel控制台开发指南(3)

业务服务客户端接入Sentinel服务

业务服务客户端需要引入Transport 模块来与 Sentinel 控制台进行通信。您可以通过 pom.xml 引入 JAR 包:

<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
<version>1.8.6</version>
</dependency>
配置启动参数

启动时加入 JVM 参数 -Dcsp.sentinel.dashboard.server=consoleIp:port 指定控制台地址和端口。若启动多个应用,则需要通过 -Dcsp.sentinel.api.port=xxxx 指定客户端监控 API 的端口(默认是 8719)。除了修改 JVM 参数,也可以通过配置文件取得同样的效果。

sentinel-core 的配置项

​project.name​​ 项用于指定应用名(appName)。若未指定,则默认解析 main 函数的类名作为应用名。实际项目使用中建议手动指定应用名。

【深入浅出Sentinel原理及实战】「基础实战专题」零基础探索分析Sentinel控制台开发指南(3)

日志相关配置项

若需要在单台机器上运行相同服务的多个实例,则需要加入 -Dcsp.sentinel.log.use.pid=true 来保证不同实例日志的独立性

【深入浅出Sentinel原理及实战】「基础实战专题」零基础探索分析Sentinel控制台开发指南(3)

sentinel-transport-common 的配置项

csp.sentinel.api.port可不提供,默认为 8719,若端口冲突会自动向下探测可用的端口。

【深入浅出Sentinel原理及实战】「基础实战专题」零基础探索分析Sentinel控制台开发指南(3)

注意:确保业务客户端有访问量,Sentinel会在客户端首次调用的时候进行初始化,开始向控制台发送心跳包,将客户端纳入到控制台的管辖之下。

注意:您还需要根据您的应用类型和接入方式引入对应的 适配依赖,否则即使有访问量也不能被 Sentinel 统计。

验证是否接入成功 - 查看机器列表以及健康情况

客户端正确配置并启动后,会在初次调用后主动向控制台发送心跳包,汇报自己的存在; 控制台收到客户端心跳包之后,会在左侧导航栏中显示该客户端信息。如果在Sentinel 控制台上看到对应的应用,机器列表页面可以看到对应的机器,则表明客户端接入成功了。

【深入浅出Sentinel原理及实战】「基础实战专题」零基础探索分析Sentinel控制台开发指南(3)

当您在机器列表中看到您的机器,就代表着您已经成功接入控制台;如果没有看到您的机器,请检查配置,并通过 ${user.home}/logs/csp/sentinel-record.log.xxx 日志来排查原因,详细的部分请参考 日志文档。

规则管理及推送

Sentinel 控制台同时提供简单的规则管理以及推送的功能。规则推送分为 3 种模式,包括 "原始模式"、"Pull 模式" 和"Push 模式"。

原始模式
规则管理

您可以在控制台通过接入端暴露的 HTTP API 来查询规则。

【深入浅出Sentinel原理及实战】「基础实战专题」零基础探索分析Sentinel控制台开发指南(3)

规则推送

目前控制台的规则推送也是通过规则查询更改HTTP API来更改规则。这也意味着这些规则仅在内存态生效,应用重启之后,该规则会丢失。以上是原始模式。

【深入浅出Sentinel原理及实战】「基础实战专题」零基础探索分析Sentinel控制台开发指南(3)

规则存储

当了解了原始模式之后,我们非常鼓励您通过动态规则并结合各种外部存储来定制自己的规则源。我们推荐通过动态配置源的控制台来进行规则写入和推送,而不是通过Sentinel 客户端直接写入到动态配置源中。在生产环境中,我们推荐 push 模式。

Sentinel 同时还提供应用维度规则推送的示例页面(流控规则页面,前端路由为 /v2/flow),用户改造控制台对接配置中心后可直接通过 v2 页面推送规则至配置中心。Sentinel 抽取了通用接口用于向远程配置中心推送规则以及拉取规则:

  • DynamicRuleProvider<T>: 拉取规则(应用维度)
  • DynamicRulePublisher<T>: 推送规则(应用维度)

用户只需实现 DynamicRuleProvider 和 DynamicRulePublisher 接口,并在 v2 的 controller 中通过 @Qualifier 注解替换相应的 bean 即可实现应用维度推送。

  • Nacos的实现方式
  • Apollo的实现方式