Spring Boot 健康检查、度量指标、监控,一文搞定!

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
management.endpoints.web.exposure.include=*

也可以选择打开部分,“*” 代表暴露所有的端点,如果指定多个端点,用","分开

management.endpoints.web.exposure.exclude=beans,trace

Actuator 默认所有的监控点路径都在/actuator/*,当然如果有需要这个路径也支持定制。

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

设置完重启后,再次访问地址就会变成/minitor/*

现在我们按照如下配置:

# “*” 代表暴露所有的端点 如果指定多个端点,用","分开

management.endpoints.web.exposure.include=*

# 赋值规则同上

management.endpoints.web.exposure.exclude=

启动DEMO程序,访问http://localhost:8080/actuator,查看暴露出来的端点:

883e533300dc92cc82b56ab1c3b2dbb7.png


上面这样显示是因为chrome 浏览器安装了 JSON-handle 插件,实际上就是返回一大段json

下面,我会着重介绍几个比较重要的端点。

五、重要端点解析


5.1 /health端点

/health端点会聚合你程序的健康指标,来检查程序的健康情况。端点公开的应用健康信息取决于:

management.endpoint.health.show-details=always

该属性可以使用以下值之一进行配置:

| Name | Description |

| — | — |

| never | 不展示详细信息,up或者down的状态,默认配置 |

| when-authorized | 详细信息将会展示给通过认证的用户。授权的角色可以通过management.endpoint.health.roles配置 |

| always | 对所有用户暴露详细信息 |

按照上述配置,配置成always之后,我们启动项目,访问http://localhost:8080/actuator/health端口,可以看到这样的信息:

4218ee0c6ae4351624a43e8b997601d7.png

是不是感觉好像健康信息有点少?先别急,那是因为我们创建的是一个最基础的Demo项目,没有依赖很多的组件。Spring Boot 学习笔记分享给你看下。

/health端点有很多自动配置的健康指示器:如redis、rabbitmq、db等组件。当你的项目有依赖对应组件的时候,这些健康指示器就会被自动装配,继而采集对应的信息。如上面的 diskSpace 节点信息就是DiskSpaceHealthIndicator 在起作用。

上述截图取自官方文档

这是我另一个项目的/health端点信息。

5c8d03fd1b8d7a630842be7714c24424.png

当如上的组件有一个状态异常,应用服务的整体状态即为down。我们也可以通过配置禁用某个组件的健康监测。另外,Spring Boot 系列面试题和答案全部整理好了,微信搜索Java技术栈,在后台发送:面试,可以在线阅读。

management.health.mongo.enabled: false

或者禁用所有自动配置的健康指示器:

management.health.defaults.enabled: false

⭐自定义 Health Indicator

当然你也可以自定义一个Health Indicator,只需要实现HealthIndicator 接口或者继承AbstractHealthIndicator类。

/** * @author Richard_yyf * @version 1.0 2020/1/16 */@Componentpublic class CustomHealthIndicator extends AbstractHealthIndicator {    @Override    protected void doHealthCheck(Health.Builder builder) throws Exception {        // 使用 builder 来创建健康状态信息        // 如果你throw 了一个 exception,那么status 就会被置为DOWN,异常信息会被记录下来        builder.up()                .withDetail(“app”, “这个项目很健康”)                .withDetail(“error”, “Nothing, I’m very good”);    }}

最终效果:

d3c4a32afa2a638c23dc226aedd43326.png

5.2 /metrics端点

/metrics端点用来返回当前应用的各类重要度量指标,比如:内存信息、线程信息、垃圾回收信息、tomcat、数据库连接池等。

点击关注公众号,Java干货****及时送达8515b3aecdc0cf62bb21b6c896b0b9a3.png

{    “names”: [        “tomcat.threads.busy”,        “jvm.threads.states”,        “jdbc.connections.active”,        “jvm.gc.memory.promoted”,        “http.server.requests”,        “hikaricp.connections.max”,        “hikaricp.connections.min”,        “jvm.memory.used”,        “jvm.gc.max.data.size”,        “jdbc.connections.max”,         …    ]}

不同于1.x,Actuator在这个界面看不到具体的指标信息,只是展示了一个指标列表。为了获取到某个指标的详细信息,我们可以请求具体的指标信息,像这样:

http://localhost:8080/actuator/metrics/{MetricName}

比如我访问/actuator/metrics/jvm.memory.max,返回信息如下:

05441480ea5c347d5882462983e9d538.png

你也可以用query param的方式查看单独的一块区域。比如你可以访问/actuator/metrics/jvm.memory.max?tag=id:Metaspace。结果就是:

85f76f673e2eee9018fb603deaa22b66.png

5.3/loggers端点

/loggers 端点暴露了我们程序内部配置的所有logger的信息。我们访问/actuator/loggers可以看到,

71ef82359964aa7b82ce1250ecc176a7.png

你也可以通过下述方式访问单独一个logger,

http://localhost:8080/actuator/loggers/{name}

比如我现在访问 root logger,http://localhost:8080/actuator/loggers/root

{    “configuredLevel”: “INFO”,    “effectiveLevel”: “INFO”}

⭐改变运行时的日志等级

/loggers端点我最想提的就是这个功能,能够动态修改你的日志等级。

比如,我们可以通过下述方式来修改 root logger的日志等级。我们只需要发起一个URL 为http://localhost:8080/actuator/loggers/rootPOST请求,POST报文如下:

{   “configuredLevel”: “DEBUG”}

60ac023a7c188edb2aa68da256e12c40.png

仔细想想,这个功能是不是非常有用。如果在生产环境中,你想要你的应用输出一些Debug信息以便于你诊断一些异常情况,你你只需要按照上述方式就可以修改,而不需要重启应用。

如果想重置成默认值,把value 改成 null

5.4 /info端点

/info端点可以用来展示你程序的信息。我理解过来就是一些程序的基础信息。并且你可以按照自己的需求在配置文件application.properties中个性化配置(默认情况下,该端点只会返回一个空的json内容。):

info.app.name=actuator-test-demoinfo.app.encoding=UTF-8info.app.java.source=1.8info.app.java.target=1.8# 在 maven 项目中你可以直接用下列方式引用 maven properties的值# info.app.encoding=@project.build.sourceEncoding@# info.app.java.source=@java.version@# info.app.java.target=@java.version@

启动项目,访问http://localhost:8080/actuator/info

{    “app”: {        “encoding”: “UTF-8”,        “java”: {            “source”: “1.8.0_131”,            “target”: “1.8.0_131”        },        “name”: “actuator-test-demo”    }}

5.5 /beans端点

/beans端点会返回Spring 容器中所有bean的别名、类型、是否单例、依赖等信息。

访问http://localhost:8080/actuator/beans,返回如下:

4e9cd9a1fc64e7e95679b99dc75ab0a7.png

5.6 /heapdump 端点

访问:http://localhost:8080/actuator/heapdump会自动生成一个 Jvm 的堆文件 heapdump。我们可以使用 JDK 自带的 Jvm 监控工具 VisualVM 打开此文件查看内存快照。46 张 PPT 弄懂 JVM 性能调优推荐看下。

bb7d1c4cf132f39301cb68a3a449e250.png

5.7 /threaddump 端点

这个端点我个人觉得特别有用,方便我们在日常定位问题的时候查看线程的情况。主要展示了线程名、线程ID、线程的状态、是否等待锁资源、线程堆栈等信息。就是可能查看起来不太直观。访问http://localhost:8080/actuator/threaddump返回如下:

9731b631a76d02b7f5fbe9d3bb3445e0.png

5.8 /shutdown端点

这个端点属于操作控制类端点,可以优雅关闭 Spring Boot 应用。要使用这个功能首先需要在配置文件中开启:

management.endpoint.shutdown.enabled=true

由于 shutdown 接口默认只支持 POST 请求,我们启动Demo项目,向http://localhost:8080/actuator/shutdown发起POST请求。返回信息:

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

然后应用程序被关闭。

由于开放关闭应用的操作本身是一件非常危险的事,所以真正在线上使用的时候,我们需要对其加入一定的保护机制,比如:定制Actuator的端点路径、整合Spring Security进行安全校验等。(不是特别必要的话,这个端点不用开)

六、整合Spring Security 对端点进行安全校验


由于端点的信息和产生的交互都是非常敏感的,必须防止未经授权的外部访问。如果您的应用程序中存在Spring Security的依赖,则默认情况下使用基于表单的HTTP身份验证来保护端点。

如果没有,只需要增加对应的依赖即可:

org.springframework.boot

spring-boot-starter-security

添加之后,我们需要定义安全校验规则,来覆盖Spring Security 的默认配置。

这里我给出了两个版本的模板配置:

import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest;

import org.springframework.boot.actuate.context.ShutdownEndpoint;

import org.springframework.boot.autoconfigure.security.servlet.PathRequest;

import org.springframework.context.annotation.Configuration;

import org.springframework.security.config.annotation.web.builders.HttpSecurity;

import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

/**

* @author Richard_yyf

*/

@Configuration

public class ActuatorSecurityConfig extends WebSecurityConfigurerAdapter {

/*

* version1:

* 1. 限制 '/shutdown’端点的访问,只允许ACTUATOR_ADMIN访问

* 2. 允许外部访问其他的端点

* 3. 允许外部访问静态资源

* 4. 允许外部访问 ‘/’

* 5. 其他的访问需要被校验

* version2:

* 1. 限制所有端点的访问,只允许ACTUATOR_ADMIN访问

* 2. 允许外部访问静态资源

* 3. 允许外部访问 ‘/’

* 4. 其他的访问需要被校验

*/

@Override

protected void configure(HttpSecurity http) throws Exception {

// version1

//        http

//                .authorizeRequests()

//                    .requestMatchers(EndpointRequest.to(ShutdownEndpoint.class))

//                        .hasRole(“ACTUATOR_ADMIN”)

//                .requestMatchers(EndpointRequest.toAnyEndpoint())

//                    .permitAll()

//                .requestMatchers(PathRequest.toStaticResources().atCommonLocations())

//                    .permitAll()

//                .antMatchers(“/”)

//                    .permitAll()

//                .antMatchers(“/**”)

//                    .authenticated()

//                .and()

//                .httpBasic();

// version2

http

.authorizeRequests()

.requestMatchers(EndpointRequest.toAnyEndpoint())

.hasRole(“ACTUATOR_ADMIN”)

.requestMatchers(PathRequest.toStaticResources().atCommonLocations())

.permitAll()

.antMatchers(“/”)

.permitAll()

.antMatchers(“/**”)

.authenticated()

.and()

.httpBasic();

}

}

application.properties的相关配置如下:

# Spring Security Default user name and password

spring.security.user.name=actuator

spring.security.user.password=actuator

spring.security.user.roles=ACTUATOR_ADMIN

结语

本篇文章内容就到这里。

对应的源码可以Github上看到。(https://github.com/Richard-yyf/springboot-actuator-prometheus-test)

如果本文有帮助到你,希望能点个赞,这是对我的最大动力🤝🤝🤗🤗。

参考:

https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html

http://www.ityouknow.com/springboot/2018/02/06/spring-boot-actuator.html

7afbe8f7286cdf087b7c87bfeaadbd73.gif

最后

image.png

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

本篇文章内容就到这里。

对应的源码可以Github上看到。(https://github.com/Richard-yyf/springboot-actuator-prometheus-test)

如果本文有帮助到你,希望能点个赞,这是对我的最大动力🤝🤝🤗🤗。

参考:

https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html

http://www.ityouknow.com/springboot/2018/02/06/spring-boot-actuator.html

7afbe8f7286cdf087b7c87bfeaadbd73.gif

最后

[外链图片转存中…(img-Ed7M8k7D-1714746972712)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值