一文搞懂并学会使用SpringBoot的Actuator运行状态监控组件

简介: 微服务之后,系统结构拆分随着业务发展越来越微型化,也意味着节点会呈现几何数量级增长。每个一个节点都是系统组成部分,如何保持如此多节点的可用性是一件非常有挑战的工作。

闲言碎语:

最近刷抖音,看到了星爷的很多电影,感叹星爷给后世留下了很多的经典作品,我就在想,作为一名程序员,如何留下影响后人的经典传世之作呢,不经意间看到了一篇大佬的文章,已经近百万人浏览,这就是对后人的一种影响,然后就有了写这篇博客的冲动,结合最近在学习的SpringCloud,对每一个组件的原理和使用都进行深度的学习和理解,然后将心得写在博客里,如果有不对的地方还请大佬进行指正,小弟不胜感激

背景

微服务之后,系统结构拆分随着业务发展越来越微型化,也意味着节点会呈现几何数量级增长。每个一个节点都是系统组成部分,如何保持如此多节点的可用性是一件非常有挑战的工作。

 全方位监控变得越来越重要,当我们遇到bug时,总是希望可以看到更多信息,因此一般我们选用的服务开发框架都需要有方便又强大的监控功能支持。

 Spring Boot Actuator便可以帮助我们全方面监控应用节点.

 比如健康检查、审计、统计、HTTP追踪等。我们可以通过JMX或者HTTP endpoints来获得。spring Boot Admin配合下可以进行页面展示,也和可以与其它外部应用系统系统整合。

Actuator介绍

Actuator是SpringBoot的一个非常重要的功能,Actuator 为开发人员提供了SpringBoot运行状态信息,通过Actuator可以查看程序的运行状态的信息。同时它提供了运行状态的监控功能,Actuator的监控功能可以通过Rest、远程shell、JMX方式获得,首先我们介绍Rest方法来查看Actuator的节点方法,这种是十分简单的方法。

 Spring Boot Actuator 的关键特性是在应用程序里提供众多的Web节点,通过这些节点可以实时地了解应用程序的运行状况。有了Actuator,你可以知道Bean在Spring应用程序上下文里是如何组装在一 起的,并且可以获取环境属性的信息和运行时度量信息等。

Rest方法来查看Actuator

pom.xml引入Actuator依赖

首先在pom.xml种引入spring-boot-starter-actuator依赖,代码如下:

<dependency>
  <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-actuator</artifactId>
         <version>2.3.3.RELEASE</version>
</dependency>

配置application.yml

在application.yml中配置management.port和management.security.enabled,这俩是向外暴露actuator的端口和actuator的非安全验证方式。

 在这里指定actuator对外暴露的RestApi端口为9091,Spring1.5x默认采用了Actuator安全验证,为了能够在浏览器上展示效果,不做安全验证,将其设置为false。

management:
  server:
    port: 9091  # 对外暴露API接口端口为9001
    servlet:
      context-path: /sys
  security:
    enabled: false # 这是为了在浏览器上展示效果 所以设置为false
  endpoints:
    web:
      exposure:
        include: "*" # include表示需要暴露的endpoint,配置时使用“,”隔开,你也可以用*让所有endpoint暴露出来
  endpoint:
      health:
        enabled: true
        show-details: always # health endpoint只展示了简单的UP和DOWN状态。为了获得健康检查中所有指标的详细信息,可以设置其展示详细信息。
      shutdown:
        enabled: true

management.endpoint.health.show-details的默认值为never,除了always之外还有when-authorized。

 exclude表示在暴露endpoint时,排除掉哪些,同样使用“,”隔开,例如

management.endpoints.web.exposure.exclude=info # 排除info


注意如果不指定会默认采用程序的启动端口,这样做的目的就是将监控端口与项目端口进行区分。

不配置监控端口:localhost:8080/actuator/

  配置监控端口:localhost:9091/sys/actuator/

  特别注意:在2.0之后的版本访问地址必须要加上/actuator/才可以

运行项目

  就可以看到详细的信息了,以health为例:

请求路径:http://localhost:9091/sys/actuator/health
{
  status: "UP",
  components: {
    diskSpace: {
    status: "UP",
      details: {
        total: 161062318080,
        free: 103786217472,
        threshold: 10485760,
        exists: true
      }
    },
    ping: {
      status: "UP"
    }
  }
}

Actuator配合SpringBootSecurity

  actuator可以配合security进行权限控制,从而保护endpint。

  首先在pom.xml中引入SpringBootSecurity依赖:

<dependency>
   <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
</dependency>

配置application.xml

  添加:

spring.security.user.name = admin

spring.security.user.password = admin

  这样在我们访问localhost:9091/sys/actuator/的时候就会自动跳转到安全登录页面,提示我们输入用户名和密码。

 security:
    user:
      name: admin
      password: admin

运行项目

  我们的请求路径由http://localhost:9091/sys/actuator/自动变成了http://localhost:9091/sys/login,输入配置好的用户名和密码,就可以看到对应的各种Api端口信息。

20200902231013504.png

配置关闭项目API端口

配置application.yml

在endpoint后配置shutdown端口为true,默认情况下系统是关闭该端口,防止他人的恶意关闭项目,是出于对系统的一种保护行为。。

  endpoint:
      health:
        enabled: true
        show-details: always
      shutdown:
        enabled: true

注意:在这里我们利用cmd窗口以命令行的形式来模拟post请求,如果在浏览器直接请求的话会报错,后台会提示

Request method ‘GET’ not supported。也就是说不支持get请求,我们需要用post。

命令行执行post关闭指令

  在命令行中输入:

$ curl -X POST localhost:9091/actuator/shutdown

 然后命令行提示:

{“message”:“Shutting down, bye…”}

 项目就处于关闭状态了!

附:Actuator端口信息

类型 Api端口 描述
get auditevents 显示应用暴露的审计事件 (比如认证进入、订单失败)
get info 显示应用的基本信息
get health 显示应用的健康状态
get metrics 显示应用多样的度量信息
get loggers 显示和修改配置的loggers
get logfile 返回log file中的内容(如果logging.file或者logging.path被设置)
get httptrace 显示Liquibase 数据库迁移的纤细信息
get env 显示当前的环境特性
get flyway 显示数据库迁移路径的详细信息
get liquidbase 显示数据库迁移路径的详细信息
post shutdown 让你逐步关闭应用
get mappings 显示所有的@RequestMapping路径
get scheduledtasks 显示应用中的调度任务
get threaddump 执行一个线程dump
get heapdump 返回一个GZip压缩的JVM堆dump

附:SpringBoot自带的健康指示器

指示器 内容
ApplicationHealthIndicator none 永远为UP
DataSourceHealthIndicator db 如果数据库能连上,则为up,否则为down
DiskSpaceHealthIndicator diskSpace 如果可用空间大于阈值,则为up和可用磁盘空间,如果空间不足,则为down
JmsHealthIndicator jms 如果能连上消息代理,则为up,否则为down
MailHealthIndicator mail 如果能连上邮件服务器,则为up和邮件主机和端口,否则为down
MangoHealthIndicator mongo 如果能连上MangoDB服务器,则为up和MongoDB服务器版本,否则为down
RabbitHealthIndicator rabbit 如果能连上RabbitMQ服务器,则为up和MongoDB服务器版本,否则为down
RedisHealthIndicator redis 如果能连上Redis服务器,则为up和服务器版本,否则为down
SolrHealthIndicator solr 如果能连上Solr服务器,则为up和服务器版本,否则为down

赠言

用了两个多小时整理,连学带用,以后在遇到就更快的上手了,寒江孤影,江湖路人,点个赞吧!

相关文章
|
12月前
|
前端开发 Java 关系型数据库
基于Java+Springboot+Vue开发的鲜花商城管理系统源码+运行
基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习共同进步
691 7
|
7月前
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
643 1
日志收集和Spring 微服务监控的最佳实践
|
安全 Java 数据安全/隐私保护
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 三大核心组件
本课程介绍如何在Spring Boot中集成Shiro框架,主要讲解Shiro的认证与授权功能。Shiro是一个简单易用的Java安全框架,用于认证、授权、加密和会话管理等。其核心组件包括Subject(认证主体)、SecurityManager(安全管理员)和Realm(域)。Subject负责身份认证,包含Principals(身份)和Credentials(凭证);SecurityManager是架构核心,协调内部组件运作;Realm则是连接Shiro与应用数据的桥梁,用于访问用户账户及权限信息。通过学习,您将掌握Shiro的基本原理及其在项目中的应用。
457 0
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
1295 2
|
10月前
|
Prometheus 监控 Cloud Native
|
10月前
|
Prometheus 监控 Cloud Native
Spring Boot 可视化监控
本文介绍了如何通过Spring Actuator、Micrometer、Prometheus和Grafana为Spring Boot应用程序添加监控功能。首先创建了一个Spring Boot应用,并配置了Spring Actuator以暴露健康状态和指标接口。接着,利用Micrometer收集应用性能数据,并通过Prometheus抓取这些数据进行存储。最后,使用Grafana将Prometheus中的数据可视化,展示在精美的仪表板上。整个过程简单易行,为Spring Boot应用提供了基本的监控能力,同时也为后续扩展更详细的监控指标奠定了基础。
1547 2
|
负载均衡 IDE Java
SpringBoot整合XXL-JOB【04】- 以GLUE模式运行与执行器负载均衡策略
在本节中,我们将介绍XXL-JOB的GLUE模式和集群模式下的路由策略。GLUE模式允许直接在线上改造方法为定时任务,无需重新部署。通过一个测试方法,展示了如何在调度中心配置并使用GLUE模式执行定时任务。接着,我们探讨了多实例环境下的负载均衡策略,确保任务不会重复执行,并可通过修改路由策略(如轮训)实现任务在多个实例间的均衡分配。最后,总结了GLUE模式和负载均衡策略的应用,帮助读者更深入理解XXL-JOB的使用。
889 9
SpringBoot整合XXL-JOB【04】-  以GLUE模式运行与执行器负载均衡策略
|
Prometheus 监控 Java
如何全面监控所有的 Spring Boot 微服务
如何全面监控所有的 Spring Boot 微服务
664 3
|
Dubbo Java 应用服务中间件
深入探讨了“dubbo+nacos+springboot3的native打包成功后运行出现异常”的原因及解决方案
本文深入探讨了“dubbo+nacos+springboot3的native打包成功后运行出现异常”的原因及解决方案。通过检查GraalVM版本兼容性、配置反射列表、使用代理类、检查配置文件、禁用不支持的功能、查看日志文件、使用GraalVM诊断工具和调整GraalVM配置等步骤,帮助开发者快速定位并解决问题,确保服务的正常运行。
663 1
|
监控 Dubbo Java
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
这篇文章详细介绍了如何将Spring Boot与Dubbo和Zookeeper整合,并通过Dubbo管理界面监控服务注册情况。
1234 0
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。

热门文章

最新文章