sentinel.yaml
sentinel.yaml 用于连接 Sentinel 控制台,并从 Nacos 读取各微服务的限流、熔断和其他保护规则。
一、需要修改的配置
部署时主要修改控制台地址和五组规则数据源的 Nacos 连接信息。规则类型及命名模板通常保留原值。
| 配置位置 | 需要填写或核对的内容 |
|---|---|
spring.cloud.sentinel.transport.dashboard | 实际 Sentinel 控制台地址,例如 192.168.1.10:8081 |
spring.cloud.sentinel.datasource.*.nacos.server-addr | 实际 Nacos 地址,例如 192.168.1.10:8848;五组数据源均需修改 |
spring.cloud.sentinel.datasource.*.nacos.username、password | 实际 Nacos 账号和密码;五组数据源均需修改 |
spring.cloud.sentinel.datasource.*.nacos.namespace | 规则存放在自定义 Namespace 时,在各数据源中补充实际 Namespace ID |
spring.cloud.sentinel.datasource.*.nacos.groupId | 与 Nacos 中规则配置的 Group 一致;使用交付分组时保留 SENTINEL_GROUP |
spring.cloud.sentinel.datasource.*.nacos.dataId | 通常保留 ${spring.application.name}-规则类型-rules 模板,在 Nacos 中按服务实际名称创建对应规则配置 |
spring.cloud.sentinel.transport.port | 通常保留 8719;同机多实例或网络限制时,检查实际通信端口及控制台回连地址 |
表格中的 * 代表 flow、degrade、system、authority、param-flow 五组数据源。它们的连接配置需要分别检查;rule-type 保留各自原值。
容器名称仅适用于能够解析这些名称的部署网络;源码或跨服务器部署时,改为业务服务实际可访问的 IP 或域名。各服务共用这份配置,并通过应用名称读取自己的规则,不需要逐个修改 Data ID 模板。
二、配置示例
spring:
cloud:
sentinel:
transport:
port: 8719
dashboard: shoptnt-sentinel-dashboard:8081
datasource:
flow:
nacos:
server-addr: shoptnt-nacos:8848
username: Nacos用户名
password: Nacos密码
dataId: ${spring.application.name}-flow-rules
groupId: SENTINEL_GROUP
rule-type: flow
degrade:
nacos:
server-addr: shoptnt-nacos:8848
username: Nacos用户名
password: Nacos密码
dataId: ${spring.application.name}-degrade-rules
groupId: SENTINEL_GROUP
rule-type: degrade
system:
nacos:
server-addr: shoptnt-nacos:8848
username: Nacos用户名
password: Nacos密码
dataId: ${spring.application.name}-system-rules
groupId: SENTINEL_GROUP
rule-type: system
authority:
nacos:
server-addr: shoptnt-nacos:8848
username: Nacos用户名
password: Nacos密码
dataId: ${spring.application.name}-authority-rules
groupId: SENTINEL_GROUP
rule-type: authority
param-flow:
nacos:
server-addr: shoptnt-nacos:8848
username: Nacos用户名
password: Nacos密码
dataId: ${spring.application.name}-param-flow-rules
groupId: SENTINEL_GROUP
rule-type: param-flow
shoptnt-sentinel-dashboard 和 shoptnt-nacos 是容器地址示例。使用源码部署或跨服务器部署时,应替换为业务服务能够访问的实际 IP 或域名;用户名和密码也应填写实际 Nacos 账号。
三、Sentinel 控制台连接
| 配置项 | 示例值 | 说明 |
|---|---|---|
transport.dashboard | shoptnt-sentinel-dashboard:8081 | Sentinel 控制台地址,填写控制台实际的主机与端口 |
transport.port | 8719 | 业务服务侧 Sentinel 通信端口,供控制台访问该服务的监控和规则信息;不是业务 API 端口,也不是控制台端口 |
业务服务需要能够连接控制台;控制台也需要能够回连业务服务实际的 Sentinel 通信地址和端口。多实例在同一主机运行时,应检查实际监听端口,避免端口冲突或控制台连接到错误实例。
Sentinel 通常在首次访问受保护资源时初始化并上报。服务刚启动时控制台未显示应用,可先访问相关业务接口,再检查控制台和通信日志。详见 Sentinel 控制台说明。
四、Nacos 规则数据源
datasource 下的五组配置分别对应五类规则。每一组的 Nacos 地址、认证信息、Data ID 和 Group 都需要正确,公共配置中设置过 Nacos 地址并不意味着这里可以不检查。
| 配置项 | 说明 | 修改要求 |
|---|---|---|
server-addr | 保存 Sentinel 规则的 Nacos 地址 | 五组数据源均需调整为实际地址 |
username、password | 读取规则使用的 Nacos 账号和密码 | 五组均使用实际账号,并确保具备对应规则的读取权限 |
dataId | 当前规则在 Nacos 中的 Data ID | 与 Nacos 中创建的配置名称完全一致 |
groupId | 规则配置所在的 Group | 示例统一为 SENTINEL_GROUP,与实际创建的 Group 一致 |
rule-type | 该数据源读取的规则类型 | 保留与当前规则对应的值,不要将不同类型混用 |
本示例未显式设置各数据源的 namespace。如果规则存放在自定义 Namespace 中,需要在各组 nacos 节点下配置对应的 Namespace ID,确保读取到正确环境,不能仅根据业务服务注册成功判断规则读取正确。
五类规则的用途
| 数据源 | rule-type | 用途 | Data ID 模板 |
|---|---|---|---|
flow | flow | 流量控制,按资源的 QPS、并发线程数等指标限制流量 | ${spring.application.name}-flow-rules |
degrade | degrade | 熔断降级,在慢调用或异常等条件达到阈值时限制调用,降低故障扩散影响 | ${spring.application.name}-degrade-rules |
system | system | 系统保护,从应用整体入口流量、响应时间、负载等维度保护服务 | ${spring.application.name}-system-rules |
authority | authority | 来源访问控制,按应用识别的调用来源设置黑名单或白名单 | ${spring.application.name}-authority-rules |
param-flow | param-flow | 热点参数限流,对资源调用中的热点参数值单独控制流量 | ${spring.application.name}-param-flow-rules |
来源访问控制依赖应用对调用来源的识别;热点参数规则依赖相应资源及参数的接入。仅填写数据源地址,不代表这些规则已自动覆盖所有接口或请求参数。规则类型说明可参考 Sentinel 资源与规则。
五、Data ID 命名与规则内容
${spring.application.name} 会替换为当前应用名称。假设商品服务的应用名称为 goods-service,应在 Nacos 中使用以下名称:
| 规则类型 | Data ID | Group |
|---|---|---|
| 流量控制 | goods-service-flow-rules | SENTINEL_GROUP |
| 熔断降级 | goods-service-degrade-rules | SENTINEL_GROUP |
| 系统保护 | goods-service-system-rules | SENTINEL_GROUP |
| 来源访问控制 | goods-service-authority-rules | SENTINEL_GROUP |
| 热点参数限流 | goods-service-param-flow-rules | SENTINEL_GROUP |
其他服务使用各自的应用名称,例如交易服务的流控规则为 trade-service-flow-rules。这里的 Data ID 没有 .yaml 后缀,应按配置中的实际名称创建,不要额外添加后缀。
sentinel.yaml 保存的是连接和规则读取方式,具体规则内容保存在上表对应的 Nacos 配置中。当前未指定 data-type,Spring Cloud Alibaba 的内置规则转换默认使用 JSON;规则内容应为对应类型的 JSON 数组,而不是复制本页的 YAML。参考 Spring Cloud Alibaba Sentinel 数据源说明。
暂不配置某类规则时,可使用空数组:
[]
空数组表示该数据源没有规则,不会自动生成限流或熔断阈值。已有规则配置改为 [] 会清空该配置对应的规则,修改前应确认操作范围。
六、规则修改与生效
修改规则时,在 Nacos 中选择目标服务对应的 Data ID,核对 Namespace、Group 和规则内容后发布。客户端通过 Nacos 数据源监听规则变化,加载成功后应用对应规则。
本页配置了从 Nacos 读取规则,并不等于 Sentinel 控制台已具备向 Nacos 写回规则的能力。仅在默认控制台页面修改规则,不能据此认定规则已经持久化到 Nacos。需要持久化的规则,应发布到对应的 Nacos 配置;如果交付的控制台已集成 Nacos 写入功能,则按交付方式操作。详见 Sentinel 动态规则扩展。
修改控制台地址、Nacos 连接地址或认证信息后,应核对服务实际加载情况,并按当前版本的配置刷新能力重启受影响的服务;不要将“规则内容可动态更新”理解为所有连接配置都可即时刷新。
七、部署后检查
- 确认各服务已加载
sentinel.yaml,且应用名称与规则 Data ID 的前缀一致。 - 确认业务服务可以访问 Sentinel 控制台和 Nacos,控制台可以回连业务服务的 Sentinel 通信端口。
- 访问相关业务接口,检查控制台是否出现应用、实例和资源。
- 在 Nacos 中核对规则所在的 Namespace、
SENTINEL_GROUP和 Data ID,检查服务日志是否存在认证失败、配置读取失败或规则解析异常。 - 配置实际规则后,在测试环境验证对应资源的限流、熔断或其他保护行为,确认效果符合预期。