监控项目指标-SpringBoot Actuator

一、初识

引入环境

  <!-- 引入监控功能-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

访问监控

http://localhost:6060/actuator

访问后一下只有health一个端口,其余需要手动开启,往下看

 其中 下面是获取当前项目健康状态 

http://localhost:6060/actuator/health
UNKNOWN  -- 未知
UP -- 正常
DOWN -- 下架
OUT_OF_SERVICE -- 终止服务

 

//查看业务模块是否正常运行
http://localhost:6060/actuator/health/{*path}

二、了解信息

使用的端点

 

ID

描述

auditevents

暴露当前应用程序的审核事件信息。需要一个AuditEventRepository组件

beans

显示应用程序中所有Spring Bean的完整列表。

caches

暴露可用的缓存。

conditions

显示自动配置的所有条件信息,包括匹配或不匹配的原因。

configprops

显示所有@ConfigurationProperties

env

暴露Spring的属性ConfigurableEnvironment

flyway

显示已应用的所有Flyway数据库迁移。
需要一个或多个Flyway组件。

health

显示应用程序运行状况信息。

httptrace

显示HTTP跟踪信息(默认情况下,最近100个HTTP请求-响应)。需要一个HttpTraceRepository组件。

info

显示应用程序信息。

integrationgraph

显示Spring integrationgraph 。需要依赖spring-integration-core

loggers

显示和修改应用程序中日志的配置。

liquibase

显示已应用的所有Liquibase数据库迁移。需要一个或多个Liquibase组件。

metrics

显示当前应用程序的“指标”信息。

mappings

显示所有@RequestMapping路径列表。

scheduledtasks

显示应用程序中的计划任务。

sessions

允许从Spring Session支持的会话存储中检索和删除用户会话。需要使用Spring Session的基于Servlet的Web应用程序。

shutdown

使应用程序正常关闭。默认禁用。

startup

显示由ApplicationStartup收集的启动步骤数据。需要使用SpringApplication进行配置BufferingApplicationStartup

threaddump

执行线程转储。

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

ID

描述

heapdump

返回hprof堆转储文件。

jolokia

通过HTTP暴露JMX bean(需要引入Jolokia,不适用于WebFlux)。需要引入依赖jolokia-core

logfile

返回日志文件的内容(如果已设置logging.file.namelogging.file.path属性)。支持使用HTTPRange标头来检索部分日志文件的内容。

prometheus

以Prometheus服务器可以抓取的格式公开指标。需要依赖micrometer-registry-prometheus

配置文件配置

1).配置所有

# management 是所有actuator的配置
management:
  endpoints:
    enabled-by-default: true  #默认开启所有端点
    web:
      exposure:
        include: '*'  # 以web方式暴漏所有端点

http://localhost:6060/actuator
http://localhost:6060/actuator/metrics
http://localhost:6060/actuator/metrics/jvm.buffer.count
......
一级一级看到指标

2).配置详细

management:
  endpoint:
    health:
      show-details: always #显示详细信息 默认是never 不显示详细信息

 

 

 3).开启单个端口

management:
endpoints:
enabled-by-default: false
web:
exposure:
include: '*'
endpoint:
health:
show-details: always #显示详细信息 默认是never 不显示详细信息
enabled: true # 健康状态开启
info:
enabled: true # 开启info
beans:
enabled: true # 开启beans
metrics:
enabled: true

三、深入

自定义Health 

 配置

server:
  port: 6060


management:
  endpoints:
    enabled-by-default: false
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always #显示详细信息 默认是never 不显示详细信息
      enabled: true # 健康状态开启
@Component
public class MyDefinitionHealthIndicator extends AbstractHealthIndicator {

    /**
     * title 自定义检查
     *
     * @param builder
     * @throws Exception
     */
    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {
        // 封装其他信息集合
        Map<String,Object> map = new HashMap<>();
        // 测试是否正常
        if( 1 == 1 ){
            // 正常
            //builder.up();
            // 另一种写法
            builder.status(Status.UP);
            map.put("message","正常连接");
            map.put("code","2000");
        }else{
            // 不正常
            //builder.down();
            // 另一种写法
            builder.status(Status.DOWN);
            map.put("message","死机");
            map.put("code","3000");
        }
        // 可以单个添加,也可以添加集合
        builder.withDetail("name","mongo连接")
                .withDetails(map);
    }
}

访问

其中名称就是类名把后面的HealthIndicator截取掉后的名字

自定义info

 第一种配置

  yaml

management:
  endpoints:
    enabled-by-default: false
    web:
      exposure:
        include: '*'
  endpoint:
    info:
      enabled: true # 开启info
  info:
    env:
      enabled: true #启用配置里的info开头的变量
info: appName: StudyWork1_yaml version:
1.0.1.0 mavenProjectName: @project.artifactId@ #使用@@可以获取maven的pom文件值 mavenProjectVersion: @project.version@

  pom

<build>
        <plugins>
            <!--支持yaml读取pom的参数-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <delimiters>
                        <delimiter>@</delimiter>
                    </delimiters>
                    <useDefaultDelimiters>false</useDefaultDelimiters>
                </configuration>
            </plugin>
        </plugins>
    </build>

访问

 

 

 第二种配置

配置

management:
  endpoints:
    enabled-by-default: false
    web:
      exposure:
        include: '*'
  endpoint:
    info:
      enabled: true # 开启info
@Component
public class MyInfoiInfoContributor implements InfoContributor {

    /**
     * title 自定义构建info
     *
     * @param builder
     */
    @Override
    public void contribute(Info.Builder builder) {
        // 其他参数集合
        Map<String,Object> map = new HashMap<>();
        map.put("wordCode","2000");
        map.put("wordMessage","成功");
     // 当个存放 builder.withDetail(
"message","消息") .withDetail("code","状态码") .withDetails(map); } }

访问

 

 第一种和第二种可以一起使用,结果是两种的集合,Java代码内容优先级高

自定义Metrics

 配置

management:
  endpoints:
    enabled-by-default: false
    web:
      exposure:
        include: '*'
  endpoint:
    metrics:
      enabled: true
@Controller
public class MyController {

    @Autowired
    private User user;

    Counter counter;

    public MyController(MeterRegistry meterRegistry){
        counter = meterRegistry.counter("MyController.getUser.count");
    }

    @ResponseBody
    @GetMapping("/getUser")
    public User getUser(){
        // 计数
        counter.increment();
        return user;
    }
}

访问

 

 自定义端点Endpoint

@Component
@Endpoint( id= "myService")
public class MyServiceEndpoint {
    /**
     * title 端点的读操作
     */
    @ReadOperation
    public Map getOracleInfo(){
        Map<String,Object> map = new HashMap<>();
        map.put("name","oracle");
        map.put("id","127.0.0.1");
        return map;
    }


    /**
     * title 端点的写操作
     */
    @WriteOperation
    public void stopOracle(){
        System.out.println("Oracle 停止!");
    }
}

访问

四、可视化adminserver

官网地址 https://github.com/codecentric/spring-boot-admin

1.新建一个项目 

2.pom

<dependencies>
            <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
            <version>2.5.1</version>
        </dependency>

3.主控制类(启动类)中添加注解

@EnableAdminServer

4.properties设置端口

server.port=9000

5.启动项目

 

6.在需要监控的项目中配置

  1).

<!-- 引入监控功能-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--    adminServer客户端    -->
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-client</artifactId>
            <version>2.5.1</version>
        </dependency>

  2).yaml

management:
  endpoints:
    enabled-by-default: true #开放所有端口
    web:
      exposure:
        include: '*' # web形式都可以访问所有端口
  endpoint:
    health:
      show-details: always 
spring:
  boot:
    admin:
      client:
        url: http://localhost:9000/  # 注册到adminServer服务
        instance:
          prefer-ip: true  # 使用ip注册 默认是计算机名称
  application:
    name: StudyWork1 # 注册项目的名称 默认名称是spring-boot-application(InstanceProperties类)

7.访问控制界面

http://localhost:9000/

posted @ 2022-08-15 17:21  Dabo丶  阅读(354)  评论(0编辑  收藏  举报