⑧SpringCloud 实战:引入 Actuator监控+整合监控页面

Actuator是什么?

Spring Boot Actuator 模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助我们监控和管理Spring Boot 应用。这个模块是一个采集应用内部信息暴露给外部的模块,上述的功能都可以通过HTTP 和 JMX 访问。

因为暴露内部信息的特性,Actuator 也可以和一些外部的应用监控系统整合(Prometheus, Graphite, DataDog, Influx, Wavefront, New Relic等)。这些监控系统提供了出色的仪表板,图形,分析和警报,可帮助你通过一个统一友好的界面,监视和管理你的应用程序。

Actuator使用Micrometer与这些外部应用程序监视系统集成。这样一来,只需很少的配置即可轻松集成外部的监控系统。

Actuator 使用 引入依赖

我们新建一个项目:jlw-actuator

引入 spring-boot-starter-actuator 的Maven依赖

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

启动项目,访问:/actuator/health,理论上页面会输出以下成功的信息。

{ "status": "UP" }

Endpoints

Spring Boot 提供了所谓的 endpoints (端点)给外部来与应用程序进行访问和交互,允许添加自己的端点。可以启用或禁用每个端点,并通过HTTP或JMX公开(可远程访问)。默认暴露的两个端点为/actuator/health和 /actuator/info。

暴露端点

端点可能包含敏感信息,所以应该仔细考虑何时公开它们。

下面的是默认暴露配置:

management.endpoints.jmx.exposure.exclude = * management.endpoints.jmx.exposure.include = * management.endpoints.web.exposure.exclude = * management.endpoints.web.exposure.include = info, health

暴露除/env,/beans之外的端点:

management: endpoints: web: exposure: include: "*" exclude: "env,beans" 禁用默认其他节点

下面的意思是默认不启用所有端点,仅启用/info端点

management: endpoints: enabled-by-default: false endpoint: info: enabled: true 修改前缀/actuator

在配置文件添加以下配置,自定义base-path属性

management: endpoints: web: base-path: /jinglingwang #https://jinglingwang.cn/archives/actuator

访问地址更改为:/jinglingwang/health

健康信息

/health端点会聚合程序的健康指标来检查程序的健康情况,默认配置值是never,不会显示详细信息,还有when-authorized和always两个选项值可配置。

management: endpoint: health: show-details: always

配置成always后访问/jinglingwang/health 会展示更多的信息,效果图如下:

⑧SpringCloud 实战:引入 Actuator监控+整合监控页面

禁用组件自动配置

Spring Boot会自动配置key为couchbase、datasource、diskspace、elasticsearch、hazelcast、influxdb、jms、ldap、mail、mongo、neo4j、ping、rabbit、redis、solr等运行状况指示器,可以通过management.health.key.enabled来配置启用/禁用指示器。

比如,禁用redis健康监测:

management: health: redis: enabled: false

重启之后,再访问/jinglingwang/health端点,里面就不会再有redis相关的信息了。

特殊的 shutdown 端点

默认情况下,除shutdown之外的所有端点都处于启用状态。

management: endpoint: shutdown: enabled: true

注意是endpoint,不是endpoints
生产环境使用需慎重!

然后Post访问:9000/jinglingwang/shutdown 就可以实现停机操作。

⑧SpringCloud 实战:引入 Actuator监控+整合监控页面

自定义健康指标

定制运行状况信息,可以注册实现 HealthIndicator 接口的springbean。需要提供health()方法的实现并返回一个健康响应。运行状况响应应该包括状态,并且可以选择包括要显示的其他详细信息。

@Component public class MyHealthIndicator implements HealthIndicator{ @Override public Health health() { //int errorCode = checkError(); //自定义逻辑 https://jinglingwang.cn/archives/actuator int errorCode = 1; if (errorCode != 1) { return Health.down().withDetail("Error Code", "https://jinglingwang.cn/ not found").build(); } return Health.up() .withDetail("code","200") .withDetail("message","http://jinglingwang.cn/") .build(); } }

端点安全校验

默认暴露的端点是没有任何安全校验的,敏感信息很容易就暴露了,如果把生产环境的全部端点都暴露在外网环境下,是非常可怕的一件事,这时候我们就可以结合Spring Security来做安全校验。

引入Security相关依赖

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-security</artifactId> </dependency>

配置好用户名密码

spring: security: user: name: jinglingwang password: jinglingwang.cn roles: ENDPOINT_ADMIN

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsszps.html