> For the complete documentation index, see [llms.txt](https://potoyang.gitbook.io/spring-in-action-v5/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://potoyang.gitbook.io/spring-in-action-v5/di-16-zhang-shi-yong-springboot-actuator/16.2-xiao-fei-actuator-duan-dian/16.2.1-huo-qu-zhong-yao-de-ying-yong-cheng-xu-xin-xi.md).

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

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

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

**询问有关应用程序的信息**

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

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

```bash
$ curl localhost:8081/actuator/info
{}
```

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

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

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

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

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

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

**检查应用程序健康状态**

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

```bash
$ 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` 属性以显示所有健康指标的完整详细信息：

```yaml
management:
  endpoint:
    health:
      show-details: always
```

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

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

```bash
{
    "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 如何显示应用程序的配置信息。
