SpringBoot-监控与管理(actuator)

《Spring Cloud 微服务实战》 学习笔记

监控与管理

在微服务架构中,我们将原本庞大的单体系统拆分为多个单独的服务应用。虽然个体个应用的内部逻辑因分解而得以简化。但是由于部署应用的数量成倍增长,使得系统的维护复杂度大大提升。对于运维人员来说,
随着应用的不断增多,系统集群中出现故障的频率也越来越高。
为了能对这些成倍增长的应用做到高效运维,使用传统的运维方式显然是不合适的。所以我们需要一套自动化的运维监控机制,这套机制的基础就是不间断的收集各个微服务应用的各项指标,并根据这些基础指标信息来指定监控和预警规则,更进一步甚至做到一些自动化运维操作等。

为了让运维系统能够获取各个微服务应用 的相关指标以及实现一些常规操作控制,我们需要开发一套专用于植入各个微服务应用的接口监控系统采集信息.这些信息有很大一部分指标都是类似的:比如:环境变量,垃圾收集信息,内存信息,线程池信息等.

spring-boot-starter-actuator

SpringBoot微服务框架提供了一个特殊的模块:spring-boot-starter-actuator.

认识actuator

maven依赖

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

应用
启动应用后,会发现后台输出日志:
在这里插入图片描述
,默认开启了两个端点:/actuator/health,/actuator/info,
在这里插入图片描述

spring-boot 2.x 默认屏蔽了所有的web端点,只开放了health和info两个端点,如果如要是释放其他端点可以使用如下方式:

management:
 endpoints:
   web:
     exposure:
       ## 开启所有端点
#       include: "*"

       ## 将开启具体的端点
       include:  ["metrics","beans"]

Endpoints

端点清单
Spring Boot 2actuator 所有的端点都有一个默认的根路径/actuator,若想查看health信息,则需要访问/actuator/health.
下面为所有端点的清单。

  1. /auditevents: 当前应用程序的审核事件信息 ??
  2. /beans: 列出所有的bean
  3. /caches: 列出所有的可用的缓存
  4. /health: 当前应用的健康状况
  5. /conditions: 列出带有@Conditiaon注解的配置类上:条件通过或不通过的原因。
  6. /configprops: 列出所有@ConfigurationProperties 配置类。
  7. env: 当前环境信息
  8. /info: 展示当前应用信息。 在配置文件中:info.* 配置信息。
  9. /loggers: 展示和更新 当前logger的配置信息
  10. /heapdump: 下载堆快照文件。
  11. threaddump: 展示线程堆信息
  12. /metrics: 展示指标项信息清单. 指标包含内存,堆,线程等多项指标信息. 但此请求并不返回具体的指标数据,若想要获取具体的指标,如jvm.memory.max,则需要请求:/actuator/metrics/jvm.memory.max
  13. /scheduledtasks: 应用中所有 scheduled tasks.
  14. /httptrace: 记录最近的100次http请求和响应。(包含/actuator 请求)
  15. /mappings: 返回所有的@RequestMapping信息. (包含/actuator 请求)
  16. shutdown:关闭当前应用(默认关闭)

这些端点可以分为三大类:

  • 应用配置类: 获取应用程序中加载的应用配置,环境变量,自动化配置等信息
  • 度量指标类: 获取应用程序运行过程中用于监控的指标信息。比如线程信息,内存信息,HTTP请求统计等。
  • 操作控制类: 提供对应用的关闭等操作类功能。

度量指标类 - metrics
在这里插入图片描述
查看某一项具体的指标:
在这里插入图片描述
度量指标类 - health
通常.使用health只能查看到很简略的信息,如果想要看到详细的信息需要使用配置:
management.endpoint.health.show-details,它有三个可选值

  • never: 永不展示
  • always: 所有用户均可展示
  • when-authorized: 只展示给部分拥有management.endpoint.health.roles角色的用户。

默认,health检查如下信息:

namedescriptions
DiskSpaceHealthIndicator低磁盘空间检测
DataSourceHealthIndicatorDataSource 连接是否可用

更多详情见:_auto_configured_healthindicators

自定义health检测项

@Component
public class RocketMQHealthIndicator implements HealthIndicator {
    @Override
    public Health health() {
        int errorCode = check();
        if(errorCode != 0){
            return Health.down().withDetail("Error Code", errorCode).build();
        }
        return Health.up().build();
    }

    private int check(){
        //todo 模拟检测操作
        int epochMil = (int) Instant.now().toEpochMilli();
        return epochMil & 1;
    }
}

请求查看/actuator/health:
在这里插入图片描述

操作控制类 - shutdown
通过请求actuator/shutdown关闭应用,默认是未开启端点,必须使用如下配置:
management.endpoint.shutdown.enabled=true,且仅允许POST方法:

在这里插入图片描述

这一步操作,关闭应用时非常危险 的一件事,所以在线上使用的时候,一定要加入保护机制,如整合安全框架,对该请求进行保护。

整合安全框架–spring security

@Configuration
public class ActuatorSecurity extends WebSecurityConfigurerAdapter {

	@Override
	protected void configure(HttpSecurity http) throws Exception {
		http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests()
				.anyRequest().hasRole("ENDPOINT_ADMIN")
				.and()
			.httpBasic();
	}

}

CORS Support

management.endpoints.web.cors.allowed-origins=http://example.com
management.endpoints.web.cors.allowed-methods=GET,POST
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值