springboot 学习笔记(四) 初识actuator

2022-06-29 15:37:18 浏览数 (1)

spring-boot-starter-actuator:

一、介绍:

Spring Boot包含许多附加功能,可帮助您在将应用程序投入生产时监视和管理应用程序。 您可以选择使用HTTP端点或JMX来管理和监控您的应用程序。 审计,健康和指标收集也可以自动应用于您的应用程序。

二、使用:

在pom中新增一个依赖

代码语言:javascript复制
<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-actuator</artifactId>
	</dependency>
</dependencies>

三、进一步使用

他包含很多端点,我们可以通过端点来访问具体的功能,如下

ID

Description

Enabled by default

auditevents

Exposes audit events information for the current application.

Yes

beans

Displays a complete list of all the Spring beans in your application.

Yes

conditions

Shows the conditions that were evaluated on configuration and auto-configuration classes and the reasons why they did or did not match.

Yes

configprops

Displays a collated list of all @ConfigurationProperties.

Yes

env

Exposes properties from Spring’s ConfigurableEnvironment.

Yes

flyway

Shows any Flyway database migrations that have been applied.

Yes

health

Shows application health information.

Yes

httptrace

Displays HTTP trace information (by default, the last 100 HTTP request-response exchanges).

Yes

info

Displays arbitrary application info.

Yes

loggers

Shows and modifies the configuration of loggers in the application.

Yes

liquibase

Shows any Liquibase database migrations that have been applied.

Yes

metrics

Shows ‘metrics’ information for the current application.

Yes

mappings

Displays a collated list of all @RequestMapping paths.

Yes

scheduledtasks

Displays the scheduled tasks in your application.

Yes

sessions

Allows retrieval and deletion of user sessions from a Spring Session-backed session store. Not available when using Spring Session’s support for reactive web applications.

Yes

shutdown

Lets the application be gracefully shutdown.

No

threaddump

Performs a thread dump.

Yes

如果您的应用程序是一个Web应用程序(Spring MVC,Spring WebFlux或Jersey),则可以使用以下附加端点:

ID

Description

Enabled by default

heapdump

Returns a GZip compressed hprof heap dump file.

Yes

jolokia

Exposes JMX beans over HTTP (when Jolokia is on the classpath, not available for WebFlux).

Yes

logfile

Returns the contents of the logfile (if logging.file or logging.path properties have been set). Supports the use of the HTTP Range header to retrieve part of the log file’s content.

Yes

prometheus

Exposes metrics in a format that can be scraped by a Prometheus server.

Yes

默认情况下,大部分的端点是开启的,如果想要关闭,则可以通过

代码语言:javascript复制
management.endpoints.enabled-by-default=false

出于安全考虑,可以选择公开或隐藏一些端点,下面是springboot默认的端点公开情况

ID

JMX

Web

auditevents

Yes

No

beans

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

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

要更改公开哪些端点,请使用以下技术特定的包含和排除属性:

Property

Default

management.endpoints.jmx.exposure.exclude

management.endpoints.jmx.exposure.include

*

management.endpoints.web.exposure.exclude

management.endpoints.web.exposure.include

info, health

include属性列出了公开的端点的ID。 exclude属性列出了不应该公开的端点的ID。 排除属性优先于包含属性。 包含和排除属性都可以使用端点ID列表进行配置。

例如,要停止通过JMX公开所有端点并仅公开健康和信息端点,请使用以下属性:

代码语言:javascript复制
management.endpoints.jmx.exposure.include=health,info

*可用于选择所有端点。 例如,要通过HTTP公开除env和beans端点之外的所有内容,请使用以下属性:

代码语言:javascript复制
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env,beans

*在YAML中有特殊含义,因此如果要包含(或排除)所有端点,请务必添加引号,如以下示例中所示:

代码语言:javascript复制
management:
	endpoints:
		web:
			exposure:
				include: "*"

如果您希望在暴露端点时实施您自己的策略,您可以注册一个EndpointFilter bean。

保护HTTP端点(Securing HTTP Endpoints)

您应该注意保护HTTP端点的方式与使用其他任何敏感网址的方式相同。 如果存在Spring Security,则使用Spring Security的内容协商策略默认保护端点。 例如,如果您希望为HTTP端点配置自定义安全性,则只允许具有特定角色的用户访问它们,Spring Boot提供了一些便捷的RequestMatcher对象,可以与Spring Security结合使用。

一个典型的Spring Security配置可能看起来像下面的例子:

代码语言:javascript复制
@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();
	}

}

上例使用EndpointRequest.toAnyEndpoint()将请求与任何端点进行匹配,然后确保所有端点都具有ENDPOINT_ADMIN角色。 EndpointRequest上还有其他几种匹配器方法。 有关详细信息,请参阅API文档(HTML或PDF)。

如果您在防火墙后面部署应用程序,您可能更喜欢所有的执行器端点都可以在无需验证的情况下进行访问。 您可以通过更改management.endpoints.web.exposure.include属性来完成此操作,如下所示

代码语言:javascript复制
management.endpoints.web.exposure.include=*

此外,如果存在Spring Security,则需要添加自定义安全配置,以允许对端点进行未经身份验证的访问,如以下示例所示:

代码语言:javascript复制
@Configuration
public class ActuatorSecurity extends WebSecurityConfigurerAdapter {

	@Override
	protected void configure(HttpSecurity http) throws Exception {
		http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests()
			.anyRequest().permitAll()
	}

}

四、配置端点

端点自动缓存响应以读取不带任何参数的操作。 要配置端点缓存响应的时间量,请使用其cache.time-live属性。 以下示例将Bean端点缓存的生存时间设置为10秒:

代码语言:javascript复制
management.endpoint.beans.cache.time-to-live=10s

如果您想要了解更多关于 spring-boot-starter-actuator的信息,请参考官网链接

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/101667.html原文链接:https://javaforall.cn

0 人点赞