SpringBoot系列之actuator监控管理极速入门与实践

@

SpringBoot官方提供了spring-boot-starter-actuator场景启动器用于系统的监控管理,可以通过HTTP,JMX,SSH协议来进行操作,自动得到审计、健康及指标信息等

环境准备:

  • JDK 1.8
  • SpringBoot2.2.1
  • Maven 3.2+
  • 开发工具
  • IntelliJ IDEA
  • smartGit

创建一个SpringBoot Initialize项目,详情可以参考我之前博客:SpringBoot系列之快速创建项目教程

SpringBoot系列之actuator监控管理极速入门与实践

要将执行器添加到基于Maven的项目中,请检查添加以下” Starter”依赖项:


        org.springframework.boot
        spring-boot-starter-actuator

项目启动成功后,如果没设置context-path,项目会自动加入/actuator作为前缀,大部分端点是默认启动的,不过要通过web浏览器方式访问的只有health、info端点

可以通过配置修改默认前缀

management.endpoints.web.base-path=/actuator

通用的端点(http、Jms、ssh方式都能访问):

ID 描述 默认启用 auditevents

暴露当前应用程序的审计事件信息。 是 beans

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

暴露可用的缓存。 是 conditions

显示在配置和自动配置类上评估的条件以及它们匹配或不匹配的原因。 是 configprops

显示所有 @ConfigurationProperties

的校对清单。 是 env

暴露 Spring ConfigurableEnvironment

中的属性。 是 flyway

显示已应用的 Flyway 数据库迁移。 是 health

显示应用程序健康信息 是 httptrace

显示 HTTP 追踪信息(默认情况下,最后 100 个 HTTP 请求/响应交换)。 是 info

显示应用程序信息。 是 integrationgraph

显示 Spring Integration 图。 是 loggers

显示和修改应用程序中日志记录器的配置。 是 liquibase

显示已应用的 Liquibase 数据库迁移。 是 metrics

显示当前应用程序的指标度量信息。 是 mappings

显示所有 @RequestMapping

路径的整理清单。 是 scheduledtasks

显示应用程序中的调度任务。 是 sessions

允许从 Spring Session 支持的会话存储中检索和删除用户会话。当使用 Spring Session 的响应式 Web 应用程序支持时不可用。 是 shutdown

正常关闭应用程序。POST请求方式 否 threaddump

执行线程 dump。 是

GET方式调用health端点,返回json信息

SpringBoot系列之actuator监控管理极速入门与实践
Web 应用程序(Spring MVC、Spring WebFlux 或 Jersey),则可以使用以下附加端点,这个应该是2.x版本才加上的

ID 描述 默认启用 heapdump

返回一个 hprof

堆 dump 文件。 是 jolokia

通过 HTTP 暴露 JMX bean(当 Jolokia 在 classpath 上时,不适用于 WebFlux)。 是 logfile

返回日志文件的内容(如果已设置 logging.file logging.path

属性)。支持使用 HTTP Range

头来检索部分日志文件的内容。 是 prometheus

以可以由 Prometheus 服务器抓取的格式暴露指标。 是

启用端点,修改配置,语法 management.endpoint.[端点名称].enabled=true

management.endpoint.shutdown.enabled=true

下表显示了内置端点和默认暴露情况,以JMX、WEB(Http)做对比:

ID JMX Web auditevents

是 否 beans

是 否 caches

是 否 conditions

是 否 configprops

是 否 env

是 否 flyway

是 否 health

是 是 heapdump

N/A 否 httptrace

是 否 info

是 是 integrationgraph

是 否 jolokia

N/A 否 logfile

N/A 否 loggers

是 否 liquibase

是 否 metrics

是 否 mappings

是 否 prometheus

N/A 否 scheduledtasks

是 否 sessions

是 否 shutdown

是 否 threaddump

是 否

要更改暴露的端点,请使用以下特定的 includeexclude 属性:

属性 默认 management.endpoints.jmx.exposure.exclude management.endpoints.jmx.exposure.include * management.endpoints.web.exposure.exclude management.endpoints.web.exposure.include info, health
include 属性列出了暴露的端点的 ID。 exclude 属性列出了不应暴露的端点的 ID。 exclude 属性优先于 include 属性。

例子:
关闭jmx访问所有端点的权限,只让其能访问health、info

management.endpoints.jmx.exposure.include=health,info

启用web访问所有端点,除env之外的权限

management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env

注意

* 在 YAML 中具有特殊含义,因此如果要包含(或排除)所有端点,请务必添加引号,如下所示:

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

自定义InfoContributor

package com.example.springboot.actuator.actuate.health;

import java.util.Collections;

import org.springframework.boot.actuate.info.Info;
import org.springframework.boot.actuate.info.InfoContributor;
import org.springframework.stereotype.Component;

@Component
public class ExampleInfoContributor implements InfoContributor {

    @Override
    public void contribute(Info.Builder builder) {
        builder.withDetail("example",
                Collections.singletonMap("key", "value"));
    }

}

可以在浏览器或者postman调用:

SpringBoot系列之actuator监控管理极速入门与实践

跨域支持配置

management.endpoints.web.cors.allowed-origins=http://localhost
management.endpoints.web.cors.allowed-methods=GET,POST

定置端点:

management.endpoint.info.enabled=true
management.endpoint.info.cache.time-to-live=10s

ok,actuator的知识点比较多,详情请参考官方文档,本博客参考官方文档,做了简单记录,仅仅作为入门参考手册

代码例子下载:code download

Original: https://www.cnblogs.com/mzq123/p/13367886.html
Author: smileNicky
Title: SpringBoot系列之actuator监控管理极速入门与实践

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/541212/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • maven工程servlet实例之指定web资源包以及导入项目依赖的jar包以及jar包冲突解决

    maven工程servlet实例之指定web资源包 在webapp包下可以直接创建jsp文件 ,但是在java包下我们不可以直接创建jsp文件。 如果想要在java包下创建jsp文…

    Java 2023年6月6日
    094
  • 诚立业科技面试经历

    笔试题: 面试: 1.自我介绍,讲讲项目 2.项目中redis是如何使用的? 3.你们数据量有多大,是如何保证高可用的? 4.mysql数据库你是怎么优化的? 5.kafka你们项…

    Java 2023年6月14日
    070
  • 集合框架和泛型编程

    Java集合框架 一组存储对象的容器(动态) 常见的集合算法 遍历集合 添加集合元素 删除集合元素 查找集合元素 集合元素排序 Java SE提供了: Collection接口:存…

    Java 2023年6月6日
    0139
  • MySQL8免安装版下载安装与配置(windows)

    一、MySQL8下载 官网下载地址:MySQL :: Download MySQL Community Server 点击免安装版的”Download”跳转…

    Java 2023年6月8日
    098
  • Springboot限流工具之sentinel单机限流场景无控制台

    1. sentinel简介 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。…

    Java 2023年5月30日
    058
  • Java Happens-Before原则

    Happens-Before原则核心就是表达 在一些条件下,前面的操作对于后面的操作是可见的。它有六个条件,或者说是六条原则。 一、线程中的顺序性原则 这个最容易理解,这个原则是指…

    Java 2023年5月29日
    085
  • Java基础

    注释 注释不会被执行,是给写代码的人看的。 书写注释是一个非常好的习惯 Java中有三种注释: 单行注释 // 注释&#x518…

    Java 2023年6月5日
    085
  • Redis客户端连接远程Redis服务器失败解决百分百

    redis远程连接服务器失败,查看网上把 bind 127.0.0.1改了, protected-mode保护模式也关闭了, daemonize yes进程守护模式也关闭了但是还是…

    Java 2023年6月5日
    064
  • Spring扫描项目项目Bean的顺序

    大家都知道 Spring扫描 启动的时候 会扫描我们的项目 把我们的定义的Bean 给加到容器中去 那么这个扫描是怎么个顺序的的呢? 首先Spring启动的时候 会往自己的容器中 …

    Java 2023年6月5日
    084
  • 若依3.6.0使用Mybatis-plus分页失效以及完美替换Pagehelper

    一、前言 小编最近在经历后端框架的迁移,虽然不是小编来做,但是有个分页的情况让小编和一个同事去搞。说一下小编这边的需求:原来框架使用 Mybatis-plus进行分页,要更换的新框…

    Java 2023年6月15日
    090
  • 设计模式之策略模式

    策略模式属于行为型模式,是使用最多的设计模式之一;其作用是针对一组算法,将每一个算法封装到具体共同接口的独立的类种,从而使得他们可以相互转化。策略模式使得算法可以在不影响到客户端得…

    Java 2023年6月5日
    079
  • 同时多个axios请求怎么实现无痛刷新token

    最近遇到个需求:前端登录后,后端返回 token和 token有效时间,当token过期时要…

    Java 2023年6月5日
    086
  • 快速排序与堆排序

    一、快速排序 1.快速排序是利用递归思想的一个分治排序算法,时间复杂度为O(n * logn)。对数组nums[l……r]进行快速排序的方法如下: (1)确…

    Java 2023年6月13日
    083
  • springboot分析——自定义启动类

    在实际开发过程中,如果有一些公共功能,我们可以单独封装,然后配置成starter启动类,其他的项目需要使用时,主要 只要依赖开启就可以了。下面我们自定义一个自动配置启动类。 一:自…

    Java 2023年5月30日
    068
  • maven docker 插件集成的几个小坑

    昨晚看springboot视频的时候,发现可以使用docker-maven-plugin这个插件直接build出 docker 镜像到远程服务器上,感觉很方便,于是自己也试了一下,…

    Java 2023年6月16日
    070
  • 记一次@Validated分组校验不生效问题

    原因 如果做了异常捕获,在方法入参中添加了BindingResult会导致失效,具体原因不再细查,这一块浪费了我不少时间 踩坑过程 使用@Validated直接全部校验通过,@Va…

    Java 2023年6月9日
    075
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球