Spring Cloud Alibaba Sentinel 控制台

简介

Sentinel 控制台是流量控制、熔断降级规则统一配置和管理的入口,它为用户提供了机器自发现、簇点链路自发现、监控、规则配置等功能。在 Sentinel 控制台上,我们可以配置规则并实时查看流量控制效果。

下载

有以下两种方式获取Sentinel控制台

  1. 下载最新版本的控制台 jar 包 下载地址:https://github.com/alibaba/Sentinel/releases

  2. 从最新版本的源码自行构建 Sentinel 控制台。源码地址:https://github.com/alibaba/Sentinel/tree/master/sentinel-dashboard

    • 建议使用源码自行构建。(因为后续我们还要在源码基础上扩展,实现动态规则匹配,监控数据持久化等)

启动控制台

下载sentinel-dashboard代码即可

Spring Cloud Alibaba Sentinel 控制台_第1张图片

使用代码工具打开,执行maven打包,打包成功后会在target目录生成sentinel-dashboard.jar。

使用下面的命令启动控制台

java -Dserver.port=8800 -jar sentinel-dashboard.jar

-Dserver.port=8800 表示启动端口为8800

启动之后通过 http://localhost:8800/ 访问
Spring Cloud Alibaba Sentinel 控制台_第2张图片

默认情况下,登录的用户名和密码都是sentinel。这个可以修改,我们后面再说。
登录之后出现如下界面,说明我们控制台启动成功。

Spring Cloud Alibaba Sentinel 控制台_第3张图片
此时我们没有任何的菜单可以点击,因为我们还没有接入客户端。

控制台配置项

控制台的一些特性可以通过配置项来进行配置,配置项主要有两个来源:System.getProperty() 和 System.getenv(),同时存在时后者可以覆盖前者。

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

配置项 类型 默认值 最小值 描述
auth.enabled boolean true - 是否开启登录鉴权,仅用于日常测试,生产上不建议关闭
sentinel.dashboard.auth.username String sentinel - 登录控制台的用户名,默认为 sentinel
sentinel.dashboard.auth.password String sentinel - 登录控制台的密码,默认为 sentinel
sentinel.dashboard.app.hideAppNoMachineMillis Integer 0 60000 是否隐藏无健康节点的应用,距离最近一次主机心跳时间的毫秒数,默认关闭
sentinel.dashboard.removeAppNoMachineMillis Integer 0 120000 是否自动删除无健康节点的应用,距离最近一次其下节点的心跳时间毫秒数,默认关闭
sentinel.dashboard.unhealthyMachineMillis Integer 60000 30000 主机失联判定,不可关闭
sentinel.dashboard.autoRemoveMachineMillis Integer 0 300000 距离最近心跳时间超过指定时间是否自动删除失联节点,默认关闭
sentinel.dashboard.unhealthyMachineMillis Integer 60000 30000 主机失联判定,不可关闭
server.servlet.session.cookie.name String sentinel_dashboard_cookie - 控制台应用的 cookie 名称,可单独设置避免同一域名下 cookie 名冲突

配置示例

  • 命令行方式:

java -Dsentinel.dashboard.app.hideAppNoMachineMillis=60000

  • Java 方式:

System.setProperty(“sentinel.dashboard.app.hideAppNoMachineMillis”, “60000”);

  • 环境变量方式:

sentinel_dashboard_app_hideAppNoMachineMillis=60000

客户端接入

添加 Transport 模块

客户端需要引入 Transport 模块来与 Sentinel 控制台进行通信

<dependency>
    <groupId>com.alibaba.cspgroupId>
    <artifactId>sentinel-transport-simple-httpartifactId>
    <version>1.8.6version>
dependency>

注:本文使用的Sentinel版本为1.8.6。若使用我们上篇文章的示例,此模块已经引入。

添加 sentinel.properties

# 应用名称(可以为中文,但建议和我们的项目名称一致)
project.name = SentinelDemo

# 控制台的地址,指定控制台后客户端会自动向该地址发送心跳包。格式为host:port,必须
csp.sentinel.dashboard.server = 127.0.0.1:8800

# 本地启动 HTTP API Server 的端口号,默认8719
#(我启动后是8720端口,官网说明:默认为 8719,若端口冲突会自动向下探测可用的端口)
csp.sentinel.api.port = 8719

这些均为客户端配置项。关于客户端配置项,我们会在下面详解。

启动客户端

触发客户端初始化

Sentinel 会在客户端首次调用的时候进行初始化,开始向控制台发送心跳包。也就是说,启动客户端之后,需要请求一次,客户端才会对控制台发送心跳包,控制台界面才能看到我们的客户端应用信息。

Spring Cloud Alibaba Sentinel 控制台_第4张图片

控制台界面

簇点链路

Spring Cloud Alibaba Sentinel 控制台_第5张图片
簇点链路(单机调用链路)页面实时的去拉取指定客户端资源的运行情况。它一共提供两种展示模式:一种用树状结构展示资源的调用链路,另外一种则不区分调用链路展示资源的实时情况。

注: 簇点链路监控是内存态的信息,它仅展示启动后调用过的资源。

实时监控

Spring Cloud Alibaba Sentinel 控制台_第6张图片

同一个服务下的所有机器的簇点信息会被汇总,并且秒级地展示在"实时监控"下

实时监控仅存储 5 分钟以内的数据,如果需要持久化,需要通过调用实时监控接口来定制。

请确保 Sentinel 控制台所在的机器时间与自己应用的机器时间保持一致,否则会导致拉不到实时的监控数据。

规则管理及推送

Spring Cloud Alibaba Sentinel 控制台_第7张图片

关于规则的推送我们将会单独讲解,此处不做过多介绍。

客户端配置项

配置方式

Sentinel 提供如下的配置方式:

  • JVM -D 参数方式
  • properties 文件方式(1.7.0 版本开始支持) – 我们的示例使用的是该方式
  • 如果客户端为Spring Boot 或 Spring Cloud,可以使用 spring.cloud.sentinel.xxx 来进行配置

优先级顺序:JVM -D 参数的优先级最高。若 properties 和 JVM 参数中有相同项的配置,以 JVM 参数配置的为准。

用户可以通过 -Dcsp.sentinel.config.file 参数配置 properties 文件的路径,支持 classpath 路径配置(如 classpath:sentinel.properties)。默认 Sentinel 会尝试从 classpath:sentinel.properties 文件读取配置,读取编码默认为 UTF-8。

在Spring boot中如果我们使用sentinel 的start,则我们可以在application配置文件中直接配置

<dependency>
   <groupId>com.alibaba.cloudgroupId>
   <artifactId>spring-cloud-starter-alibaba-sentinelartifactId>
dependency>
spring:
  cloud:
    sentinel:
      transport:
        port: 8719
        dashboard: localhost:8080

其配置项在spring.cloud.sentinel 下

基础配置项

名称 含义 类型 默认值 是否必需 备注
project.name 指定应用的名称 String null
csp.sentinel.app.type 指定应用的类型 int 0 (APP_TYPE_COMMON) 1.6.0 引入
csp.sentinel.metric.file.single.size 单个监控日志文件的大小 long 52428800 (50MB)
csp.sentinel.metric.file.total.count 监控日志文件的总数上限 int 6
csp.sentinel.statistic.max.rt 最大的有效响应时长(ms),超出此值则按照此值记录 int 4900 1.4.1 引入
csp.sentinel.spi.classloader SPI 加载时使用的 ClassLoader,默认为给定类的 ClassLoader String default 若配置 context 则使用 thread context ClassLoader。1.7.0 引入

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

transport配置项

名称 含义 类型 默认值 是否必需
csp.sentinel.dashboard.server 控制台的地址,指定控制台后客户端会自动向该地址发送心跳包。地址格式为:hostIp:port String null
csp.sentinel.heartbeat.interval.ms 心跳包发送周期,单位毫秒 long null 非必需,若不进行配置,则会从相应的 HeartbeatSender 中提取默认值
csp.sentinel.api.port 本地启动 HTTP API Server 的端口号 int 8719
csp.sentinel.heartbeat.client.ip 指定心跳包中本机的 IP String - 若不指定则通过 HostNameUtil 解析;该配置项多用于多网卡环境

日志相关配置项

名称 含义 类型 默认值 是否必需 备注
csp.sentinel.log.dir Sentinel 日志文件目录 String ${user.home}/logs/csp/ 1.3.0 引入
csp.sentinel.log.use.pid 日志文件名中是否加入进程号,用于单机部署多个应用的情况 boolean false 1.3.0 引入
csp.sentinel.log.output.type Record 日志输出的类型,file 代表输出至文件,console 代表输出至终端 String file 1.6.2 引入

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

你可能感兴趣的:(人在江湖之Spring,Cloud,aibaba,sentinel,控制台,日志配置,transport,spring,cloud)