概述
Spring Boot自带一个名为Actuator执行器的模块,可以启用有关应用程序的指标和统计信息。例如,我们可以收集日志,查看指标,执行线程转储,显示环境变量,了解垃圾收集,以及显示BeanFactory中配置的bean。您可以通过HTTP,JMX公开此信息,或者甚至可以通过SSH直接登录到该过程。
公开应用程序指标和信息
当你已经成功开发了Spring Boot 应用程序后,将它部署到了生产环境中,你将如何
监控它?如何才能了解程序的运行方式?我们的微服务通常都是黑盒子,除非我们明确地考虑如何将指标公开给外界。
Spring Boot附带一个预先打包的启动器,称为Actuator,可以轻松实现这一目标。
启用Actuator
要在Boot中开始使用现有的执行器 - 我们只需要将spring-boot-actuator依赖项添加到pom中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.0.4.RELEASE</version>
</dependency>
就是这么简单! 您现在已将执行器添加到现有应用程序中。重新启动应用程序时,将为用户访问启用端点。更多详细的配置和度量的自定义将在以后的部分中介绍。
执行器端点
只需添加执行器依赖项,我们的应用程序现在已经公开了大量信息,这对于调试或一般的微服务洞察非常方便。
大多数端点都是敏感的 - 这意味着它们并非完全公开 - 而少数端点则不是,比如:/health和/info。
以下是Boot提供的一些最常见的端点:
- /health - 显示应用程序运行状况信息(包含通过未经身份验证的连接访问时的简单“状态”或经过身份验证时的完整消息详细信息)。默认情况下它不敏感。
- /info - 显示任意应用程序信息。默认不敏感。
- /metrics - 显示当前应用程序的“指标”信息。它默认是敏感的。
- /trace - 显示跟踪信息(默认情况下为最后几个HTTP请求)。
您可以在官方文档中找到现有端点的完整列表。
自定义管理服务器端口
使用默认HTTP端口公开管理端点是基于云的部署的明智选择。但是,如果您的应用程序在您自己的数据中心内运行,您可能更喜欢使用不同的HTTP端口公开端点。
使用management.port属性可用于更改HTTP端口。
management.port=8081
安全
大多数情况下,通过端点公开的详细信息都很敏感,需要授权用户查看详细信息。您可以添加spring security以保护您的终端。只需添加依赖项,当类路径中有spring安全文件时,它将自动配置。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
默认情况下,启用basic安全性。这将为所有端点启用。但是,您可以通过更新application.properties文件来禁用它们,并在没有安全性的情况下公开非敏感端点。
以下是配置spring boot 执行器应用程序安全性所需的基本条目:
management.security.enabled=true
security.basic.enabled=true
security.user.name=admin
security.user.password=admin
在上面的配置中,我们启用基本安全性并提供用户名和密码来访问端点。当用户尝试访问端点时,浏览器上将弹出以使用凭据对用户进行身份验证。
自定义端点
可以使用以下格式使用属性自定义每个端点:
endpoints.[endpoint name].[property to customize]
有三个属性:
- id - 通过HTTP访问此端点
- enabled - 如果为true,则可以访问,否则不能访问
- sensitive - 如果是,则需要授权通过HTTP显示关键信息。
例如,添加以下属性将自定义/beans端点:
endpoints.beans.id=springbeans
endpoints.beans.sensitive=false
endpoints.beans.enabled=true
Health端点
/health端点被用来检查正在运行的应用程序的健康状态。它通常由基本监控软件用于在生产出现故障时提醒您。
默认情况下,仅显示健康信息以通过HTTP进行未经授权的访问
{
"status" : "UP"
}
此健康信息是从HealthIndicator应用程序上下文中配置的所有bean实现接口收集的。
返回的某些信息HealthIndicator本质上是敏感的 - 但您可以配置endpoints.health.sensitive=false为公开其他信息,如磁盘空间,数据源等。
自定义Health端点
您还可以自定义健康指标。可以扩展HealthIndicator接口并提供自己的实现。创建此类型的自定义类并覆盖health()方法,自定义逻辑将覆盖默认功能。
@Component
public class CustomHealthCheck implements HealthIndicator {
public Health health() {
int errorCode = 0;
if (errorCode != 1) {
return Health.down().withDetail("Error Code", errorCode).build();
}
return Health.up().build();
}
}
输出将是:
{
"status": "DOWN",
"customHealthCheck": {
"status": "DOWN",
"Error Code": 0
},
"diskSpace": {
"status": "UP",
"free": 19593824409432,
"threshold": 15485791
}
}
Info端点
您还可以自定义/ info端点显示的数据 - 例如:
endpoints.info.id=info
endpoints.info.sensitive=false
endpoints.info.enabled=true
info.app.name=Spring Actuator Example
info.app.description=Simple project of Spring Actuator with examples
info.app.version=0.0.1-SNAPSHOT
示例输出:
{
"app": {
"version": "0.0.1-SNAPSHOT",
"description": "Simple project of Spring Actuator with examples",
"name": "Spring Actuator Example"
}
}
Metrics端点
度量端点是收集和发布有关操作系统,JVM和应用程序级别度量的信息的更重要的端点之一, 开箱即用。我们能得到内存,堆,处理器,线程,加载类,卸载类,线程池以及一些HTTP指标等内容。
Dump端点
当您的应用程序遇到任何性能问题时,Thread Dumps很重要。在正常情况下,您必须请求生产服务器管理员以频繁的间隔进行Thread Dumps并发送给您进行分析。但是,这需要花费大量时间,并且只有在出现实际性能问题时才需要Thread Dumps。
这个端点将为生产应用程序提供真正的好处,只需通过使用浏览器访问应用程序来获取Thread Dumps。看到Spring Boot 为生产应用提供了如此出色的功能,真是太棒了!
自定义端点实现
除了Spring Boot引用的上述默认端点之外,我们可以通过实现接口Endpoint来编写自己的端点。当您希望公开应用程序详细信息(这是应用程序的附加功能)时,这非常有用。例如,在此示例中,我创建了一个自定义端点来显示应用程序的服务器详细信息。
实现类看起来像这样:
@Component
public class ServerEndpoint implements Endpoint<List<String>> {
public String getId() {
return "server";
}
public List<String> invoke() {
List<String> serverDetails = new ArrayList<String>();
try {
serverDetails.add("Server IP Address : " + InetAddress.getLocalHost().getHostAddress());
serverDetails.add("Server OS : " + System.getProperty("os.name").toLowerCase());
} catch (Exception e) {
e.printStackTrace();
}
return serverDetails;
}
public boolean isEnabled() {
return true;
}
public boolean isSensitive() {
return false;
}
}
这是输出的样子:
["Server IP Address : 192.168.1.164","Server OS : Mac OS X"]
总结
Actuator是Spring Boot项目中非常强大一个功能,有助于对应用程序进行监视和管理,通过restful api请求来监管、审计、收集应用的运行情况。
随着Spring boot 2.0的发布,Actuator获得了许多新功能。虽然它经过重新设计并添加了新的edpoints,但Actuator保留了其基本意图,简化了其模型,扩展了其功能并采用了更好的默认设置。
Spring Boot 1.x与2.x中的用法和不同点可参看我们另一篇文章:服务监控 Spring Boot Actuator 介绍
最后
以上就是虚拟大船为你收集整理的Spring Boot四大神器之Actuator的全部内容,希望文章能够帮你解决Spring Boot四大神器之Actuator所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复