16.2.1 获取重要的应用程序信息

在一次典型的看医生开始时,我们通常会被问到两个非常基本的问题:你是谁,你感觉如何? 尽管医生或护士选择的词可能不同,但他们最终目标是想了解一些基本情况:关于他们正在治疗的人,以及您为什么要见他们。

这些相同的基本问题是 Actuator 的 /info/health 端点为 Spring Boot 应用程序回答的。 /info 端点告诉您有关应用程序的一些信息,/health 端点告诉您应用程序的健康状况。

询问有关应用程序的信息

要了解有关正在运行的 Spring Boot 应用程序的一些信息,您可以询问 /info 端点。 但是,默认情况下, /info 端点的信息量并不大。

当您使用 curl 发出请求时,您可能会看到以下内容:

$ curl localhost:8081/actuator/info
{}

虽然 /info 端点似乎不是很有用,但最好将其视为一个干净的画布,您可以在其上绘制您想要呈现的任何信息。

有多种方法可以提供 /info 端点返回所需的信息,最直接的方法是创建一个或多个配置属性,其中属性名称以 info. 为前缀。例如,假设您希望来自 /info 端点以包含支持联系信息,包括电子邮件地址和电话号码。 为此,您可以在 application.yml 文件中配置以下属性:

info:
  contact:
    email: support@tacocloud.com
    phone: 822-625-6831

info.contact.emailinfo.contact.phone 属性可能对于 Spring Boot,或应用程序上下文中的任何 bean 都没有任何特殊意义。 然而,由于它以 info. 为前缀,/info 端点现在将在其响应中回显属性的值:

{
  "contact": {
    "email": "support@tacocloud.com",
    "phone": "822-625-6831"
  }
}

在第 16.3.1 节中,我们将了解一些其他方法来使 /info 端点返回有关应用程序的更多有用信息。

检查应用程序健康状态

/health 端点发送 HTTP GET 请求会产生一个简单的 JSON 响应,其中包含应用程序的健康状态。 例如,以下是您在使用 curl 获取 /health 端点时可能会看到的内容:

$ curl localhost:8080/actuator/health
{"status":"UP"}

您可能想知道,一个只能报告应用程序已启动的端点有多大用处? 如果应用程序关闭,它会报告什么?

实际情况是,此处显示的状态是一个或多个健康指标的聚合状态。健康指标报告应用程序与之交互的外部系统的健康状况,例如数据库、消息代理,甚至 Eureka 和 Config Server 等 Spring Cloud 组件。每个指标的健康状态可以是以下之一:

  • UP - 外部系统已启动并可访问。

  • DOWN - 外部系统已关闭或无法访问。

  • UNKNOWN - 外部系统的状态尚不清楚。

  • OUT_OF_SERVICE - 外部系统可访问,但当前不可用。

然后将所有健康指标的健康状态,聚合到应用程序的整体健康状态中,应用以下规则:

  • 如果所有健康指标都为 UP,则应用程序健康状态为 UP。

  • 如果一个或多个健康指标为 DOWN,则应用程序健康状态为 DOWN。

  • 如果一个或多个健康指标为 OUT_OF_SERVICE,则应用健康状态为 OUT_OF_SERVICE。

  • UNKNOWN 健康状况将被忽略,并且不会被纳入应用程序的总体健康状况。

默认情况下,仅返回聚合状态以响应对 /health 的请求。但是,您可以配置 management.endpoint.health.show-details 属性以显示所有健康指标的完整详细信息:

management:
  endpoint:
    health:
      show-details: always

management.endpoint.health.show-details 属性默认为 never,但也可以设置为 always 始终显示所有健康指标的完整详细信息,或 when-authorized 仅在请求客户端时显示完整详细信息完全授权。

现在,当您向 /health 端点发出 GET 请求时,您将获得完整的健康指标详细信息。 以下是与 Mongo 文档数据库集成的服务的示例:

{
    "status": "UP",
    "details": {
        "mongo": {
            "status": "UP",
            "details": {
                "version": "3.2.2"
            }
        },
        "diskSpace": {
            "status": "UP",
            "details": {
                "total": 499963170816,
                "free": 177284784128,
                "threshold": 10485760
            }
        }
    }
}

无论任何其他外部依赖项如何,所有应用程序都将具有名为 diskSpace 的文件系统的运行状况指示器。 diskSpace 运行状况指示器指示文件系统的运行状况(希望是 UP),这取决于剩余的可用空间量。 如果可用磁盘空间低于阈值,它将报告 DOWN 状态。

在前面的示例中,还有一个 mongo 健康指示器,用于报告 Mongo 数据库的状态。 显示的详细信息包括 Mongo 数据库版本。

自动配置确保只有与应用程序相关的健康指标,才会出现在来自 /health 端点的响应中。 除了 mongo 和 diskSpace 健康指标,Spring Boot 还为其他几个外部数据库和系统提供健康指标,包括:

  • Cassandra

  • Config Server

  • Couchbase

  • Eureka

  • Hystrix

  • JDBC data sources

  • Elasticsearch

  • InfluxDB

  • JMS message brokers

  • LDAP

  • Email servers

  • Neo4j

  • Rabbit message brokers

  • Redis

  • Solr

此外,第三方库可能会贡献自己的健康指标。 我们将在 16.3.2 节中了解如何编写自定义健康指标。

如您所见,/health/info 端点提供有关正在运行的应用程序的一般信息。 同时,还有其他 Actuator 端点可以深入了解应用程序配置。 让我们看看 Actuator 如何显示应用程序的配置信息。

最后更新于