SpringCloud Alibaba整合Sentinel
Sentinel 控制台
1. 概述
Sentinel 提供一个轻量级的开源控制台,它提供机器发现以及健康情况管理、监控(单机和集群),规则管理和推送的功能。另外,鉴权在生产环境中也必不可少。这里,我们将会详细讲述如何通过简单的步骤就可以使用这些功能。
接下来,我们将会逐一介绍如何整合 Sentinel 核心库和 Dashboard,让它发挥最大的作用。同时我们也在阿里云上提供企业级的控制台:AHAS Sentinel 控制台,您只需要几个简单的步骤,就能最直观地看到控制台如何实现这些功能。
Sentinel 控制台包含如下功能:
- 查看机器列表以及健康情况:收集 Sentinel 客户端发送的心跳包,用于判断机器是否在线。
- 监控 (单机和集群聚合):通过 Sentinel 客户端暴露的监控 API,定期拉取并且聚合应用监控信息,最终可以实现秒级的实时监控。
- 规则管理和推送:统一管理推送规则。
- 鉴权:生产环境中鉴权非常重要。这里每个开发者需要根据自己的实际情况进行定制。
注意:Sentinel 控制台目前仅支持单机部署。
2. 启动控制台[Sentinel服务端]
2.1 获取 Sentinel 控制台
-
您可以从 release 页面 下载最新版本的控制台 jar 包。
-
您也可以从最新版本的源码自行构建 Sentinel 控制台:
- 下载 控制台 工程
- 使用以下命令将代码打包成一个 fat jar:
mvn clean package
2.2 启动
注意:启动 Sentinel 控制台需要 JDK 版本为 1.8 及以上版本。
使用如下命令启动控制台:
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
# 注意上述命令在PowerShell 执行不了,要在cmd中执行
其中 -Dserver.port=8080
用于指定 Sentinel 控制台端口为 8080
。
从 Sentinel 1.6.0 起,Sentinel 控制台引入基本的登录功能,默认用户名和密码都是 sentinel
。可以参考 鉴权模块文档 配置用户名和密码。
注:若您的应用为 Spring Boot 或 Spring Cloud 应用,您可以通过 Spring 配置文件来指定配置,详情请参考 Spring Cloud Alibaba Sentinel 文档。
Sentinel 客户端
FeginService.java
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
/**
* @Author xiongmin
* @Description //TODO
* @Date 2020/12/5 20:15
* @Version 1.0
**/
@FeignClient(value = "nacos-provider", fallback = FallBackFeginServiceImpl.class)
public interface FeginService {
@GetMapping(value = "/echo/{message}")
String echo(@PathVariable String message);
@GetMapping(value = "/test/{message}")
String test(@PathVariable String message);
}
FallBackFeginServiceImpl.java
import org.springframework.stereotype.Component;
/**
* @Author xiongmin
* @Description //TODO
* @Date 2020/12/13 19:54
* @Version 1.0
**/
@Component
public class FallBackFeginServiceImpl implements FeginService {
@Override
public String echo(String message) {
String result = "FallBack echo() method";
return result;
}
@Override
public String test(String message) {
String result = "FallBack test() method";
return result;
}
}
编写一个SpringCloud的消费者用例,配置如下:
前提,要先启动Nacos和Sentinel
spring:
application:
name: nacos-consumer-feign
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
sentinel:
transport:
port: 8720
dashboard: localhost:8080
server:
port: 9092
feign:
sentinel:
enabled: true
management:
endpoints:
web:
exposure:
include: "*"
- 应用名称为
nacos-consumer-feign
,如果不指定,在dashboard上就会显示你的包路径,很丑。 spring.cloud.sentinel.transport.port
是本地启的端口,与dashboard
进行数据交互。官方文档是这样写的:这里的spring.cloud.sentinel.transport.port
端口配置会在应用对应的机器上启动一个 Http Server,该 Server 会与 Sentinel 控制台做交互。比如 Sentinel 控制台添加了一个限流规则,会把规则数据 push 给这个 Http Server 接收,Http Server 再将规则注册到 Sentinel 中。spring.cloud.sentinel.transport.dashboard
是指明了dashboard
的地址,格式为IP:Port
。
Sentinel 客户端注册到SentinelDashboard 需要时间,项目启动之后可能要等待一会;如果SentinelDashboard一直没有加载Sentinel 客户端的话,可以将服务提供者暂时关闭,那么请求接口就会在SentinelDashboard有记录。
如果SentinelDashboard检测到Sentinel 客户端的话,那么此时会多一个名为
应用程序名
的服务
参考链接