SpringBoot使用actuator实现项目健康检查与监控

actuator简介

Spring Boot Actuator就是一款可以帮助你监控系统数据的框架,其可以监控很多很多的系统数据,它有对应用系统的自省和监控的集成功能,可以查看应用配置的详细信息,如:

  • 显示应用程序员的Health健康信息
  • 显示Info应用信息
  • 显示HTTP Request跟踪信息
  • 显示当前应用程序的“Metrics”信息
  • 显示所有的@RequestMapping的路径信息
  • 显示应用程序的各种配置信息
  • 显示你的程序请求的次数 时间 等各种信息

actuator使用

基本用法

1、引入相关的依赖

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

<!-- 一般都是web应用,所以引入了boot web -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2、在spring boot 2.0以后,actuator默认只开启了info和health两个端点(不用配置就可以访问),要想使用其他的端点,需要在application.yml中打开:

management:
  endpoints:
    web:
      exposure:
        include: "*"

1)在这里include: "*" ,这个""双引号是必须要,在application.properties是不需要""双引号的,application.properties中是这样的:management.endpoints.web.exposure.include=*

2)默认所有的端点都以默认的路径http://localhost:8080/actuator 开始

如我们查看info端点的信息就是访问http://localhost:8080/actuator/info

3)actuator的大部分监控请求都是以get请求的,只有少数是post请求

4)如果想更改默认的actuator启动路径,可以在application.yml中更改,如我们改成 http://localhost:8080/

management:
  endpoints:
    web:
      exposure:
        include: "*"
      base-path: /

并且health端点的信息默认也是显示的不具体的,请看默认的health是显示的什么:

"UP"就是安全健康的,"DOWN"就是有问题了。

5)在application.yml中开启所有的heanth监控数据:

management:
  endpoints:
    web:
      #开启暴露所有的节点
      exposure:
        include: "*"
        #include: health,info
      #调整端点的前缀路径,默认是/actuator
      base-path: /
  endpoint:
    health:
      show-details: always  #显示健康具体信息  默认不会显示详细信息

 

所有的监控端点endpoints

ID 描述
auditevents 公开当前应用程序的审核事件信息。
beans 显示应用程序中所有Spring bean的完整列表。
caches 暴露可用的缓存。
conditions 显示在配置和自动配置类上评估的条件以及它们匹配或不匹配的原因。
configprops 显示所有的整理列表@ConfigurationProperties,查看配置属性,包括默认配置
env 露出Spring的属性的各种环境变量,后面可跟/{name}查看具体的值
flyway 显示已应用的任何Flyway数据库迁移。
health 显示应用健康信息,在spring boot2.0以后需要在配置里show-details打开所有健康信息
httptrace 显示HTTP跟踪信息(默认情况下,最后100个HTTP请求 - 响应交换),2.0以后需要手动打开
info 显示任意应用信息,是在配置文件里自己定义的
integrationgraph 显示Spring Integration图。
loggers 显示和修改应用程序中记录器的配置。
liquibase 显示已应用的任何Liquibase数据库迁移。
metrics 显示当前应用程序的“指标”信息,比如内存用量和HTTP请求计数,后可跟/{name}查看具体值
mappings 显示所有@RequestMapping路径的整理列表。
scheduledtasks 显示应用程序中的计划任务。
sessions 允许从Spring Session支持的会话存储中检索和删除用户会话。使用Spring Session对响应式Web应用程序的支持时不可用
shutdown 允许应用程序正常关闭。
threaddump 执行线程转储。

如果您的应用程序是Web应用程序(Spring MVC,Spring WebFlux或Jersey),则可以使用以下附加端点: 

ID 描述
heapdump 返回hprof堆转储文件。
jolokia 通过HTTP公开JMX bean(当Jolokia在类路径上时,不适用于WebFlux)。
logfile 返回日志文件的内容(如果已设置logging.file或logging.path属性)。支持使用HTTP Range标头检索部分日志文件的内容。
prometheus 以可以由Prometheus服务器抓取的格式公开指标。

如果你只想打开某个端点,我们是这样的配置的

management:
  endpoint:
    health: #端点名称
      enabled: true

自定义执行器信息端点配置

如果不设置resource 会导致application.yml中的@@找不到pom文件中的配置

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <configuration>
                <delimiters>@</delimiters>
                <useDefaultDelimiters>false</useDefaultDelimiters>
            </configuration>
        </plugin>
    </plugins>
    <!--必须添加,否则无法动态获取值-->
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

我们可以使用以下属性自定义Spring Boot 执行器信息端点:

  • static properties - 我们可以使用键值对添加静态信息。
  • maven build properties - spring boot会自动公开maven构建属性。我们可以使用@property.name@语法访问它们。
  • environment variables - 我们可以公开环境变量。
  • loading properties from java class- 我们可以通过实现InfoContributor接口从java类加载动态属性。
# Spring Boot Actuator Info Endpoint Customization
info:
  # static properties
  app:
    name: Info Endpoint
    version: v1.1.0

  #build properties from maven
  build:
    #自定义info端点查看应用相关的信息
    encoding: "@project.groupId@"
    artifactId: "@project.artifactId@"
    traget: "@java.version@"

  #environment variables
  env:
    java:
      vendor: ${java.vm.vendor}
      vm-name: ${java.vm.name}
      runtime-version: ${java.runtime.version}

从Java类加载属性:

我们可以通过实现InfoContributor接口动态注入属性。这允许我们注入静态/动态属性甚至进行数据库查找。这里的可能性无穷无尽。

@SpringBootApplication
public class ActuatorApp implements InfoContributor {
    public static void main(String[] args) {
        SpringApplication.run(ActuatorApp.class, args);
    }

    @Autowired
    private ApplicationContext ctx;

    @Override
    public void contribute(Info.Builder builder) {
        Map<String, Object> details = new HashMap();
        details.put("start-date", ctx.getStartupDate());
        details.put("bean-count", ctx.getBeanDefinitionCount());
        builder.withDetail("context", details);
    }
}

同样的自定义health端点信息可以实现HealthIndicator接口。

我们可以访问执行器信息端点。以下是先前配置的应用程序的示例输出:

posted @ 2022-05-04 21:58  残城碎梦  阅读(2116)  评论(0编辑  收藏  举报