# 节点健康检测器

Aptos 节点健康检查器 (NHC) 服务可用于检查以下 Aptos 节点类型的健康状况：

* 验证者节点
* 验证者全节点
* 公共全节点。

如果您是节点操作员，请使用 NHC 服务检查您的节点是否正常运行。 NHC 服务通过与基准节点配置进行比较来评估节点的运行状况，并输出评估结果。

{% hint style="info" %}
💡 **AIT 的节点运行状况检查**

如果您正在参与 [Aptos 激励测试网](/aptos-kai-fa-zhe-wen-dang/jie-dian/ait-3.md)，您可以使用 NHC 服务来验证您的验证器节点是否正常运行。 Aptos 团队不断使用此服务来检查您的节点的健康状况。
{% endhint %}

本文档介绍了在操作节点时如何运行 NHC。

### 快速开始

在详细了解 NHC 的工作原理之前，您可以运行以下步骤来启动 NHC 服务并向其发送请求。本快速入门使用开发网的全节点基线配置，即，它将根据使用基线配置 YAML 配置的开发网的全节点评估您的节点。

**重要**：如果您的本地节点不是开发网全节点，例如它是用于 AIT3 注册的单个测试网节点，您必须使用不同的配置文件。有关其他此类示例配置，请参阅 [aptos-core 中的配置示例](https://github.com/aptos-labs/aptos-core/tree/main/ecosystem/node-checker/configuration_examples)。

#### 步骤 1: 下载基线配置 YAML

为开发网全节点下载一个基线配置。以下命令将下载 `devnet_fullnode.yaml` 配置文件：

```
mkdir /tmp/nhc && cd /tmp/nhc && wget <https://raw.githubusercontent.com/aptos-labs/aptos-core/main/ecosystem/node-checker/configuration_examples/devnet_fullnode.yaml>
```

#### 步骤 2: 开始 NHC 服务

通过提供以上下载 `devnet_fullnode.yaml` 基线配置 YAML 文件来启动 NHC 服务：

```
docker run -v /tmp/nhc:/nhc -p 20121:20121 -t aptoslabs/node-checker:nightly /usr/local/bin/aptos-node-checker server run --baseline-node-config-paths /nhc/devnet_fullnode.yaml
```

#### 步骤 3: 发送请求到 NHC 服务

最后，向您在上面启动的 NHC 服务发送请求。以下命令对位于 `node_url=http://mynode.mysite.com`  的节点运行健康检查，并将这些结果与下载的基线配置 `devnet_fullnode` 进行比较：

```
curl '<http://localhost:20121/check_node?node_url=http://mynode.mysite.com&baseline_configuration_name=devnet_fullnode>'
```

您将会看到类似于这样的输出结果：

```
{
  "evaluation_results": [
    {
      "headline": "Chain ID reported by baseline and target match",
      "score": 100,
      "explanation": "The node under investigation reported the same Chain ID 18 as is reported by the baseline node",
      "evaluator_name": "node_identity",
      "category": "api",
      "links": []
    },
    {
      "headline": "Role Type reported by baseline and target match",
      "score": 100,
      "explanation": "The node under investigation reported the same Role Type full_node as is reported by the baseline node",
      "evaluator_name": "node_identity",
      "category": "api",
      "links": []
    },
    {
      "headline": "Target node produced valid recent transaction",
      "score": 100,
      "explanation": "We were able to pull the same transaction (version: 3238616) from both your node and the baseline node. Great! This implies that your node is keeping up with other nodes in the network.",
      "evaluator_name": "transaction_availability",
      "category": "api",
      "links": []
    }
  ],
  "summary_score": 100,
  "summary_explanation": "100: Awesome!"
}
```

### NHC 是如何工作的

NHC 作为服务运行。当您想要运行节点的健康检查时，您可以将 HTTP 请求发送到此服务。

可以配置单个 NHC 实例来检查多个节点配置的健康状况，每个节点配置类型不同，例如：

* 在单节点测试网中运行的验证者节点。
* 连接到 Aptos 测试网的公共全节点。
* 连接到测试网的验证者节点，例如，作为 Aptos 激励测试网的一部分。

NHC 服务既可以作为外部工具运行，也可以作为运营商用例的边车进程运行。两者都在本文档中进行了描述。

#### 基线配置

在上述所有情况下，基线节点都用于比较节点的运行状况。例如，对于连接到 Aptos 开发网络的公共全节点，基线节点可能是 Aptos 团队运行的节点，并且该节点展示了最佳性能和参与特征。

您需要下载基线配置 YAML，在为您的节点运行 NHC 服务之前。基线节点的配置 YAML 描述了在哪里可以找到这个基线节点（URL + 端口），NHC 服务应该运行哪些评估器（例如指标检查、TPS 测试、API 验证等），NHC 应该为这些评估器使用哪些参数，配置的名称等等。在此处查看一些 [示例基线配置 YAML 文件](https://github.com/aptos-labs/aptos-core/tree/main/ecosystem/node-checker/configuration_examples)。

当您向 NHC 服务发送请求时，您必须包含基线配置。例如，向 NHC 请求使用 `devnet_fullnode`作为基线配置将如下所示：

```
curl '<http://nhc.aptoslabs.com/check_node?node_url=http://myfullnode.mysite.com&baseline_configuration_name=devnet_fullnode>'
```

#### 准备好基线配置

为了运行 NHC 服务，您必须具有该服务可以使用的基线配置。您在这里有两个选择：

#### 配置预先存在的 YAML

您可以在此处找到一些 [示例基线配置 YAML 文件](https://github.com/aptos-labs/aptos-core/tree/main/ecosystem/node-checker/configuration_examples)，它们适用于上述每种使用情况以及更多。

接下来，将这些配置 YAML 文件下载到主机系统中的`/etc/nhc` 文件夹中。例如：

```
mkdir /etc/nhc
cd /etc/nhc
configs=(single_node_validator devnet_fullnode ait2_validator); for c in ${configs[@]}; do wget <https://raw.githubusercontent.com/aptos-labs/aptos-core/main/ecosystem/node-checker/configurations/$c.yaml>; done
```

这些配置还没有完全准备好按原样使用。您将需要修改某些字段，例如使用的基线节点地址或评估器集（YAML 中的 `evaluators` 和 `evaluator_args`）。对此进行迭代的最佳方法是使用下载的基线配置运行 NHC，并查看它在启动时显示的内容。

#### 生成你自己的基线配置 YAML

要生成您自己的基线配置，您必须首先使用 `create` 选项运行 NHC 服务。以下命令显示了如何通过使用 Docker 运行 NHC 服务来创建基线配置 YAML：

```
docker run -it aptoslabs/node-checker:nightly /usr/local/bin/aptos-node-checker configuration create --url '<http://baseline-fullnode.aptoslabs.com>' --configuration-name devnet_fullnode --configuration-name-pretty "Devnet FullNode" --evaluators network_minimum_peers api_latency --api-port 80 > /etc/nhc/devnet_fullnode.yaml
```

上面的命令指定了基线配置的最低限度。您可以根据需要调整每个评估器。请参阅 YAML 中的字段`evaluators`和`evaluator_args`。有关这方面的更多指导，请将 `-h`  标志传递给上述命令以查看您可以使用的所有标志。

#### 所需文件

对于某些 NHC 配置，您将需要附加文件，例如`mint.key` 用于针对验证者运行 TPS 测试。您应该确保这些文件也可用于 NHC，无论是在磁盘上还是安装到您的容器中。 NHC 期望它们在基线配置 YAML 中指定的路径启动。

### 运行 NHC：Docker

{% hint style="info" %}
💡 **注意**

虽然 Aptos 团队为此服务运营实例，但我们鼓励节点操作者运行他们自己的实例。您可以选择运行公开可用的 NHC 或将其作为辅助运行，它仅适用于您自己的节点。
{% endhint %}

当您准备好基线配置 YAML 和所需文件后，您可以使用如下命令运行 NHC 服务器，例如使用 Docker：

```
docker run -v /etc/nhc:/etc/nhc -p 20121:20121 -t aptoslabs/node-checker:nightly /usr/local/bin/aptos-node-checker server run --baseline-node-config-paths /etc/nhc/ait2_validator.yaml /etc/nhc/devnet_fullnode.yaml
```

{% hint style="info" %}
💡 **注意**

您可能希望包含其他环境变量，例如`RUST_LOG=info`。如您所见，默认情况下 NHC 在端口 20121 上运行。确保从容器中发布它，如上述命令所示，并确保该端口在您的主机上打开。您可以使用 `--listen-port` 更改 NHC 运行的端口。
{% endhint %}

### 运行 NHC：Source

首先，查看源码：

```
git clone git@github.com:aptos-labs/aptos-core.git
cd aptos-core
```

根据您的设置，您可能需要检查特定分支，以确保 NHC 与您的节点兼容，例如`git checkout --track devnet`。

运行 NHC：

```
cargo run --release -- server run --baseline-node-config-paths /etc/nhc/ait2_validator.yaml /etc/nhc/devnet_fullnode.yaml
```

### 将 NHC 作为辅助程序sidecar 运行

当您将 NHC 作为辅助程序（sidecar）运行时，您预先配置了一个 NHC 应默认用作正在调查的节点的节点：

```
--target-node-url <http://localhost>
```

当您想将机器上的 API / 指标端口关闭到公共网络时，将 NHC 作为辅助（sidecar）运行会很方便，但仍想运行 NHC 来验证节点的设置。

如果您愿意甚至可以限制 NHC 只测试那个单一节点：

```
--allow-preconfigured-test-node-only
```

使用此标志，`/check_node` 端点将始终返回 400s，您必须改为使用 `/check_preconfigured_node`。

将 NHC 实例配置为辅助程序（sidecar）模式后，您可以发送省略目标节点地址的请求。

```
curl '<http://nhc.aptoslabs.com/check_preconfigured_node?baseline_configuration_name=devnet_fullnode>'
```

有更多选项可用于使用哪些端口。通过 `-h` 查看更多选项。

### 生成 OpenAPI 规范

要生成 OpenAPI 规范，请运行以下命令：

```
cargo run -- server generate-openapi -f yaml > doc/spec.yaml
cargo run -- server generate-openapi -f json > doc/spec.json
```

您还可以点击正在运行的服务的 `/spec.yaml` 和 `/spec.json` 端点。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://gushi10546.gitbook.io/aptos-kai-fa-zhe-wen-dang/jie-dian/jie-dian-jian-kang-jian-ce-qi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
