启动 Sentinel 控制台以及在Spring Cloud Alibaba中的使用

2,104 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第32天,点击查看活动详情

一、启动 Sentinel 控制台

1-1、根据版本下载sentinel的jar包

下载控制台 jar 包并在本地启动:可以参见: github文档

jar下载地址:[下载地址](github.com/alibaba/Sen…

下载的版本,同样最好遵循Spring Cloud Alibaba的版本匹配表

image.png

我这边Spring Cloud Alibaba版本为2.2.6.RELEASE,因此Sentinel版本为1.8.1

image.png

1-2、启动控制台命令

java -jar sentinel-dashboard-1.8.1.jar

image.png

运行结果如下,默认使用8080端口 image.png

访问http://localhost:8080/#/login ,默认用户名密码: sentinel/sentinel image.png

登录后的界面,因为还未整合服务,因此导航是空的 image.png

1-3、sentinel的配置

一般端口8080是被经常占用的,因此我们需要修改启动端口,并且使用默认密码也不安全,都需要进行修改。

1-3-1、修改sentinel端口号、账号密码及session过期时间

可以通过如下参数进行配置:

-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 分钟;

java -Dserver.port=8858 -Dsentinel.dashboard.auth.username=xushu -Dsentinel.dashboard.auth.password=123456 -jar sentinel-dashboard-1.8.0.jar

为了方便快捷启动可以在桌面创建.bat文件(设置用户名:jony;密码:123456,端口:8858)

java -Dserver.port=8858 -Dsentinel.dashboard.auth.username=jony -Dsentinel.dashboard.auth.password=123456 -jar E:\serverSoft\sentinel-dashboard-1.8.1.jar
pause

image.png

1-3-2、其他配置

可以看下github上的说明,还提供了哪些相关配置 控制台的一些特性可以通过配置项来进行配置,配置项主要有两个来源:System.getProperty() 和 System.getenv(),同时存在时后者可以覆盖前者。

通过环境变量进行配置时,因为不支持 . 所以需要将其更换为 _

配置项类型默认值最小值描述
auth.enabledbooleantrue-是否开启登录鉴权,仅用于日常测试,生产上不建议关闭
sentinel.dashboard.auth.usernameStringsentinel-登录控制台的用户名,默认为 sentinel
sentinel.dashboard.auth.passwordStringsentinel-登录控制台的密码,默认为 sentinel
sentinel.dashboard.app.hideAppNoMachineMillisInteger060000是否隐藏无健康节点的应用,距离最近一次主机心跳时间的毫秒数,默认关闭
sentinel.dashboard.removeAppNoMachineMillisInteger0120000是否自动删除无健康节点的应用,距离最近一次其下节点的心跳时间毫秒数,默认关闭
sentinel.dashboard.unhealthyMachineMillisInteger6000030000主机失联判定,不可关闭
sentinel.dashboard.autoRemoveMachineMillisInteger0300000距离最近心跳时间超过指定时间是否自动删除失联节点,默认关闭
sentinel.dashboard.unhealthyMachineMillisInteger6000030000主机失联判定,不可关闭
server.servlet.session.cookie.nameStringsentinel_dashboard_cookie-控制台应用的 cookie 名称,可单独设置避免同一域名下 cookie 名冲突

Sentinel 会在客户端首次调用的时候进行初始化,开始向控制台发送心跳包,所以要确保客户端有访问量;

image.png

二、分布式服务整合Sentinel

2-1、引入依赖

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-transport-simple-http</artifactId>
    <version>1.8.1</version>
</dependency>

在上篇文章使用sentinel还添加了@SentinelResource注解,后面使用Sentinel不用再次添加这两个注解,只要添加一个sentinel-starter即可。

2-2、为服务添加sentinel控制台

刚刚可以看到,虽然sentinel启动起来了,但是无法监测到我们的服务,下面就来处理一下。

启动时加入 JVM 参数 -Dcsp.sentinel.dashboard.server=consoleIp:port 指定控制台地址和端口。若启动多个应用,则需要通过 -Dcsp.sentinel.api.port=xxxx 指定客户端监控 API 的端口(默认是 8719)

访问控制台可以发现还是没有监控到服务 image.png

这时候需要先访问一下设置了@SentinelResource的服务,然后再属性sentinel控制台。需要注意的是:这三个包一定要都使用1.8.1版本,否则会报错

<!--sentinel核心包-->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-core</artifactId>
    <version>1.8.1</version>
</dependency>
<!--使用@SentinelResource 注解的依赖-->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-annotation-aspectj</artifactId>
    <version>1.8.1</version>
</dependency>
<!--控制台-->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-transport-simple-http</artifactId>
    <version>1.8.1</version>
</dependency>

2-3、控制台查看

可以看到,这样就可以看到左侧导航了 image.png

可以查看实施监控 image.png

也可以看到在代码里面设置的相关规则 image.png

我们也可以在控制台进行设置,但是控制台服务重启,规则不会持久化,后面再讲述如何持久化操作。

2-3、在sentinel控制台中设置流控规则

  • 资源名: 接口的API
  • 针对来源: 默认是default,当多个微服务都调用这个资源时,可以配置微服务名来对指定的微服务设置阈值
  • 阈值类型: 分为QPS和线程数 假设阈值为10
  • QPS类型: 只得是每秒访问接口的次数>10就进行限流
  • 线程数: 为接受请求该资源分配的线程数>10就进行限流

image.png 测试: 因为QPS是1,所以1秒内多次访问会出现如下情形:

image.png

访问http://localhost:8800/actuator/sentinel, 可以查看flowRules

image.png

三、Spring Cloud Alibaba整合sentinel

3-1、添加依赖

<!--sentinel启动器-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

3-2、添加控制器接口

image.png

3-3、修改yml配置,添加sentinel控制台地址及服务名

image.png

启动访问

在启动sentinel控制台之后,还是需要先访问一下服务的接口,专业sentinel里面就有服务的数据了,如下:

image.png

通过以上步骤就可以将sentinel添加到Spring Cloud Alibaba中了。

四、微服务和Sentinel Dashboard通信原理

Sentinel控制台与微服务端之间,实现了一套服务发现机制,集成了Sentinel的微服务都会将元数据传递给Sentinel控制台,架构图如下所示:

image.png 流控针对privoder 熔断降级 针对consumer