

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Neptune 全文搜索故障排除
<a name="streams-consumer-troubleshooting"></a>

**注意**  
如果您在 OpenSearch 集群上启用了[精细访问控制](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html)，则还需要在 Neptune 数据库中[启用 IAM 身份验证](iam-auth-enable.md)。

要诊断从 Neptune 复制到的问题 OpenSearch，请查阅轮询器 Lambda 函数的 CloudWatch 日志。这些日志提供了有关从流中读取的记录数量以及成功复制到的记录数量的详细信息 OpenSearch。

您还可以通过更改 `LoggingLevel` 环境变量来更改 Lambda 函数的日志记录级别。

**注意**  
如果`LoggingLevel`设置为`DEBUG`，则可以在将数据从 Neptun OpenSearch e 复制到时查看其他详细信息，例如丢弃的直播记录以及每条记录被丢弃的原因。 StreamPoller 如果您发现自己缺少记录，这会很有用。

Neptune 直播用户应用程序发布了两个指标 CloudWatch ，这两个指标也可以帮助你诊断问题：
+ `StreamRecordsProcessed` – 应用程序每单位时间处理的记录数。有助于跟踪应用程序运行速率。
+ `StreamLagTime` – 当前时间与正处理的流记录的提交时间之间的时差（以毫秒为单位）。此指标显示了使用者应用程序落后的程度。

此外，所有与复制过程相关的指标都显示在仪表板 CloudWatch 中，其名称与您使用模板实例化应用程序时`ApplicationName`提供的名称相同。 CloudWatch 

您也可以选择创建 CloudWatch 警报，每当连续两次以上轮询失败时，就会触发该警报。通过在实例化应用程序时将 `CreateCloudWatchAlarm` 字段设置为 `true` 来执行此操作。然后指定您希望在触发警报时收到通知的电子邮件地址。

## 对从流读取记录时失败的进程排除故障
<a name="streams-consumer-troubleshooting-reads"></a>

如果进程在从流读取记录时失败，请确保您符合以下条件：
+ 该流已在您的集群上启用。
+ Neptune 流端点采用正确的格式：
  + 对于 Gremlin 或 openCypher：`https://{{your cluster endpoint}}:{{your cluster port}}/propertygraph/stream` 或它的别名 `https://{{your cluster endpoint}}:{{your cluster port}}/pg/stream`
  + 对于 SPARQL：`https://{{your cluster endpoint}}:{{your cluster port}}/sparql/stream`

  
+ 已为您的 VPC 配置了 DynamoDB 端点。
+ 已为您的 VPC 子网配置了监控终端节点。

## 对写入数据时失败的进程进行故障排除 OpenSearch
<a name="streams-consumer-troubleshooting-writes"></a>

如果在向 OpenSearch中写入记录时进程失败，请确保满足以下条件：
+ 您的 OpenSearch 版本为 7.1 或更高版本，或者为 Opensearch 2.3 及更高版本
+ OpenSearch 可以从您的 VPC 中的轮询器 Lambda 函数进行访问。
+ 附加到的安全策略 OpenSearch 允许入站 HTTP/HTTPS 请求。

## 修复 Neptune 之间和现有 OpenSearch 复制设置上的 out-of-sync问题
<a name="streams-consumer-troubleshooting-sync-issues"></a>

您可以使用以下步骤让 Neptune 数据库和 OpenSearch 域与最新数据恢复同步，以防它们之间因`ExpiredStreamException`或数据损坏而出现 out-of-sync问题。

请注意，这种方法会删除 OpenSearch 域中的所有数据，然后将其从 Neptune 数据库的当前状态重新同步，因此无需在 Neptune 数据库中重新加载任何数据。

1. 按照[禁用（暂停）流轮询器进程](full-text-search-pause-poller.md)所述禁用复制过程。

1. 使用以下命令删除 OpenSearch 域上的 Neptune 索引：

   ```
   curl -X DELETE "{{(your OpenSearch endpoint)}}/amazon_neptune"
   ```

1. 创建数据库的克隆（请参阅 [Neptune 中的数据库克隆](manage-console-cloning.md)）。

1. 通过对 Streams API 端点执行此类命令，获取克隆数据库上流的最新 `eventID`（有关更多信息，请参阅[调用 Neptune Streams REST API](streams-using-api-call.md)）：

   ```
   curl "https://{{(your neptune endpoint)}}:{{(port)}}/{{(propertygraph or sparql)}}/stream?iteratorType=LATEST"
   ```

   记下响应的 `lastEventId` 对象中 `commitNum` 和 `opNum` 字段的值。

1. 使用 github 上的[export-neptune-to-elasticsearch](https://github.com/awslabs/amazon-neptune-tools/tree/master/export-neptune-to-elasticsearch)工具执行从克隆的数据库到 OpenSearch域的一次性同步。

1. 转至复制堆栈的 DynamoDB 表。表的名称将是您在 CloudFormation 模板中指定的**应用程序名称**（默认为`NeptuneStream`），并带有`-LeaseTable`后缀。换而言之，默认表名称为 `NeptuneStream-LeaseTable`。

   您可以通过扫描来浏览表行，因为表中应该只有一行。使用上面记录的 `commitNum` 和 `opNum` 值进行以下更改：
   + 将表中 `checkpoint` 字段的值更改为您为 `commitNum` 记下的值。
   + 将表中 `checkpointSubSequenceNumber` 字段的值更改为您为 `opNum` 记下的值。

1. 按照[重新启用流轮询器进程](full-text-search-re-enable-poller.md)所述重新启用复制过程。

1. 删除克隆的数据库和为该`export-neptune-to-elasticsearch`工具创建的 CloudFormation 堆栈。