# sentinel-dashboard
**Repository Path**: mixcloud/sentinel-dashboard
## Basic Information
- **Project Name**: sentinel-dashboard
- **Description**: sentinel持久化-基于1.8.5版本
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-11-13
- **Last Updated**: 2025-11-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Sentinel 控制台
## 0. 概述
本项目是完整的Sentinel控制台,基于官方的**1.8.5**版本。Sentinel 控制台是流量控制、熔断降级规则统一配置和管理的入口,它为用户提供了机器自发现、簇点链路自发现、监控、规则配置等功能。在 Sentinel 控制台上,我们可以配置规则并实时查看流量控制效果。比较遗憾的是官方未提供对于zookeeper,nacos,apollo的直接的持久化支持,需要开发者进行二次开发才能使用,所以这里统一做成配置的方式,后续使用仅需配置参数传入即可。同时提供docker-compose部署的脚本和镜像支持。可以直接通过容器部署使用。

关于官方的介绍可以查看这里:[Sentinel 控制台](https://github.com/alibaba/Sentinel/tree/master/sentinel-dashboard)
## 1.关于持久化
首先,本代码基于两位大佬@FJiayang,@jnan806 的贡献,在此基础上简单修复了一下些小问题。在官方基础上支持了zookeeper,nacos,apollo的支持,如果不增加持久化参数就是默认(内存的方式)。通过配置参数注入,同时支持docker部署,提供docker-compose和对应的docker镜像。
更多持久化方式需要开发者自定义,这是官方给出的参考:[动态规则扩展](https://github.com/alibaba/Sentinel/wiki/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%99%E6%89%A9%E5%B1%95)
## 2.持久化的配置参数
项 | 类型 | 默认值 | 最小值 | 描述
--- | --- | --- | --- | ---
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 | 距离最近心跳时间超过指定时间是否自动删除失联节点,默认关闭
datasource.provider | String | memory | 无 | 默认为 `memory`, 可选持久化配置 `nacos`、`apollo`、`zookeeper`
datasource.provider.nacos.server-addr | String | localhost:8848 | 无 | nacos 注册中心地址
datasource.provider.nacos.username | String | | 无 | nacos 用户名,默认为空
datasource.provider.nacos.password | String | | 无 | nacos 密码,默认为空
datasource.provider.nacos.namespace | String | | 无 | nacos 名臣空间,默认为空
datasource.provider.nacos.group-id | String | SENTINEL_GROUP | 无 | nacos 分组,默认为 `SENTINEL_GROUP`
datasource.provider.apollo.server-addr | String | http://localhost:10034 | 无 | apollo 注册中心地址,必须有前缀 `http://` 或 `https://`
datasource.provider.apollo.token | String | token | 无 | apollo 登录 token,默认为 `token`
datasource.provider.zookeeper.server-addr | String | localhost:2181 | 无 | zookeeper 注册中心地址
datasource.provider.zookeeper.session-timeout | Integer | 60000 | 0 | zookeeper session超时时间,默认 `60000`
datasource.provider.zookeeper.connection-timeout | Integer | 15000 | 0 | zookeeper connection超时时间,默认 `15000`
datasource.provider.zookeeper.retry.max-retries | Integer | 3 | 0 | zookeeper 最大重试次数, 默认 `3`
datasource.provider.zookeeper.retry.base-sleep-time | Integer | 1000 | 1000 | zookeeper 重试间隔最小时长,默认 `1000`
datasource.provider.zookeeper.retry.max-sleep-time | Integer | 2147483647 | 0 | zookeeper 重试间隔最大时长,默认 `2147483647`
官方参考:[Sentinel 控制台功能介绍](https://github.com/alibaba/Sentinel/blob/master/sentinel-dashboard/Sentinel_Dashboard_Feature.md)。上面`datasource.provider`开头的都是新增的
## 3.控制台部署方式
### 方式一:源码编译与jar包部署
此方式适用于开发者对项目再次二次开发后使用。使用如下命令将代码打包成一个 jar:
```bash
mvn clean package -U -Dmaven.test.skip=true
```
编译后会得到一个jar包,对于jar包使用如下命令启动编译后的控制台:
```bash
java -Dserver.port=8858 \
-Dcsp.sentinel.dashboard.server=localhost:8858 \
-Dproject.name=sentinel-dashboard \
-jar sentinel-dashboard.jar
```
对于新加入的参数可以通过`-D`为前缀的方式注入。
### 方式二:docker-compose部署
下面以zookeeper作为持久化为例,对应的docker镜像地址参见:[sentinel-dashboard镜像](https://hub.docker.com/r/linking0606/sentinel-dashboard)
```yml
version: '3'
services:
sentinel:
image: linking0606/sentinel-dashboard:latest
container_name: sentinel
restart: always
environment:
- "PARAM=-Dserver.port=8858 -Dcsp.sentinel.dashboard.server=localhost:8858 -Dproject.name=sentinel-dashboard -Ddatasource.provider=zookeeper -Ddatasource.provider.zookeeper.server-addr=zk1:2181,zk2:2182,zk3:2183"
ports:
- "8858:8858"
networks:
- mynet
volumes:
mydata:
external: true
networks:
mynet:
driver: bridge
```
## 4.客户端接入的配置方式
对于sentinel的接入,下面以springcloud为例,主要是引入`spring cloud alibaba sentinel`的依赖,详细可以参考官方文档[Spring Cloud Alibaba Sentinel](https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel)。
```xml
com.alibaba.cloud
spring-cloud-starter-alibaba-sentinel
2.2.4.RELEASE
```
默认会将系统内所有的 URL 就自动成为 Sentinel 中的埋点资源,可以针对某个 URL 进行流控。
然后增加对于控制台地址的配置就好了
application.yml
```yml
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8858 #sentinel-dashboard控制台的地址
```
如果使用基于内存的方式这样就完成了。
要想实现持久化配置,这里还是以zookeeper为例,需要引入对应依赖
```xml
org.apache.zookeeper
zookeeper
3.4.14
org.slf4j
slf4j-log4j12
slf4j-api
org.slf4j
log4j
log4j
com.alibaba.csp
sentinel-datasource-zookeeper
1.8.5
zookeeper
org.apache.zookeeper
org.apache.commons
commons-lang3
3.12.0
```
然后增加对应的配置
```yml
# 这里定义了一个全局变量,为zookeeper的地址,请填写为您真是的地址
myurl:
zk: 192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181
spring:
cloud:
sentinel:
datasource:
#流控规则
flow:
zk:
server-addr: ${myurl.zk}
groupId: sentinel_rule_config/${spring.application.name}
dataId: flow-rules
# 规则类型,取值见:
# org.springframework.cloud.alibaba.sentinel.datasource.RuleType
rule-type: flow
#熔断降级
degrade:
zk:
server-addr: ${myurl.zk}
groupId: sentinel_rule_config/${spring.application.name}
dataId: degrade-rules
rule-type: degrade
#系统规则
system:
zk:
server-addr: ${myurl.zk}
groupId: sentinel_rule_config/${spring.application.name}
dataId: system-rules
rule-type: system
#授权规则
authority:
zk:
server-addr: ${myurl.zk}
groupId: sentinel_rule_config/${spring.application.name}
dataId: authority-rules
rule-type: authority
#参数规则
param-flow:
zk:
server-addr: ${myurl.zk}
groupId: sentinel_rule_config/${spring.application.name}
dataId: param-rules
rule-type: param-flow
```
更多接入方式可以参考官方文档:[主流框架的适配](https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E6%B5%81%E6%A1%86%E6%9E%B6%E7%9A%84%E9%80%82%E9%85%8D#spring-cloud)
## 5.关于二次开发后的镜像制作
### 5.1完成开发后编译代码
```bash
mvn clean package -U -Dmaven.test.skip=true
```
### 5.2制作镜像
在DockerFile同级目录下执行下面步骤便完成了镜像的制作(这里准备上传到dockerhub仓库)
```bash
docker build -t 您的账户名称/sentinel-dashboard:latest .
docker build -t goharbor.jomoo.cn/nisbos/sentinel-dashboard:1.8.5.7 .
```
### 5.3镜像上传到dockerhub
```bash
# 登录dockerhub
docker login --username=您的账户名称
# 上传镜像
docker push 您的账户名称/sentinel-dashboard:latest
docker push goharbor.jomoo.cn/nisbos/sentinel-dashboard:1.8.5.7
```
专利课题
基于sentinel持久化以及机器同步