控制台
Sentinel 控制台是一个轻量级的开源控制台,提供机器发现、健康情况管理、监控(单机和集群)、规则管理和推送等功能。通过控制台,可以直观地查看资源的运行情况,并动态配置规则。
控制台功能
Sentinel 控制台包含以下核心功能:
- 机器列表与健康情况:收集 Sentinel 客户端发送的心跳包,判断机器是否在线
- 实时监控:通过客户端暴露的监控 API,定期拉取并聚合应用监控信息,实现秒级实时监控
- 规则管理与推送:统一管理和推送规则,支持流控规则、熔断规则、系统规则等
- 鉴权:提供基本的登录功能
启动控制台
下载控制台
从 GitHub Release 页面下载最新版本的控制台 JAR 包:
wget https://github.com/alibaba/Sentinel/releases/download/1.8.8/sentinel-dashboard-1.8.8.jar
或者从源码构建:
git clone https://github.com/alibaba/Sentinel.git
cd Sentinel
mvn clean package
构建完成后,JAR 包位于 sentinel-dashboard/target/sentinel-dashboard.jar。
启动控制台
使用以下命令启动控制台:
java -Dserver.port=8080 \
-Dcsp.sentinel.dashboard.server=localhost:8080 \
-Dproject.name=sentinel-dashboard \
-jar sentinel-dashboard-1.8.8.jar
启动参数说明:
| 参数 | 说明 | 默认值 |
|---|---|---|
| server.port | 控制台端口 | 8080 |
| csp.sentinel.dashboard.server | 控制台地址 | - |
| project.name | 项目名称 | - |
访问控制台
打开浏览器访问 http://localhost:8080,默认用户名和密码都是 sentinel。
客户端接入控制台
引入依赖
客户端需要引入 Transport 模块来与控制台通信:
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
<version>1.8.8</version>
</dependency>
配置启动参数
启动应用时添加 JVM 参数:
-Dcsp.sentinel.dashboard.server=localhost:8080
如果启动多个应用,需要指定客户端监控 API 的端口:
-Dcsp.sentinel.dashboard.server=localhost:8080
-Dcsp.sentinel.api.port=8719
Spring Boot 配置方式
在 Spring Boot 应用中,可以通过配置文件指定:
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8080
port: 8719
触发客户端初始化
Sentinel 是懒加载的,需要确保客户端有访问量。首次调用时,Sentinel 会进行初始化,开始向控制台发送心跳包。
控制台界面介绍
机器列表
在"机器列表"页面可以查看接入控制台的所有应用及其机器状态:
- 应用名称
- 机器 IP 和端口
- 心跳时间
- 健康状态
簇点链路
"簇点链路"页面展示资源的调用链路,提供两种视图:
树状链路:以树形结构展示资源的调用关系
machine-root
├── entrance1
│ ├── resourceA
│ └── resourceB
└── entrance2
└── resourceA
平铺链路:不区分调用关系,展示资源的实时情况
资源信息包括:
- 通过 QPS
- 拒绝 QPS
- 平均响应时间
- 并发线程数
实时监控
"实时监控"页面汇总同一服务下所有机器的簇点信息,以秒级频率展示:
- 通过 QPS
- 拒绝 QPS
- 响应时间
- 异常数
注意:实时监控仅存储 5 分钟以内的数据。如需持久化,需要通过 API 定制。
规则管理
控制台支持管理以下规则:
- 流控规则:流量控制规则配置
- 熔断规则:熔断降级规则配置
- 热点规则:热点参数限流规则配置
- 系统规则:系统自适应保护规则配置
- 授权规则:黑白名单授权规则配置
规则推送模式
原始模式
原始模式下,规则通过客户端暴露的 HTTP API 进行查询和修改。规则仅在内存中生效,应用重启后会丢失。
适用场景:开发测试环境
Pull 模式
客户端主动从规则源(如文件、数据库)拉取规则:
// 自定义规则源
public class FileRuleSource implements ReadableDataSource<String, List<FlowRule>> {
@Override
public List<FlowRule> readSource() throws Exception {
// 从文件读取规则
String content = Files.readString(Paths.get("rules.json"));
return JSON.parseArray(content, FlowRule.class);
}
}
// 注册规则源
ReadableDataSource<String, List<FlowRule>> flowRuleSource = new FileRuleSource();
FlowRuleManager.register2Property(flowRuleSource.getProperty());
Push 模式(推荐)
控制台将规则推送到规则中心(如 Nacos),客户端监听规则中心获取规则:
spring:
cloud:
sentinel:
datasource:
flow:
nacos:
server-addr: localhost:8848
dataId: ${spring.application.name}-flow-rules
groupId: SENTINEL_GROUP
rule-type: flow
degrade:
nacos:
server-addr: localhost:8848
dataId: ${spring.application.name}-degrade-rules
groupId: SENTINEL_GROUP
rule-type: degrade
Push 模式的优点:
- 规则持久化存储
- 支持规则版本管理
- 规则变更实时生效
- 支持多环境管理
控制台配置项
控制台支持通过 JVM 参数或环境变量配置:
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| auth.enabled | boolean | true | 是否开启登录鉴权 |
| sentinel.dashboard.auth.username | String | sentinel | 登录用户名 |
| sentinel.dashboard.auth.password | String | sentinel | 登录密码 |
| server.servlet.session.timeout | String | 30分钟 | Session 过期时间 |
| sentinel.dashboard.app.hideAppNoMachineMillis | Integer | 0 | 隐藏无健康节点应用的时间 |
| sentinel.dashboard.removeAppNoMachineMillis | Integer | 0 | 删除无健康节点应用的时间 |
| sentinel.dashboard.unhealthyMachineMillis | Integer | 60000 | 主机失联判定时间 |
| sentinel.dashboard.autoRemoveMachineMillis | Integer | 0 | 自动删除失联节点的时间 |
配置示例:
java -Dsentinel.dashboard.auth.username=admin \
-Dsentinel.dashboard.auth.password=admin123 \
-Dserver.servlet.session.timeout=60m \
-jar sentinel-dashboard-1.8.8.jar
生产环境部署
安全配置
生产环境建议:
- 修改默认用户名和密码
- 配置 HTTPS
- 配置防火墙规则,限制访问 IP
高可用部署
Sentinel 控制台目前仅支持单机部署。如需高可用:
- 部署多个控制台实例
- 使用负载均衡器分发请求
- 共享规则存储(如 Nacos)
监控数据持久化
控制台默认只保存 5 分钟的监控数据。如需持久化:
- 调用监控 API 获取数据
- 将数据存储到时序数据库(如 InfluxDB、Prometheus)
- 使用 Grafana 进行可视化
// 获取监控数据
curl http://localhost:8719/metric?startTime=1609459200000&endTime=1609459260000
常见问题
1. 控制台看不到应用?
检查:
- 客户端是否添加了
sentinel-transport-simple-http依赖 - 启动参数是否正确配置了控制台地址
- 应用是否有访问量(Sentinel 是懒加载)
- 检查
${user.home}/logs/csp/sentinel-record.log日志
2. 规则配置后不生效?
检查:
- 控制台版本与客户端版本是否一致
- 资源名称是否正确
- 规则配置是否正确
3. 监控数据不显示?
检查:
- 控制台与应用机器时间是否一致
- 客户端 API 端口是否正确(默认 8719)
- 防火墙是否开放端口
下一步
- Spring Cloud 整合 - 学习与 Spring Cloud Alibaba 整合
- 速查表 - 查阅常用配置和命令