热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

SpringBoot2.x中Actuator的一些知识点

这篇文章主要给大家介绍了关于SpringBoot2.x中Actuator的一些知识点,文中通过示例代码介绍的非常详细,对大家学习或者使用SpringBoot2.x具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

1. 前言

Spring Boot 提供了很多开箱即用的starter,其中有一款非常特别的starter——actuator 。它是用来对Spring Boot 应用进行监控、指标采集、管理,并提供一些很有用的端点(endpoint)来实现上述功能。这有助于我们对Spring Boot 应用进行监视和管理。我们本文将探讨Spring Boot 2.x下的actuator的一些知识点。

2. 集成

像其它starter一样,通过非常简单的依赖集成即可开箱即用。我们通过在项目中引入(以maven为例):

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

3. endpoints

Actuator的核心是端点(endpoint),我们通过端点来获取应用的一些监控信息或者通过端点来改变系统的一些状态。Actuator中内置了非常多的端点:

id 描述 默认是否启用
auditevents 显示当前应用程序的审计事件信息 Yes
beans 显示应用Spring Beans的完整列表 Yes
caches 显示可用缓存信息 Yes
conditions 显示自动装配类的状态及及应用信息 Yes
configprops 显示所有 @ConfigurationProperties 列表 Yes
env 显示 ConfigurableEnvironment 中的属性 Yes
flyway 显示 Flyway 数据库迁移信息 Yes
health 显示应用的健康信息(未认证只显示status,认证显示全部信息详情) Yes
info 显示任意的应用信息 Yes
liquibase 展示Liquibase 数据库迁移 Yes
metrics 展示当前应用的 metrics 信息 Yes
mappings 显示所有 @RequestMapping 路径集列表 Yes
scheduledtasks 显示应用程序中的计划任务 Yes
sessions 允许从Spring会话支持的会话存储中检索和删除用户会话。 Yes
shutdown 允许应用以优雅的方式关闭(默认情况下不启用) No
threaddump 执行一个线程dump Yes
httptrace 显示HTTP跟踪信息(默认显示最后100个HTTP请求 - 响应交换) Yes
heapdump 返回一个GZip压缩的hprof堆dump文件 Yes
prometheus Prometheus服务器抓取的格式显示metrics信息 Yes

3.1 启用与关闭

默认情况下除了shutdown是关闭的其它端点都是启用的。个别端点的启用依赖其他组件,比如我们上篇文章介绍的Prometheus。我们可以在Spring Boot 配置文件中通过配置(id参见上表)management.endpoint..enabled来配置端点是否启用。

另外我们可以通过management.endpoints.enabled-by-default来修改全局端口默认配置,以下示例启用info端点并禁用所有其他端点:

# 先设置所有的端点默认为关闭
management.endpoints.enabled-by-default=false
# 然后开启info 端点
management.endpoint.info.enabled=true

3.2 开放与封闭

特别需要我们注意的是,以上只是我们开启的端点功能,并不意味我们把这些端点暴露给应用之外的环境中去。暴露的配置规则是 management.endpoints..exposure.我们以web为例,通过以下方式来暴露web端点:

# * 为暴露所有web端点,如果暴露的是一个列表请使用端点 id 并以逗号隔开 
management.endpoints.web.exposure.include='*'

同样的如果我们要排除一些web端点请用 management.endpoints.web.exposure.exclude来配置。我们可以通过/actuator来列举暴露的端点。当然这个路径取决于我们对management.endpoints.web.basePath的配置。

3.3 安全性

对于生产环境来说端点都是敏感的。我们当然不希望非法的访问端点,特别如/shutdown这种端点。我们可以通过上面3.1、3.2进行关闭、封闭操作。也可直接配置management.server.port=-1 来关闭管理端点。或者确保在外面的安全框架诸如Spring security的控制之下。即保证 EndpointRequest.toAnyEndpoint()的安全性。

3.4 自定义端点

Spring Boot 2.x 开始,Actuator支持CRUD模型,而不是旧的RW(读/写)模型。我们可以按照两种策略来自定义:

  • @Endpoint 同时支持JMX和http
  • @JmxEndpoint 只支持JMX技术
  • @WebEndpoint 只支持http

通过在一个端点类(必须是Spring Bean)上添加上面其中一个来表明该类是一个端点类。

在类的方法使用@ReadOperation,@WriteOperation或@DeleteOperation,这分别会映射到Http中的 GET、POST、DELETE(对http来说)。 以下是我们自定义的一个端点:

@Component
@Endpoint(id = "features")
public class FeaturesEndpoint {

 private Map features = new ConcurrentHashMap<>();

 @ReadOperation
 public Map features() {
  return features;
 }

 @ReadOperation
 public Feature feature(@Selector String name) {
  return features.get(name);
 }

 @WriteOperation
 public void configureFeature(@Selector String name, Feature feature) {
  features.put(name, feature);
 }

 @DeleteOperation
 public void deleteFeature(@Selector String name) {
  features.remove(name);
 }

 public static class Feature {
  private Boolean enabled;

  // [...] getters and setters 
 }

}

注意请务必保证端点的id在该应用中唯一。

3.5 端点扩展

假设我们想要确保我们的应用程序的生产实例永远不是SNAPSHOT版本。我们决定通过更改返回此信息的Actuator端点(/info)来完成此操作。如果我们的应用程序恰好是SNAPSHOT。我们将获得不同的HTTP状态代码。

我们可以使用@EndpointExtension或其更具体的@EndpointWebExtension、@EndpointJmxExtension轻松扩展预定义端点的行为:

@Component
@EndpointWebExtension(endpoint = InfoEndpoint.class)
public class InfoWebEndpointExtension {
 
 private InfoEndpoint delegate;
 
 // standard constructor
 
 @ReadOperation
 public WebEndpointResponse info() {
  Map info = this.delegate.info();
  Integer status = getStatus(info);
  return new WebEndpointResponse<>(info, status);
 }
 
 private Integer getStatus(Map info) {
  // return 5xx if this is a snapshot
  return 200;
 }
}

3.6 Spring Boot metrics

运维应用监控依赖于对应用度量(metric)指标的抽取。Spring Boot 2.x中的Actuator 对Micrometer的自动配置。 甚至我们可以通过一个叫MeterRegistry的Spring Bean来注册一个自定义的metric指标。我们可以通过/actuator/metrics端点获取所有的metric指标。 也可以通过/actuator/metrics/{metricName} 来获取具体度量的元数据。

Micrometer 是一个应用度量门面类库,类似SLF4。后面我会专门写一篇文章来介绍这个知识点。请关注我的公众号:Felordcn 以保证第一时间获取相关的知识。

4. 总结

本文我们介绍了Spring Boot 2.x中Actuator 组件。该组件可以帮助我们来获取系统的一些元信息和一些监控度量指标。对于Spring Boot 应用十分重要。该组件是一个生产级别的工具,我们不应该忽略它。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。

作者:码农小胖哥

来源:https://segmentfault.com/a/1190000020361935


推荐阅读
  • 随着网络安全威胁的不断演变,电子邮件系统成为攻击者频繁利用的目标。本文详细探讨了电子邮件系统中的常见漏洞及其潜在风险,并提供了专业的防护建议。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 如何彻底清除顽固软件如360
    本文详细介绍了如何彻底卸载难以删除的软件,如360安全卫士。这类软件不仅难以卸载,还会在开机时启动多个应用,影响系统性能。我们将提供两种有效的方法来帮助您彻底清理这些顽固软件。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文介绍如何处理服务器上使用curl命令访问HTTPS域名时出现的SSL连接错误问题。通过更新NSS库版本,可以有效解决这一常见问题。 ... [详细]
  • 探讨了小型企业在构建安全网络和软件时所面临的挑战和机遇。本文介绍了如何通过合理的方法和工具,确保小型企业能够有效提升其软件的安全性,从而保护客户数据并增强市场竞争力。 ... [详细]
  • 在Python开发过程中,随着项目数量的增加,不同项目依赖于不同版本的库,容易引发依赖冲突。为了避免这些问题,并保持开发环境的整洁,可以使用Virtualenv和Virtualenvwrapper来创建和管理多个隔离的Python虚拟环境。 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
  • 配置Windows操作系统以确保DAW(数字音频工作站)硬件和软件的高效运行可能是一个复杂且令人沮丧的过程。本文提供了一系列专业建议,帮助你优化Windows系统,确保录音和音频处理的流畅性。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
author-avatar
看人不顺眼说明6自己没教养
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有