sentinel使用控制台
学习中笔记
一、使用步骤
1.下载启动jar包
从github上 sentinel下载jar包
2. 可以通过jvm配置参数启动jar。
java -Dserver.port=8849 -Dcsp.sentinel.dashboard.server=localhost:8849 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
二、界面
1、登录界面
默认登录账号密码均为sentinel
2、首页
3、实时监控:实时查看各个资源的QPS
4、簇点链路:查看http请求![在这里插入图片描述](https://img-blog.csdnimg.cn/20210508094223987.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RzdWllYXJs,size_16,color_FFFFFF,t_70)
5、流控规则:控制QPS、线程等![在这里插入图片描述](https://img-blog.csdnimg.cn/20210508094351948.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RzdWllYXJs,size_16,color_FFFFFF,t_70)
6、降级规则:服务降级
7、热点规则:经常访问的数据,很多时候我们希望统计某个热点数据中访问频次最高的Top K数据,并对其访问进行限制,热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。
8、系统规则:系统规则自然对应所有入口的rest请求做处理,整体管控
9、授权规则:设置白名单及黑名单,来源访问控制
10、集群流控:以上配置均为单机应用,假如你的应用有多个实例,那么你设置了限流的规则之后,每一台应用的实例都会生效相同的流控规则
11、机器列表:链接到sentinel控制台的机器![在这里插入图片描述](https://img-blog.csdnimg.cn/20210508094522707.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RzdWllYXJs,size_16,color_FFFFFF,t_70)
三、控制台各功能详情:
1、流控规则
-
简介
根据QPS、线程控制资源 -
新增流控规则页面
-
参数说明
参数 | 说明 |
---|---|
资源名 | 唯一名称 |
针对来源 | Sentinel可以针对调用者进行限流,填写微服务名,指定对哪个微服务进行限流 ,默认default(不区分来源,全部限制) |
阈值类型-QPS | (每秒钟的请求数量)当调用该接口的QPS达到了阈值的时候,进行限流; |
阈值类型-线程数 | 当调用该接口的线程数达到阈值时,进行限流 |
单机阈值 | 设置阈值 |
是否集群 | 是否针对集群设置阈值 |
流控模式-直接 | 接口达到限流条件时,直接限流 |
流控模式—关联 | 当关联的资源达到阈值时,就限流关联资源 |
流控模式—链路 | 只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就可以限流)api级别的针对来源 |
流控效果—快速失败 | 直接失败 |
流控效果- Warm Up | 即请求 QPS 从 threshold / 3 开始,设置预热时长,经预热时长后逐渐升至设定的 QPS 阈值。预热方式就是为了保护系统,可慢慢的把流量放进来,慢慢的把阈值增长到设置的阈值 |
流控效果-排队等待 | 匀速排队,让请求以均匀的速度通过,阈值类型必须需设成QPS,否则无效。这种方式主要用于处理间隔性突发流量,例如消息队列,在某一秒有大量的请求道来,而接下来的几秒则处于空闲状态,我们希望系统能够在接下来的空闲期间逐渐处理这些请求,而不是一秒直接拒绝多余的请求 |
2、降级规则
- 简介:
Sentinel 熔断降级会在调用链路中某个资源出现不稳定状态时,例如调用超时或异常比例升高,对这个资源的调用进行限制,让请求快速失败,避免影响到其他的资源而导致级联错误。当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认抛出DegradeException) - 新增降级规则页面
- 参数说明
参数 | 说明 |
---|---|
资源名 | 唯一名称 |
熔断策略 | 慢调用比例:每秒平均响应时间,超过阈值,且时间窗口内通过的请求>=5,两个条件同时满足触发降级,RT最大4900 |
慢调用比例—最大RT | 超过配置 ms则判定为慢请求。 |
慢调用比例、异常比例—比例阈值 | 触发熔断的慢调用比例阈值百分比 |
异常数—异常数 | 异常数触及熔断。 |
熔断时长 | 设置熔断的时长 |
最小请求数 | 触发熔断的最小请求数目 |
统计时长 | 统计窗口时长 |
-
慢调用比例场景例子
如图所示设置规则开启后,在统计时长1秒内,当请求数目大于10,并且慢调用的比例大于80%的时候,则在接下来5秒的熔断时长内,请求都会快速失败。经过5秒后熔断器会进入探测恢复状态,若接下来的一个请求响应时间小于设置的1000 ms则结束熔断,若大于1000 ms则会再次被熔断。 -
异常比例场景例子
规则开启后,在统计时长1秒内,当请求数目大于10,并且异常的比例大于等于80%的时候,则在接下来5秒的熔断时长内,请求都会快速失败。经过5秒后熔断器会进入探测恢复状态,若接下来的一个请求没有异常则结束熔断,否则会再次熔断。
3、热点规则
- 简介
热点就是经常访问的数据,根据请求的参数来做限流,比如请求带的参数是热点参数,就对这个请求应用特殊的限流规则;对携带非热点参数的请求,走另一个限流规则; - 新增热点规则页面
- 参数说明
参数 | 说明 |
---|---|
资源名 | 唯一名称 |
参数索引 | 指定热点参数的下标,从0开始。如果额外参数不匹配则默认为0 |
单机阈值 | 对资源内的接口阈值设置 |
统计窗口时长 | 统计时间长度 |
参数类型 | 参数例外项,可以针对指定的参数值单独设置限流阈值,不受前面 count 阈值的限制。仅支持基本类型和字符串类型 |
参数值 | 传递参数值 |
限流阈值 | 传递参数值对应的阈值 |
- 场景例子
规则开启后,在统计时长1秒内,如果传递参数为2则以20作为阈值,若不传递参数则以2作为阈值。
4、系统规则
-
简介:
系统保护规则是从应用级别的入口流量进行控制,从单台机器的 load、CPU 使用率、平均 RT、入口 QPS 和并发线程数等几个维度监控应用指标,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。可以理解为系统规则是全局的限流配置,可以针对服务的全局QPS、机器的CPU等参数进行限流。发生系统规则中配置的情况的时候,会把整个应用都断掉,所有的接口对不能对外提供服务了,这个设计很少用,因为粒度太大了。 -
新增系统规则页面
-
参数说明
参数 | 说明 |
---|---|
Load 自适应(仅对 Linux/Unix-like 机器生效) | 系统的 load1 作为启发指标,进行自适应系统保护。当系统 load1 超过设定的启发值,且系统当前的并发线程数超过估算的系统容量时才会触发系统保护(BBR 阶段)。系统容量由系统的 maxQps * minRt 估算得出。设定参考值一般是 CPU cores * 2.5。 |
RT | 当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒。 |
线程数 | 当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。 |
入口QPS | 当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。 |
CPU使用率 | 当系统 CPU 使用率超过阈值即触发系统保护(取值范围 0.0-1.0),比较灵敏。 |
- 场景例子
当CPU的使用率大于70%,就停止新的请求;
5、授权规则
-
简介
当我们需要根据调用来源来判断该次请求是否允许放行,这时候可以使用Sentinel的来源控制功能。表示控制功能基于请求标识信息,只要Sentinel保护的接口资源被访问,Sentinel就会调用RequestOriginParser的实现类去解析调用者标识。
-若配置白名单,则只有请求来源位于白名单内时才可通过;
-若配置黑名单,则请求来源位于黑名单时不允许通过,其余的请求来源可以通过。 -
新增授权规则页面
-
参数说明
参数 | 说明 |
---|---|
资源名 | 唯一名称 |
流控应用 | 调用方,也就是调用来源了,比如app端调用或pc端调用。 |
流控应用 | 调用方,也就是调用来源了,比如app端调用或pc端调用。 |
授权类型 | 白名单:只有请求来源位于白名单内时才可通过。黑名单:请求来源位于黑名单时不通过,其余的请求通过。 |
- 场景例子
资源名为getTest的资源仅有服务叫demo的可以调用 - 代码配置:
@Component
public class RequestOriginParserDefinition implements RequestOriginParser {
//基于 Spring 的 Interceptor 拦截资源
// 获取调用方标识信息并返回
@Override
public String parseOrigin(HttpServletRequest request) {
String serviceName = request.getParameter("serviceName");
StringBuffer url = request.getRequestURL();
if (url.toString().endsWith("favicon.ico")) {
// 浏览器会向后台请求favicon.ico图标
return serviceName;
}
if (StringUtils.isEmpty(serviceName)) {
throw new IllegalArgumentException("serviceName must not be null");
}
return serviceName;
}
}