目录

Spring Boot Actuator 概述

启用 Actuator 执行器

Endpoints(端点)

启用端点(Enabling Endpoints)

Exposing Endpoints(公开端点)

配置端点缓存(Configuring Endpoints)

自定义端点访问路径

CORS Support(跨域支持)

健康信息(Health Information)

自定义应用信息

Actuator 快速启动


Spring Boot Actuator 概述

1、本文将以 Spring Boot 2.1.3 版本的文档进行介绍,官网:Part V. Spring Boot Actuator: Production-ready features

2、注意:2.x 以上的版本与之前的老版本细节上可能有许多不同,实际中应该多查看官方文档进行学习和使用,本文将介绍其中常用的一部分进行入门学习与指引。

SpringBoot 包含许多附加功能,帮助您在将应用程序推送到生产环境时监控和管理应用程序。您可以选择使用HTTP端点或使用JMX管理和监视应用程序。

3、spring-boot-actuator 组件的功能就是进行监控和管理应用程序。

Definition of Actuator(执行器的定义)

An actuator is a manufacturing term that refers to a mechanical device for moving or controlling something. Actuators can generate a large amount of motion from a small change.

执行器是一个制造术语,指的是移动或控制某物的机械装置,可以通过一个微小的变化而产生大量的运动。

启用 Actuator 执行器

1、Maven 项目时在 pom.xml 文件导入如下 Actuator 启动器:

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

2、Gradle 项目时:

dependencies {compile("org.springframework.boot:spring-boot-starter-actuator")
}

Endpoints(端点)

1、可以启用或禁用某个端点,要远程访问端点,还必须通过JMX或HTTP公开端点(大多数应用程序选择HTTP),其中端点的ID 和默认前缀/actuator 会映射到 URL,例如:默认情况下 health 端点映射到 "/actuator/health",浏览器可以通过:http://ip:port/context-path/actuator/health 访问 health 节点了。

ID 描述 默认是否启用
auditevents 显示当前应用程序的审计事件信息 Yes
beans 显示一个应用中所有Spring Beans的完整列表 Yes
conditions 显示配置类和自动配置类(configuration and auto-configuration classes)的状态及它们被应用或未被应用的原因 Yes
configprops 显示一个所有@ConfigurationProperties的集合列表 Yes
env 显示来自Spring的 ConfigurableEnvironment的属性 Yes
flyway 显示数据库迁移路径,如果有的话 Yes
health 显示应用的健康信息(当使用一个未认证连接访问时显示一个简单的’status’,使用认证连接访问则显示全部信息详情) Yes
info 显示任意的应用信息 Yes
liquibase 展示任何Liquibase数据库迁移路径,如果有的话 Yes
metrics 展示当前应用的metrics信息 Yes
mappings 显示一个所有@RequestMapping路径的集合列表 Yes
scheduledtasks 显示应用程序中的计划任务 Yes
sessions 允许从Spring会话支持的会话存储中检索和删除(retrieval and deletion)用户会话。使用Spring Session对反应性Web应用程序的支持时不可用。 Yes
shutdown 允许应用以优雅的方式关闭(默认情况下不启用) No
threaddump 执行一个线程dump Yes

启用端点(Enabling Endpoints)

1、默认情况下除了 shutdown 端点都已经默认启用,启用某个端点:则应用会创建此端点,同时存在于应用上下文中,启用之后不代表从浏览器就可以访问了,还需要将端点暴露/公开出来,web 才可以访问。

2、如果想启用某个端点,可以使用:management.endpoint.<id>.enabled  属性,值为 true 则为启用,false 为禁用,如启用 shutdown 端点:

management.endpoint.shutdown.enabled=true

3、如果希望端点启用是选择性加入而不是选择性排除,则可以使用 management.endpoints.enabled-by-default 属性设置为false,此时表示禁用了所有端点,然后再使用 management.endpoint.<id>.enabled  属性为 true 启用需要的端点即可,如下所示为除了 info 端点外的所有端点全部禁用。

management.endpoints.enabled-by-default=false
management.endpoint.info.enabled=true

Exposing Endpoints(公开端点)

1、启用端点后,要远程访问端点,还必须通过JMX或HTTP公开端点(大多数应用程序选择HTTP)

2、由于端点可能包含敏感信息,因此应仔细考虑何时公开它们,下表显示了内置端点的默认曝光情况:

ID JMX Web

auditevents

Yes

No

beans

Yes

No

caches

Yes

No

conditions

Yes

No

configprops

Yes

No

env

Yes

No

flyway

Yes

No

health

Yes

Yes

heapdump

N/A

No

httptrace

Yes

No

info

Yes

Yes

integrationgraph

Yes

No

jolokia

N/A

No

logfile

N/A

No

loggers

Yes

No

liquibase

Yes

No

metrics

Yes

No

mappings

Yes

No

prometheus

N/A

No

scheduledtasks

Yes

No

sessions

Yes

No

shutdown

Yes

No

threaddump

Yes

No

3、如上表所示,默认情况下只公开了 info、health 两个端点,如果想要更改公开/暴露的端点,使用如下的属性:

Property Default

management.endpoints.jmx.exposure.exclude (jmx方式排除需要公开的端点)

*

(*表示所有端点)

management.endpoints.jmx.exposure.include (jmx方式包含需要公开的端点)

management.endpoints.web.exposure.exclude (http方式排除需要公开的端点)

management.endpoints.web.exposure.include (http方式包含需要公开的端点)

info, health (默认公开了 info与health)

4、include 属性列出了公开的端点的ID,Exclude属性列出不公开的端点的ID。当某个端点同时出现在 include 和 exclude 时,则排除属性优先于包含属性。

例如 http 上只公开 info 和 health 端点,其余端点全部禁止公开:

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

例如通过HTTP公开除env和beans端点之外的所有端点:

management.endpoints.web.exposure.include=*    # * 表示所有端点,注意 * 在 YMAL 文件有特殊语义, YMAL 中时必须加单引号 '*'
management.endpoints.web.exposure.exclude=env,beans

配置端点缓存(Configuring Endpoints)

1、端点自动缓存响应,以读取不接受任何参数的操作,要配置端点缓存响应的时间量,请使用 management.endpoint.<ID>.cache.time-to-live 属性。

2、下面的示例将 beans、health 端点缓存时间设置为10秒:

management.endpoint.beans.cache.time-to-live=10s    #默认为0,不缓存
management.endpoint.health.cache.time-to-live=10s   #默认为0,不缓存
#其余端点也是同理

自定义端点访问路径

1、上面已经说过:端点的 ID 与默认前缀 /actuator 会自动映射到应用的 URL ,http 方式公开后浏览器便可以访问,例如:默认情况下访问 health 、info 端点如下:

http://ip:port/context-path/actuator/health
http://ip:port/context-path/actuator/info  #其余端点同理

2、如果想修改端点的默认前缀 “/actuator”,则可以使用 “management.endpoints.web.base-path” 属性,如下所示将端点默认前缀修改为 manage (实际开发中通常默认即可):

management.endpoints.web.base-path=/manage #默认为 actuator

此时端点的访问路径由默认的 "/actuator/{id}" 变成了 /manage/{id} (如 /manage/info).

3、除了修改端点默认的前缀 "/actuator",还可以修改端点的访问路径(映射),端点默认使用的是它的 <ID> 值,如果想要修改,则可以使用 “management.endpoints.web.path-mapping.<ID>” 属性,如下所示,修改默认的 "/actuator/health"、/actuator/info 分别为 "/healthcheck"、"/appinfo":

management.endpoints.web.base-path=/
management.endpoints.web.path-mapping.health=healthcheck
management.endpoints.web.path-mapping.info=appinfo

CORS Support(跨域支持)

1、跨域资源共享(Cross-origin resource sharing, CORS)是一种 W3C 规范,它允许您以灵活的方式指定授权哪些跨域请求。如果使用 Spring MVC 或 Spring WebFlux,则可以配置 Actuator 的 web 端点支持此类场景。

2、默认情况下禁用了 CORS 支持,只有在设置了 "management.endpoints.web.cors" 属性后才会启用。下面配置允许从htt://example.com 源进行 get 和 post 请求:

management.endpoints.web.cors.allowed-origins=http://example.com  #多个源时使用 "," 分隔,'*' 表示允许所有源进行访问,未设值时将禁用 CORS
management.endpoints.web.cors.allowed-methods=GET,POST  #指定允许访问方式,'*' 表示所有请求方式,默认允许进行 get 请求

3、官方并不只有上面两个配置,关于 cors 跨域配置一共如下所示:官网文档传送。

# ENDPOINTS CORS CONFIGURATION (CorsEndpointProperties)
management.endpoints.web.cors.allow-credentials= # Whether credentials are supported. When not set, credentials are not supported.
management.endpoints.web.cors.allowed-headers= # Comma-separated list of headers to allow in a request. '*' allows all headers.
management.endpoints.web.cors.allowed-methods= # Comma-separated list of methods to allow. '*' allows all methods. When not set, defaults to GET.
management.endpoints.web.cors.allowed-origins= # Comma-separated list of origins to allow. '*' allows all origins. When not set, CORS support is disabled.
management.endpoints.web.cors.exposed-headers= # Comma-separated list of headers to include in a response.
management.endpoints.web.cors.max-age=1800s # How long the response from a pre-flight request can be cached by clients. If a duration suffix is not specified, seconds will be used.

健康信息(Health Information)

1、可以使用健康信息来检查正在运行的应用程序的状态,当生产系统发生故障时,监控软件常常使用它来提醒某人。health 端点公开的信息取决于 management.endpoint.health.show-details 属性,show-details 可用值如下:

Name(名称) Description(描述)

never

Details are never shown. (细节从不展示给所有用户)——默认为 never

when-authorized

Details are only shown to authorized users. Authorized roles can be configured using management.endpoint.health.roles.(细节只展示给已经授权的用户,授权角色可以通过 management.endpoint.health.roles 配置

always

Details are shown to all users.(细节展示给所有用户)

自定义应用信息

1、Custom Application Information(自定义应用信息)。上面已经知道 info 端点默认是启用的,并且是公开的,当浏览器访问 http://ip:port/context-path/actuator/info 时,是可以访问到的,但是默认不会显示任何内容。

2、可以通过设置 info.* 自定义 spring 属性,由 info 端点向外进行公开数据。info key 下的所有环境属性都将自动对外公开,例如可以将以下设置添加到 application.properties 文件中:

# info key 后面的属性自定义即可,它们默认都会对外进行公开
info.app.encoding=UTF-8
info.app.java.source=1.8
info.app.java.target=1.8

3、可以在构建时扩展 info 属性,而不是硬编码这些值,假设您使用 maven,可以将前面的示例重写如下:

# info key 后面的属性自定义即可,它们默认都会对外进行公开
info.app.encoding=@project.build.sourceEncoding@
info.app.java.source=@java.version@
info.app.java.target=@java.version@

具体使用请参考下面的 “项目实战”部分。

Actuator 快速启动

1、上面都是通过 Spring Boot 官网 文档查看而来,官网关于 Actuator 的内容还有很多,上面仅仅只是其中一部分,短时间内没办法全部弄完,而且很多内容实际项目中也未必能派上用场,所以入门之后,以后可以根据实际需求再从官网参考即可:

更多详细内容应该参考官网:Spring Boot Actuator 2.1.3 官方文档:https://docs.spring.io/spring-boot/docs/2.1.3.RELEASE/reference/htmlsingle/#production-ready

Spring Boot 2.0 官方文档之 Actuator(博客):https://blog.csdn.net/alinyua/article/details/80009435

2、理论掌握的差不多了,现在来开始实际新建应用检验一下。环境:Java JDK 1.8 + Spring Boot 2.1.3 + IDEA 14.

1)新建应用

1、直接从 Spring Initializr 网页进行生成项目,Spring Boot 版本为 2.1.3,同时添加了 web 与 actuator 两个依赖。

2、然后接着解压之后导入到 IDEA 中,自动联网下载好依赖生成好项目:

3、pom.xml 文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>www.wmx.com</groupId><artifactId>actuatorApp</artifactId><version>0.0.1-SNAPSHOT</version><name>actuatorApp</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

2)application.yml配置

1、如下所示此时只配置服务器的端口与应用上下文,未配置 actuator,启动应用来进行 http 方式访问 actuator 端点。默认情况下此时只公开了 info、health 两个端点,所以只有这两个可以访问,默认前缀为 /actuator。

#服务器配置
server:port: 9393servlet:context-path: /actuatorApp

2、如下所示公开所有端点对外提供访问,并展示细节信息给所有用户查看:

#服务器配置
server:port: 9393servlet:context-path: /actuatorApp#配置 actuator
management:endpoints:web:exposure:include: '*' #公开所有端点,YMAL 文件时,* 必须加单引号,默认只公开了 info、healthendpoint:health:show-details: always #将端点细节展示给所有用户查看,默认为 never(不展示细节给所有用户)

3、上面已经说过,info 端点默认是没有内容的,需要自定义属性对外进行展示:

#服务器配置
server:port: 9393servlet:context-path: /actuatorApp#配置 actuator
management:endpoints:web:exposure:include: '*' #公开所有端点,YMAL 文件时,* 必须加单引号,默认只公开了 info、healthendpoint:health:show-details: always #将端点细节展示给所有用户查看,默认为 never(不展示细节给所有用户)info: #下面的值全部自定义即可 app:encoding: @project.build.sourceEncoding@  #应用编码java:source: @java.version@  #jdk 版本target: @java.version@  #jdk 版本author:name: wangMaoXiong  #作者姓名phone: 18673886425  #作者联系方式

其余内容不再一 一进行测试。

Spring Boot Actuator 监控和管理应用程序相关推荐

  1. Spring Boot Actuator [监控与管理]

    1. 如何添加 2. actuator 的原生端点(API) 2.1 应用类配置 2.1.1 http://localhost:8080/actuator/conditions 2.1.2 http: ...

  2. Spring Boot Actuator监控页面报错解决

    今天在访问Spring Boot Actuator监控页面的时候报错了,之前都没遇到这种情况,大概的意思就是无权限访问 <html><body><h1>Whitel ...

  3. spring boot actuator监控详细介绍一(超级详细)

    spring boot actuator介绍 Spring Boot包含许多其他功能,可帮助您在将应用程序推送到生产环境时监视和管理应用程序. 您可以选择使用HTTP端点或JMX来管理和监视应用程序. ...

  4. (转)Spring Boot (十九):使用 Spring Boot Actuator 监控应用

    http://www.ityouknow.com/springboot/2018/02/06/spring-boot-actuator.html 微服务的特点决定了功能模块的部署是分布式的,大部分功能 ...

  5. 使⽤用 Spring Boot Actuator 监控应⽤

    1.美图 2.概述 微服务的特点决定了功能模块的部署是分布式的,⼤部分功能模块都是运行在不同的机器上,彼此通过服务调⽤进行交互,前后台的业务流会经过很多个微服务的处理和传递,出现异常如何快速定位便成为 ...

  6. SpringBoot 集成Spring Boot Actuator 监控管理

    spring-boot-starter-actuator功能简介 根据应用依赖和配置自动创建出来的监控和管理端点.通过这些端点,我们可以实时获取系统应用的各项监控指标. spring-boot-sta ...

  7. Spring Boot Actuator监控关闭

    可以使用如下属性:management.endpoints.enabled-by-default=false * 在YAML中有特殊的含义,所以如果想使用include或者exclude包含所有的端点 ...

  8. 高级版的 jvisualvm :Spring Boot Admin 监控 Spring Boot 微服务项目

    前奏:先说一下 Java VisualVM Java VisualVM 是一个能够监控 JVM 的 jdk 自带的图形化工具: 在 $JAVA_HOME/bin 目录下,可直接运行它. 要想监控远程服 ...

  9. 如何将 Spring Boot Actuator 的指标信息输出到 InfluxDB 和 Prometheus

    来源:SpringForAll社区 Spring Boot Actuator是Spring Boot 2发布后修改最多的项目之一.它经过了主要的改进,旨在简化定制,并包括一些新功能,如支持其他Web技 ...

  10. 黑白盒 时序Prometheus详解 ; 含 全链路Spring Boot Actuator - google dapper论文 -ELK 日志易 吹牛篇

    一 Prometheus配置文件详解 # 四个模块 配置文件指标说明 global: 全局配置(如果有内部单独设定,会覆盖这个参数) alerting: 告警插件定义.这里会设定alertmanage ...

最新文章

  1. 程序员的福音,AI可以自动修复bug了!
  2. php连接plc,PLC 几种常见的连接口和通讯协议
  3. 视觉研究的前世今生(上)王天珍(武汉理工大学)
  4. 性能提升3倍、时延降低70%,阿里云企业级存储ESSD云盘再升级!
  5. eclipse 2019-12版本安装svn
  6. 修改时间日期 linux,查看和修改 Linux 的时间和日期
  7. vue2.0+ajax封装,vue2 封装 ajax插件
  8. Android开发实战使用(VR技术实现360°全景视频播放功能)
  9. 饭谈:失眠,还有梦魇,第二天要上班应该怎么办?
  10. 《面向对象分析与设计》一3.7 例题
  11. 《GTA5》揭秘游戏背后的故事
  12. ORAN C平面 Section Extension 8
  13. 软件:汽车的灵魂操盘手
  14. 职教云python题和答案_智慧职教云课堂APPPython程序设计题库及答案
  15. 【2016-05-09】程序员的日常:咖啡
  16. 设置TinyMCE在线HTML编辑控件只读
  17. 虾扑XIAPU:ERP全新版本亮相 ERP多店铺管理系统
  18. 十大运动蓝牙耳机品牌,目前最好的六款运动耳机
  19. RFID天线的分类和设计要求
  20. javascript:解决两个小数相乘出现无限小数

热门文章

  1. unity 线程断点时卡机_Java使用JDI进行线上程序断点信息记录
  2. 拓端tecdat:R语言梯度提升机 GBM、支持向量机SVM、正则判别分析RDA模型训练、参数调优化和性能比较可视化分析声纳数据
  3. 拓端tecdat|R语言时间序列TAR阈值模型分析
  4. 最贵服务器多少钱_十次方分享:租服务器一般花费多少钱一年?
  5. envi反演水质参数_基于大气校正法的Landsat 8 TIRS地表温度反演
  6. pytorch def __init__(self, num_classes, bkg_label, top_k, conf_thresh, nms_thresh):
  7. Caffe的各个版本简介
  8. 20171017在线编程题
  9. ubuntu安装cmake
  10. linux安装oracle11g视频,Linux安装oracle11g详细步骤及问题汇总