SpringCloud 微服务监控方案sentinel + spring boot admin

前言:项目基于springcloud框架,服务注册中心使用的是Eureka

spring boot admin 完整构建过程

  1. 只需要搭建一个spring boot admin客户端

    所需依赖

    spring-cloud-starter-netflix-eureka-client将spring boot admin客户端注册到Eureka

    spring boot admin 底层还是调用的actuator的接口获取的数据,需要添加actuator的依赖

    spring-boot-admin-starter-server客户端依赖,该依赖应该与spring boot的版本一致,否则可能会导致依赖冲突,spring boot admin 2.2.0以后的页面才开始支持中文

           <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>2.1.5</version></dependency>
    

    启动类中添加@EnableAdminServer注解

    application.yml中需要添加

    management:health:redis:enabled: false  #防止因为redis而导致健康检查不过,导致在admin中显示应用状态为downmail:enabled: false  endpoints:web:exposure:include: "*"   #这里因为是测试可以用*,暴露所有,但生产环境需要特别设置endpoint:health:show-details: always
    
  2. 其他想要注册到spring boot admin客户端的应用只需要注册到Eureka并添加actuator依赖就可以在页面看到了

            <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
    

    application.yml中也需要添加

    server:port: 9002servlet:context-path: /test
    eureka:client:service-url:defaultZone: http://127.0.0.1:6868/eureka/instance:prefer-ip-address: true##如果项目有上下文请求路径的配置需要加以下配置,不然admin扫描不到对应的应用metadata-map:management:context-path: ${server.servlet.context-path}/actuatorhealth-check-url-path: actuator/healthstatus-page-url-path: actuator/infomanagement:health:redis:enabled: falseendpoints:web:exposure:include: "*"endpoint:health:show-details: always

后面发现个很严重的问题,我们项目使用的druid多数据源,配置springbootadmin后发现数据库连接池被占满了,这个时候需要修改配置文件加上以下配置后解决

management:endpoint:configprops:enabled: false
访问spring boot admin客户端应用对外暴露的端口就可以打开页面了

如果项目使用了spring security 需要把spring boot admin的相关请求放过,不然无法访问主页

 @Overridepublic void configure(HttpSecurity http) throws Exception {//所有请求必须认证通过http.authorizeRequests().antMatchers("/","/instances/**","/sba-settings.js","/assets/**","/actuator/**","/applications") //配置地址放行.permitAll().anyRequest().authenticated();                  //其他地址需要认证授权super.configure(http);}

访问地址:http://ip:port/context-path/#/applications


这里我注册了五个应用进来,有2个健康检查有问题,我没去管,反正只是测试
还可以查看应用当天的日志

日志这个需要在应用的application.yml中添加配置

logging:level:xxx.xxx.**: debug#  方便Spring Boot Admin页面上实时查看日志file: D:/log/file/info.log

应用的日志配置文件logback.xml也需要特别设置,下面只说关键位置的修改

注释掉,可以打印出项目的所有日志,和同时存在,当天的日志名称就为info.log,当过渡到第二天的一瞬间会把info.log名字变更为{yyyy-MM-dd}info.log前一天的日期,同时产生一个新的info.log记录当天的日志,所以上面application.ym配置中只需要监听file: D:/log/file/info.log 这个日志文件名就可以了

<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--        <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
<!--            <level>INFO</level>-->
<!--            <onMatch>ACCEPT</onMatch>-->
<!--            <onMismatch>DENY</onMismatch>-->
<!--        </filter>-->  <file>${FILE_PATH}/info.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">    <fileNamePattern>${FILE_PATH}/%d{yyyy-MM-dd}info.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %yellow(%-5level) %red(%logger) --- [%thread] %highlight(%class %method) %line -%msg%n</Pattern></encoder></appender>

阿里的sentinel搭建过程

查看https://github.com/alibaba/Sentinel sentinel github地址

sentinel有三种规则的推送模式,生产一般使用push模式

push模式需要下载源码进行一些改造,这里使用将sentinel的(流控规则、熔断规则、热点规则、系统规则、授权规则)五种规则持久化到nacos配置中心,配置我们自己的nacos地址,实现sentinel和nacos配置的双向的流转和实时变更,即使重启应用服务,也会从nacos读取之前的规则配置信息,实现持久化

下载Sentinel源码,打开sentinel-dashboard模块,对该模块进行如下的改造

  1. 修改pom文件中的如下依赖,注释掉test scope
        <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId><!--<scope>test</scope>--></dependency>
  1. 打开application.properties文件,添加Nacos相关配置。

    nacos.address=localhost:8848
    # 如果要指定namespace就填入,不填默认是public。groupId默认值SENTINEL_GROUP。
    nacos.namespace=32263b9a-140f-4121-baf1-11e57bf63b21
    # 如果Nacos开启了鉴权,添加账号密码。
    nacos.username=nacos
    nacos.password=nacos
    
  2. 修改 com.alibaba.csp.sentinel.dashboard.rule.nacos.NacosConfig类,引入刚刚填写的配置信息

  3. 复制src/test/java/com/alibaba/csp/sentinel/dashboard/rule/nacos整个文件夹到src/main/java/com/alibaba/csp/sentinel/dashboard/rule文件夹下

  4. 打开com.alibaba.csp.sentinel.dashboard.controller.v2.FlowControllerV2类,注入我们刚刚的限流规则类。

  5. 打开src/main/webapp/resources/app/scripts/directives/sidebar/sidebar.html,找到dashboard.flowV1({app: entry.app})修改为dashboard.flow({app: entry.app})。

  6. 打开src/main/webapp/resources/app/scripts/controllers/identity.js,把FlowServiceV1改为FlowServiceV2

到这里限流规则持久化到nacos就改造完了,其他几种规则差别不大,对应的controller需要单独修改

使用方法:修改sentinel-dashboard模块下的application.properties文件中Nacos相关配置为自己的nacos配置 前往源码根目录执行mvn package -DskipTests打包。 运行sentinel-dashboard/target文件夹下的jar包即可。

jar包可以找我要,哈哈哈

项目如何接入sentinel-dashboard

  1. 启动sentinel-dashboard的jar包,端口已经修改为9000

  2. 项目pom中添加如下依赖

            <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.2.1.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2.1.4.RELEASE</version></dependency><!--sentinel规则持久化到nacos--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId><version>1.8.0</version></dependency>
    

    getway网关加入到sentinel需要多加配置

    pom中加 <!--sentinel整合gatway--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId><version>2.1.4.RELEASE</version></dependency>
    application.yml中加
    gateway:metrics:enabled: true
    
  3. bootstrap.yml中添加配置

    spring:cloud:nacos:config:server-addr: ip:8848 # nacos服务地址
    
  4. application.yml中添加配置

    spring:cloud:sentinel:transport:port: 9025 #客户端端口dashboard: localhost:9000 #控制台地址client-ip: localhost   #本服务的ipnamespace: 32263b9a-140f-4121-11e57bf63b25datasource: #持久化规则到nacosflow:nacos:server-addr: xxx:xxxusername: nacospassword: nacosnamespace: 32263b9a-140f-4121-baf1-11e57bf63b25groupId: SENTINEL_GROUPdataId: ${spring.application.name}-flow-rulesrule-type: flowdegrade:nacos:server-addr: xxx:xxxusername: nacospassword: nacosnamespace: 32263b9a-140f-4121-baf1-11e57bf63b25groupId: SENTINEL_GROUPdataId: ${spring.application.name}-degrade-rulesrule-type: degradeparam-flow:nacos:server-addr: xxx:xxxusername: nacospassword: nacosnamespace: 32263b9a-140f-4121-baf1-11e57bf63b25groupId: SENTINEL_GROUPdataId: ${spring.application.name}-param-rulesrule-type: param-flowsystem:nacos:server-addr: xxx:xxxusername: nacospassword: nacosnamespace: 32263b9a-140f-4121-baf1-11e57bf63b25groupId: SENTINEL_GROUPdataId: ${spring.application.name}-system-rulesrule-type: systemauthority:nacos:server-addr: xxx:xxxusername: nacospassword: nacosnamespace: 32263b9a-140f-4121-baf1-11e57bf63b25groupId: SENTINEL_GROUPdataId: ${spring.application.name}-authority-rulesrule-type: authorityeager: true  #开启心跳,服务启动不需请求就可以注册到sentinel中management:health:redis:enabled: falseendpoints:web:exposure:include: "*"endpoint:health:show-details: always
    

五种规则都持久化到nacos中了,nacos和sentinel任意一方对规则的修改都能够互相影响了,重启服务会从nacos拉取之间的规则配置,持久化成功
访问sentinel的主页,我将sentinel-dashboard源码里面的端口改为了9000了
http://localhost:9000/#/login

还可以做的优化项
  1. sentinel监控信息的持久化还没做,需要持久化到数据库(最好是时序数据库influxdb),用grafana做展示,由于项目暂时没有必要就没做

SpringCloud 微服务监控方案sentinel + spring boot admin相关推荐

  1. SpringCloud微服务组件:Sentinel限流熔断

    点击关注公众号,实用技术文章及时了解 前言 什么是雪崩问题? 微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况. 解决雪崩问题的常见方式有四种: 超时处理:设定超时时间,请 ...

  2. 微服务技术方案:Spring Cloud 从入门到实战

    随着互联网技术的发展与不断创新,以及用户流量的不断增大,越来越多的企业项目面临大数据.高并发等问题,随之而来的就是通过分布式模型组建架构,微服务思想就集中体现了应用价值,2020 年的你还没有掌握微服 ...

  3. 阿里巴巴微服务核心手册:Spring Boot+Spring cloud+Dubbo

    前言 微服务作为一项在云中部署应用和服务的新技术已成为当下最新的热门话题.但大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务,而红帽说 API 应该是重点. 企业和服务提供商正在寻找 ...

  4. springboot controller访问不到_构建微服务:快速搭建Spring Boot项目

    Spring Boot简介: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员 ...

  5. 微服务监控方案(skywalking)

    1.概述 通过自建的监控和分布式调用链分析工具,帮助用户掌握微服务上线后的运行状况. 应用监控的指标包括应用的 QPS, 请求时间和请求出错率等.分布式调用链分析包括调用链查询和调用链详情.可以根据时 ...

  6. 怎样把一个项目加入微服务器,构建微服务:快速搭建Spring Boot项目

    Spring Boot简介: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员 ...

  7. Spring Boot Actuator与Spring Boot Admin详解

    原版文档: 文档:Spring Boot Actuator.note 链接:http://note.youdao.com/noteshare?id=fca965ad3f7ae3f79260d09056 ...

  8. Spring Boot Admin (Spring Clould Admin) 官方文档重点内容中文翻译

    GitHub地址 文章目录 1. Spring Boot Admin简介 2. 快速入门 2.1 配置Spring Boot Admin Server (SBA Server) 2.2 注册Clien ...

  9. Spring Boot Admin,贼好使

    Spring Boot Admin(SBA)是一个开源的社区项目,用于管理和监控 Spring Boot 应用程序.应用程序可以通过 http 的方式,或 Spring Cloud 服务发现机制注册到 ...

最新文章

  1. java gps时间转换工具_java 时间戳和时间互转工具 和 时间偏移量计算
  2. 01移动端布局基础之流式布局
  3. go监听mysql事件更新,有没有一种方法可以“监听”数据库事件并实时更新页面?...
  4. python界面颜色怎么改变_pycharm 界面风格修改
  5. QTableView中点击单元格弹出QComboBox
  6. 下载android 源码对应的kernel版本
  7. 高质量响应式的 HTML/CSS 网站模板
  8. Linux RPM软件包管理
  9. sybase相关的知识
  10. fetch与axios
  11. 苹果视频剪辑计算机配置,视频剪辑后期神器-创作PC黑苹果系统安装与台式电脑配置推荐...
  12. Windows Server 2012 R2 安装补丁KB2999226提示此更新不适合用于计算机
  13. 将m个相同的球全部放到n个相同的盒子里面有几种放法,盒子不能为空
  14. 一句话,连上隔壁老王家的 WiFi !
  15. domcontentloaded事件和laod事件区别
  16. 牛客网 Cutting Bamboos 【主席树+二分】
  17. 秦储一行拜访陕西省文联和陕西新华出版传媒集团
  18. 树:BFS,DFS解Leetcode电话号码的字母组合问题
  19. GIT 无法拉取,因为存在未提交的更改。 在重新拉取前提交或撤消更改
  20. linux使用sed进行字符替换

热门文章

  1. 安装部署vCenter 6.7
  2. 认真学习《天善学院数据分析师八大能力培养课程》
  3. 控制系统计算机仿真实验一,控制系统计算机仿真实验青岛科技大学
  4. 搬家了:http://shallwe2000.cc
  5. 蔷薇框架软件_蔷薇花园软件下载-蔷薇花园app下载v1.55 安卓版-2265安卓网
  6. 12届蓝桥杯省赛c++b组 J题 括号序列
  7. spring websocket性能调优
  8. 西储大学(CWRU)轴承数据集故障诊断(一):数据读取,数据集划分
  9. [渝粤教育] 西南科技大学 办公自动化原理及应用 在线考试复习资料(1)
  10. 网孔型初级维修电工实训考核装置