【微服务sentinel】 控制台 dashboard 安装部署

文章目录

  • 前言
  • 1. 安装(服务器端)
  • 2 客户端配置
    • 2.1 springboot项目配置
    • 2.2 springcloud配置
  • 3. 触发客户端初始化
  • 参考

相关文章:
【Sentinel入门】01 最简单的例子 helloworld
【Sentinel入门】02 @SentinelResource语法(blockHandler、fallback)
【微服务sentinel】 控制台 dashboard 安装部署

前言

为什么需要控制台?

没有控制台,我们的程序也能运行,但是仅限于硬编码,或者@SentinelResource语法声明异常降级处理,不太方便定义流控规则(可以硬编码添加),有了控制台,我们可以在控制台编辑规则,然后,会自动同步至应用程序册,这样,流控规则就生效了

例如下面的代码,假设不涉及控制台,下面这个代码也可以运行的,仅限于降级,当访问 http://127.0.0.1:19966/foo?t=-100时,抛出异常,就会被外面声明的fallback = "helloFallback"捕获:

完整示例参见 【Sentinel入门】02 @SentinelResource语法(blockHandler、fallback)

public class TestServiceImpl implements TestService {
    @SentinelResource(value = "hello", fallback = "helloFallback")
    public String hello(long s) {
        if (s < 0) {
            throw new IllegalArgumentException("invalid arg");
        }
        return String.format("Hello at %d", s);
    }

  //降级服务的具体处理
    public String helloFallback(long s, Throwable ex) {
        // Do some log here.
        ex.printStackTrace();
        return "Oops, error occurred at " + s;
    }

但是假如我们想实现流控怎么办?要么手动写代码,创建规则,要么通过控制台编辑规则,自动同步至客户端代码,后者明显更直观方便,也可以自动设置存储至数据库,重启系统也不会丢失数据。

1. 安装(服务器端)

sentinel-dashboard官网下载地址

启动 Sentinel 控制台需要 JDK 版本为 1.8 及以上版本。

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

访问:http://127.0.0.1:8080/

用户名、密码默认都为:sentinel,也可在启动命令中自行配置:

  • -Dserver.port=8080 用于指定 Sentinel 控制台端口为 8080,也可以不指定,默认的端口是8080,也可以指定其他的端口。

  • -Dcsp.sentinel.dashboard.server=consoleIp:port 指定控制台地址和端口,客户端必须按指定的访问,也可以省略,默认是127.0.0.1:8080

从 Sentinel 1.6.0 起,Sentinel 控制台引入基本的登录功能,默认用户名和密码都是 sentinel。可以参考 鉴权模块文档 配置用户名和密码。

2 客户端配置

2.1 springboot项目配置

那么我们自己的应用怎么接入到控制台,使用控制台对应用的流量进行监控呢,诸位客官,请继续往下看。

首先添加maven依赖,客户端需要引入 Transport 模块来与 Sentinel 控制台进行通信:

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

配置filter,把所有访问的 Web URL 自动统计为 Sentinel 的资源(这一步不是必须的,也可以通过@SentinelResource进行定义规则):

@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean sentinelFilterRegistration() {
        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new CommonFilter());
        registration.addUrlPatterns("/*");
        registration.setName("sentinelFilter");
        registration.setOrder(1);

        return registration;
    }
}

在启动命令中加入以下配置:

  • -Dcsp.sentinel.dashboard.server=consoleIp:port 指定控制台地址和端口,即指定服务器位置,用于客户端向服务器端发起注册请求。
  • -Dcsp.sentinel.api.port=xxxx 指定客户端监控 API 的端口,用于和服务器端进行通信,用来发送心跳检测以检测健康状态(默认是8719,避免同一个机器同时部署 服务器端和客户端冲突,因为控制台已经使用了8719,应用端为了防止冲突就使用8720,当然,可以不用配置,会自动寻找可以用的端口,不断尝试递增,8721、8722等,建议不使用显示配置):
  • -Dproject.name=sentinelDemo 防止默认的名称太长了
-Dserver.port=8888 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dcsp.sentinel.api.port=8720 -Dproject.name=sentinelDemo

【微服务sentinel】 控制台 dashboard 安装部署_第1张图片

如果是springboot项目,也可以在application.properties配置:
csp.sentinel.dashboard.server=127.0.0.1:8080

启动项目,我们可以看到多了一个应用名称sentinelDemo,点击机器列表,查看健康状况:
【微服务sentinel】 控制台 dashboard 安装部署_第2张图片

2.2 springcloud配置

也可以通过yaml或properties进行配置,如果集成了spring cloud,也可以增加如下配置:

spring:
  application:
    name: xxxx
  cloud:
    sentinel:
      transport:
        # 添加sentinel的控制台地址
        dashboard: 127.0.0.1:8080
        # 指定应用与Sentinel控制台交互的端口,应用本地会起一个该端口占用的HttpServer
        #port: 8719

3. 触发客户端初始化

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

也就是说你需要访问某个url的时候,才会真正的发起连接

基于示例 【Sentinel入门】02 @SentinelResource语法(blockHandler、fallback),我们得知,如果定义了@SentinelResource,不管是加在url入口,即controller的方法还是service层的方法,都会出现在控制台的簇点链路菜单中,和代码中的@SentinelResource是一对一对应的:

【微服务sentinel】 控制台 dashboard 安装部署_第3张图片

控制台显示注册为sentinel资源的有:

  • TestServiceImpl#test() service层面
  • TestServiceImpl#hello()
  • Demo1Controller#apiFoo1() Controller层面

DemoController的apiFoo()由于没有@SentinelResource修饰,则不是sentinel资源,对于springboot项目,非springcloud项目,也就是说,普通的url,如果不加@SentinelResource,即Controller内的方法没有被@SentinelResource修饰,则不是sentinel资源。

如果是springcloud项目,则springmvc有特殊包sentinel-spring-webmvc-adapter,会把所有的url都当做资源

参考

Sentinel控制台服务搭建
超详细的Sentinel入门 借鉴端口配置
Sentinel 控制台 官网控制台介绍

你可能感兴趣的:(spring,cloud,控制台,sentinel,dashboard)