• 09-指标监控


    https://docs.spring.io/spring-boot/docs/2.4.3/reference/html/production-ready-features.html#production-ready

    1. 简述

    未来每一个微服务在云上部署以后,我们都需要对其进行监控、追踪、审计、控制等。SpringBoot 就抽取了 Actuator 场景,使得我们每个微服务快速引用即可获得生产级别的应用监控、审计等功能。

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

    You can choose to manage and monitor your application by using HTTP endpoints or with JMX (Java Management Extensions).

    运行起 SpringBoot 程序后,查看二者的默认情况:① 通过在 CMD 输入 jconsole 选择正在运行的 SpringBoot 的主程序类(好多 Endpoint);② 在 Firefox 输入 <SpringBoot访问路径>/actuator(就能看到 4 个)。

    2. Endpoints

    Actuator endpoints let you monitor and interact with your application. Spring Boot includes a number of built-in endpoints and lets you add your own. For example, the health endpoint provides basic application health information.

    Each individual endpoint can be enabled or disabled and exposed (made remotely accessible) over HTTP or JMX. An endpoint is considered to be available when it is both enabled and exposed. The built-in endpoints will only be auto-configured when they are available. Most applications choose exposure via HTTP, where the ID of the endpoint along with a prefix of /actuator is mapped to a URL. For example, by default, the health endpoint is mapped to /actuator/health.

    2.1 Enable

    所有 Endpoint(除了 shutdown)默认都是开启的:management.endpoints.enabled-by-default=true,只是有没有暴露而已(API-2.2. Exposing Endpoints 可以查看 JMX、Web 分别默认暴露的 Endpoint),如果有特殊需求,可以将其设置为 false 后手动开启指定的 Endpoint。

    management:
      endpoints:
        enabled-by-default: false
      endpoint:
        beans:
          enabled: true
        health:
          enabled: true
        shutdown:
          enabled: true
        ...
    

    2.2 Expose

    配置上“以 web 方式暴露所有端点”后,访问 http://localhost:8080/admin/actuator

    3. 定制 Endpoint

    3.1 定制 health 信息

    /**
     * @author 6x7
     * @Description Actuator-健康检查
     */
    @Component
    public class MyAppHealthIndicator extends AbstractHealthIndicator {
        /**
         * 检查逻辑
         * @param builder
         * @throws Exception
         */
        @Override
        protected void doHealthCheck(Health.Builder builder) throws Exception {
            Map<String, Object> config = new HashMap<>();
            builder.status(Status.UP);
            config.put("controller", 1);
            config.put("service", 1);
            config.put("mapper", 1);
            builder.withDetail("code", 1101).withDetails(config);
        }
    }
    

    访问 http://localhost:8080/admin/actuator/health

    3.2 定制 info 信息

    (1)在 application.yml 中配置

    info:
      appName: boot-admin
      appVersion: @project.version@     # 引用 pom.xml 的内容
    

    (2)注册一个实现 InfoContributor 接口的组件

    @Component
    public class AppInfoContributor implements InfoContributor {
        @Override
        public void contribute(Info.Builder builder) {
            builder
                .withDetail("msg0", "Can you hear me?")
                .withDetail("msg1", "You are being watched.");
        }
    }
    

    访问 http://localhost:8080/admin/actuator/info

    3.3 定制 metrics 信息

    @Service
    public class UserServiceImpl implements UserService {
        @Autowired
        UserMapper userMapper;
    
        Counter counter;
    
        public UserServiceImpl(MeterRegistry meterRegistry) {
            counter = meterRegistry.counter("userService.getUserById.count");
        }
    
        @Override
        public User getUserById(Long id) {
            counter.increment();
            return userMapper.getUserById(id);
        }
    }
    

    访问 http://localhost:8080/admin/actuator/metrics

    访问处理逻辑中会调用到 userService#getUserById 的 handler 方法后,再访问 http://localhost:8080/admin/actuator/metrics/userService.getUserById.count

    3.4 定制 Endpoint

    @Slf4j
    @Component
    @Endpoint(id="my-secret-service")
    public class MyEndpoint {
    
        /**
         * http://localhost:8080/admin/actuator/my-secret-service
         * @return
         */
        @ReadOperation
        public Map getServiceInfo() {
            return Collections.singletonMap("serviceInfo", "service started...");
        }
    
        /**
         * jconsole: boot -> EndPoint -> my-secret-service -> 操作 -> click [stopService]
         */
        @WriteOperation
        public void stopService() {
            log.info("service stopped...");
        }
    }
    

    访问 http://localhost:8080/admin/actuator

    4. 可视化

    https://github.com/codecentric/spring-boot-admin
    https://codecentric.github.io/spring-boot-admin/current/

    4.1 新建监控可视化微服务

    (1)添加如下依赖

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

    (2)主启动类上添加 @EnableAdminServer 注解

    (3)将服务注册到 8888 端口

    4.2 注册客户端微服务

    (1)我们写的微服务的监控数据是要被上面新建的 SpringBoot Admin Server 收集的,所以要在我们的微服务程序中添加客户端依赖:

    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-client</artifactId>
        <version>2.3.1</version>
    </dependency>
    

    访问 localhost:8888

    (2)Enable the SBA Client by configuring the URL of the Spring Boot Admin Server :

    spring:
      application:
        name: boot_03_admin              # 注册时微服务的名字
      boot:
        admin:
          client:
            url: http://localhost:8888
            instance:
              prefer-ip: true            # 注册方式是 hostname 还是 ip
    
    management:
      endpoints:
        enabled-by-default: true
        web:
          exposure:
            include: '*'
    

    此时再查看 http://localhost:8888

  • 相关阅读:
    WINCE6.0新建工程编译出错的问题
    单片机C语言中的data,idata,xdata,pdata,code
    WinCE 6.0学习笔记一
    Visual Studio 2005 学习笔记一 入门
    Zigbee系列 学习笔记六(设置项)
    Zigbee系列 学习笔记五(信道选择)
    Zigbee系列 学习笔记四(睡眠及唤醒)
    Zigbee系列 学习笔记三(初始化程序解析)
    Zigbee调试问题 IAR编译出现 Fatal Error[e72]: Segment BANKED_CODE must be defined in a segment definition option (-Z, -b or -P)
    关于懒设计
  • 原文地址:https://www.cnblogs.com/liujiaqi1101/p/15269858.html
Copyright © 2020-2023  润新知