Spring Boot 探索 | 服务监控与管理 Actuator

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liupeifeng3514/article/details/85223117

先在这里声明一下:这一系列的文章都是自己查询网上资料学习而来,不可避免有些内容从其他地方copy过来,如有侵犯请联系我删除,谢谢!(引用部分都会添加注脚

本系列文章的写作环境为:Spring Boot 2.0.7.RELEASEJDK 1.8.0_131IntelliJ IDEA ULTIMATE 2018.1。并没有使用最新版本的Spring Boot进行学习,新版本还不稳定,存在很多问题,不要把时间花费在无谓的BUG上。

微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用进行交互,前后台的业务流会经过很多个微服务的处理和传递,出现了异常如何快速定位是哪个环节出现了问题?1

在这种框架下,微服务的监控显得尤为重要。本文主要结合Spring Boot Actuator,跟大家一起分享微服务Spring Boot Actuator的常见用法,方便我们在日常中对我们的微服务进行监控治理。

1 Actuator 介绍


ActuatorSpring Boot项目中非常强大一个功能,有助于对应用程序进行监视和管理,通过 restful api 请求来监管、审计、收集应用的运行情况,针对微服务而言它是必不可少的一个环节…2

2 Actuator 配置过程


2.1 pom.xml 添加依赖

Actuator监控只需要添加以下依赖就可以完成:

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

注意:spring-boot-starter-web依赖是必须要添加的。否则会报如下错误:
在这里插入图片描述

2.2 配置启动类

启动类不需要进行任何添加或修改。

2.3 application.yml基础配置

Actuator 不需要添加或修改任何配置,添加完成后直接启动应用即可。在这里只说明一下最基本的配置:

server.port: 8080
management.server.port: 8088

配置解释:

  • server.port:服务实例(应用本身,即未添加Actuator前)的监听端口;
  • management.server.port:为了安全一般都启用独立的端口来访问后端的监控信息,默认与server.port相同;

配置完成之后,启动项目就可以继续验证各个监控功能了。

2.4 Controller、Service等

Actuator监控不需要Controller、Service等,只需简单配置就可以。

2.5 配置/测试/展示结果

关于端点大家可以看我的这篇文章:Spring Boot 探索 | Actuator 端点详细说明

2.5.1 禁用/开启和暴露端点

要更改暴露的端点,可以使用include和exclude属性:

属性 默认
management.endpoints.web.exposure.exclude
management.endpoints.web.exposure.include info, health

include 属性列出了暴露的端点的 id,exclude 属性列出不应暴露的端点的id,exclude 属性优先于 include 属性。

以开启 shutdown 端点为例,在application.yml文件中添加如下配置项:

management.endpoint.shutdown.enabled: true # 启用端点
management.endpoints.web.exposure.include: info,health,shutdown # 暴露端点

重新启动应用,访问结果如下(因为是post请求,我们使用postman):
在这里插入图片描述

注意:只有启用端口暴露端口才能正常访问 shutdown 端点。

2.5.2 修改端点映射路径

默认情况下,通过使用端点的ID在/actuator路径下通过HTTP公开端点,例如,health端点在/actuator/health下公开(如下图所示)。
在这里插入图片描述
如果希望将端点映射到不同的路径,可以使用management.endpoints.web.path-mapping属性。例如,在application.yml文件中添加如下配置项:

management.endpoints.web.path-mapping.health: healthcheck # 将 health 端点重新映射为 healthcheck

此时,映射路径为/actuator/healthcheck(如下图所示):
在这里插入图片描述

2.5.3 修改基本路径

如果你想要更改基本路径,你可以使用management.endpoints.web.base-path。例如,在application.yml文件中添加如下配置项:

management.endpoints.web.base-path: /monitor

此时,映射路径全部以/monitor为前缀(如下图所示):
在这里插入图片描述
这里需要注意一点:

  • 如果没有设置 management.server.portmanagement.endpoints.web.base-path是相对于server.servlet.context-path的;
  • 如果设置了 management.server.portmanagement.endpoints.web.base-path是相对于management.server.servlet.context-path的;

不理解的小伙伴可以自己尝试一下就好了。

4 附加补充


4.1 其他参数

# 禁用HTTP端点。如果不希望通过HTTP公开端点,则可以将管理端口设置为-1
management.port: -1
# 端点为不带任何参数的读取操作自动缓存响应,下面的示例将beans端点缓存的生存时间设置为10秒
management.endpoint.beans.cache.time-to-live: 10s
# 暴露所有端点。*在YAML中有特殊的含义,所以如果要包含(或排除)所有端点,请务必添加引号
management.endpoints.web.exposure.include: "*"
# 设置端点是否启用的默认值。示例为禁用所有的端点
management.endpoints.enabled-by-default: false

4.2 其他功能介绍3

4.2.1 CORS支持

跨源资源共享(CORS)是W3C规范,允许你灵活地指定授权的跨域请求类型,如果你使用Spring MVC或Spring WebFlux,可以配置Actuator的web端点来支持这些场景。

CORS支持在默认情况下是禁用的,并且只在management.endpoints.web.cors.allowed-origins属性已设置时才启用,以下配置允许从example.com域GET和POST调用:

management.endpoints.web.cors.allowed-origins: http://example.com
management.endpoints.web.cors.allowed-methods: GET,POST
4.2.2 健康信息

health 端点公开的信息取决于management.endpoint.health.show-details属性,可以取如下的值:

  • never:不显示细节;
  • when-authorized:详细信息只显示给授权用户,可以使用management.endpoint.health.roles配置授权角色;
  • always:详细信息显示给所有用户

默认值是 never,当用户处于端点配置的一个或多个角色中时,就被认为是经过授权的。如果端点没有配置角色(默认),则认为所有经过身份验证的用户都是经过授权的。

健康信息是从你的ApplicationContext中定义的所有HealthIndicator bean中收集的,Spring Boot包括许多自动配置的HealthIndicators(如下面表格所示),并且你也可以自己写。

以下的 HealthIndicators 在适当的时候,Spring Boot会自动配置:

检查器类型 描述
CassandraHealthIndicator 检查Cassandra数据库是否已启动
DiskSpaceHealthIndicator 检查低磁盘空间
DataSourceHealthIndicator 检查能否获得到DataSource的连接
ElasticsearchHealthIndicator 检查Elasticsearch集群是否已启动
InfluxDbHealthIndicator 检查InfluxDB服务是否已启动
JmsHealthIndicator 检查JMS代理是否已启动
MailHealthIndicator 检查邮件服务是否已启动
MongoHealthIndicator 检查Mongo数据库是否已启动
Neo4jHealthIndicator 检查Neo4j服务是否已经启动
RabbitHealthIndicator 检查Rabbit服务是否已经启动
RedisHealthIndicator 检查Redis服务是否已启动
SolrHealthIndicator 检查Solr服务是否已启动

可以通过设置management.health.defaults.enabled属性来禁用它们所有。

4.2.3 自定义管理服务器地址

可以通过设置management.server.address属性来指定管理端点使用的IP地址(一台物理机可以安装多块网卡,或虚拟出多个IP)。

注意:只有当管理端口与应用本身(服务提供者)使用端口不同时,才能监听不同的地址。

比如我的机器有两个IP地址,分别为:192.168.1.10 和 192.168.1.11。其中,应用本身使用192.168.1.10地址。我们在 application.yml 文件中添加如下配置项:

management.server.port: 8081
management.server.address: 192.168.1.11

其他服务消费者调用服务时仍然调用192.168.1.10上的服务,要使用 Actuator 需要使用 192.168.1.11 地址。

4.2.4 配置管理特定SSL

当配置为使用自定义端口时,管理服务器还可以使用各种management.server.ssl.*属性配置自己的SSL。例如,这样做可以让管理服务器通过HTTP可用,而主应用程序使用HTTPS,如下面的属性设置所示:

server.port: 8443
server.ssl.enabled: true
server.ssl.key-store: classpath:store.jks
server.ssl.key-password: secret

management.server.port: 8080
management.server.ssl.enabled: false

或者,主服务器和管理服务器都可以使用SSL,但密钥存储不同,如下所示:

server.port: 8443
server.ssl.enabled: true
server.ssl.key-store: classpath:main.jks
server.ssl.key-password: secret

management.server.port: 8080
management.server.ssl.enabled: true
management.server.ssl.key-store: classpath:management.jks
management.server.ssl.key-password: secret
4.2.3 Actuator 在 Spring Boot 1.X 和Spring Boot 2.X 的差异

配置Key之间的变化:

1.X 属性 2.X 属性
endpoints..* management.endpoint..*
endpoints.cors.* management.endpoints.web.cors.*
endpoints.jmx.* management.endpoints.jmx.*
management.address management.server.address
management.context-path management.server.servlet.context-path
management.ssl.* management.server.ssl.*
management.port management.server.port

根节点发生了变化:

2.X 比1.X 多了一个根路径: /actuator 。当然你也可以通过 management.endpoints.web.base-path 设置一个根节点。如果你设置 management.server.servlet.context-path=/management 和 management.endpoints.web.base-path=/application,你就可以使用下面的路径访问 /health 端点:/management/application/health 。

注意:context-path只有在设置了 management.server.port 时才有效。

一些端点发生变化(API):

  • /autoconfig:更名为 /conditions;
  • /docs:被废弃;
  • /trace:更名为 /httptrace;
  • /dump:更名为 /threaddump。

4.3 遗留问题

暂无,不过需要分析源码。

4.4 源码地址

源码:https://gitee.com/liupeifeng3514/SpringBoot-Learning

下文……,我们详细的说明一下 Actuator 内置的端点。


  1. springboot(十九):使用Spring Boot Actuator监控应用 ↩︎

  2. 一起来学SpringBoot | 第十四篇:强大的 actuator 服务监控与管理 ↩︎

  3. Spring Boot 参考指南(端点) ↩︎

猜你喜欢

转载自blog.csdn.net/liupeifeng3514/article/details/85223117