Sentinel控制台面板空白和修改源码配置将流控和降级规则持久化到Nacos

文章目录

  • 问题
  • 问题1
    • 原因
    • 解决
  • 问题2
  • 仍然存在的问题

Sentinel官网

问题

使用docker部署的springboot和sentinel并且是在不同的云服务器上,sentinel是直接用docker拉取的bladex/sentinel-dashboard

  • Sentinel控制台可以看到启动的项目,但是监控界面是空白的,看了下Sentinel日志,一直报Failed to fetch metric from

  • 控制台新增的规则都只是保存在内存中,服务器重启就无了,要持久化必须要nacos配置文件手写,之前只找到流控规则咋写,一直没找到降级规则如何在配置文件中配置…所以想着能不能在控制台添加规则自动推送到nacos持久化

问题1

  • Sentinel控制台可以看到启动的项目,但是监控界面是空白的,看了下Sentinel日志,一直报Failed to fetch metric from

原因

  • Sentinel需要两个端口,一个是Sentinel服务端的端口,默认8858,还有一个访问客户端需要的端口,默认从8719开始,如果被占用了就自动+1,所以我们客户端在启动时也需要对8719进行映射和放开防火墙跟安全组
  • Sentinel是根据时间点拉取的,所以客户端跟服务端的时间需要保持一样,而我的sentinel是使用docker拉取部署的,内部时间是UTC时间比我们本地时间早了8小时左右,所以需要配置一下保持两边时间都一样

解决

  • 在部署SpringBoot客户端时,不止要映射自己项目的启动端口,还需要映射一下8719端口-p 8719:8719,如果多个微服务项目,则一次+1:8720、8721,并放开对应的防火墙端口和安全组。并且在我们SpringBoot项目中需要指定客户端IP,不然他默认读取的是docker的内网IP。
spring:
  cloud:
    sentinel:
      transport:
        dashboard: Sentinel服务端IP:Sentinel服务端启动端口
        port: 客户端端口(8719)
        client-ip: 客户端IP(指定部署springboot项目云服务器的外网IP)
      eager: true
  • 时间问题
    在Sentinel服务端和SpringBoot项目客户端部署时加上-v /etc/localtime:/etc/localtime:ro
    加上这个后进入容器输入date,发现时间已经是北京时间了,但是logs发现tomcat打印的日志时间还是不对,发现还要再进入容器echo "Asia/Shanghai" > /etc/timezone,就OK了

问题2

要实现Sentinel控制台添加规则自动推送到Nacos,需要我们去下载Sentinel源码,然后去修改一些代码才能实现。我也是百度看其他大佬的博客慢慢搞的,这边推荐一个最快捷的

  • https://blog.csdn.net/lilizhou2008/article/details/97075236
    这篇文章写了如何实现推送限流规则到Nacos,并且提供了配置好的项目,我们拉取打包直接可用。他也把修改的文件都截图出来了,如果不使用他的版本,可以根据他修改的文件自己配一下~亲测可用
  • 当然,这篇文章的配置都是默认配置,如果需要修改配置就自己再配一下。
    比如Sentinel-dashboard启动端口是8080,我在配置文件中改成了8858,然后加了nacos地址和命名空间

Sentinel控制台面板空白和修改源码配置将流控和降级规则持久化到Nacos_第1张图片

server.port=8858
spring.cloud.config.nacos.server-addr=nacos地址:nacos端口号
spring.cloud.config.nacos.namespaces=nacos命名空间(看自己需不需要吧)

然后到com.alibaba.csp.sentinel.dashboard.rule.nacos.NacosConfig

	@Value("${spring.cloud.config.nacos.server-addr}")
    private String serverAddr;

    @Value("${spring.cloud.config.nacos.namespaces}")
    private String namespaces;

    @Bean
    public Converter<List<FlowRuleEntity>, String> flowRuleEntityEncoder() {
        return JSON::toJSONString;
    }

    @Bean
    public ConfigService nacosConfigService() throws Exception {
        Properties properties = new Properties();
        properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
        properties.put(PropertyKeyConst.NAMESPACE, namespaces);
        return ConfigFactory.createConfigService(properties);
    }

然后再mvn clean install打包一下 就可以用了~

Sentinel控制台面板空白和修改源码配置将流控和降级规则持久化到Nacos_第2张图片在流控规则-Nacos中新增规则,nacos配置中心中就会多出配置文件了~详情上面的文章都有了,这边就不多说了…
在这里插入图片描述## 通过sentinel-dashboard.jar生成docker镜像启动

  • 先上传jar到服务器上
  • 编写Docketfile文件
From java:8
ADD sentinel-dashboard.jar /app.jar
EXPOSE 8858
ENTRYPOINT ["java","-jar","/app.jar"]
RUN echo "Asia/Shanghai" > /etc/timezone

再启动镜像

docker run --name sentinel-dashboard \
-v /etc/localtime:/etc/localtime:ro \
-p 8858:8858 \
-d sentinel-dashboard

因为在Dockerfile中已经写了echo "Asia/Shanghai" > /etc/timezone,所以运行容器后不需要再进去写了。

仍然存在的问题

  1. 我有两个云服务器一个144,一个128。之前是在144用docker部署的Sentinel,用128部署的springboot项目。
           我在根据上面写的部署都配置好后,windows本地测试了一下是没有问题的。Sentinel拉取、推送都OK。然后就将sentilen-dashboard.jar上传到144服务器,并打包成docker容器部署。
           启动后发现sentinel控制台界面恢复成原来默认的一样
    Sentinel控制台面板空白和修改源码配置将流控和降级规则持久化到Nacos_第3张图片
           这里只有一条流控规则,我的流控规则-Nacos消失了。。。测试了一下,虽然可以从Nacos正常拉取到配置,但是没法推送到nacos了。
           试了好久各种改还是不行,我就将jar上传到128服务器部署了一下,又正常了。我整个人都懵逼了。。。一直没搞明白咋回事。希望后面有大佬看到能教教我。。。
  2. 我在128部署Sentinel后,cpu飙升,但是在144部署后却不会。用topdocker stats命令看了一下,发现飙升的容器不是sentinel,而是nacos。可是我144服务器也有部署nacos,并且是一个集群。我将128的nacos重启了下,就不会了。。
           nacos这cpu飙升之前也碰到过一次,莫名其妙突然就占用90%…但是这次是部署sentinel就飙升…一关sentinel就恢复正常。后面再慢慢解决吧,懵逼懵逼。

你可能感兴趣的:(Sentinel控制台面板空白和修改源码配置将流控和降级规则持久化到Nacos)