Neptune 全文搜索故障排除 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Neptune 全文搜索故障排除

注意

如果您已在 OpenSearch 集群上启用了精细访问控制,则还需要在 Neptune 数据库中启用 IAM 身份验证

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

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

注意

如果 LoggingLevel 设置为 DEBUG,则当 StreamPoller 将数据从 Neptune 复制到 OpenSearch 时,您可以查看其它详细信息,例如删除的流记录以及每个流记录被删除的原因。如果您发现自己缺少记录,这会很有用。

Neptune 流使用者应用程序会在 CloudWatch 上发布两个指标,这两个指标也可以帮助您诊断问题:

  • StreamRecordsProcessed – 应用程序每单位时间处理的记录数。有助于跟踪应用程序运行速率。

  • StreamLagTime – 当前时间与正处理的流记录的提交时间之间的时差(以毫秒为单位)。此指标显示了使用者应用程序落后的程度。

此外,与复制进程相关的所有指标都会在 CloudWatch 的控制面板中显示,其名称与您使用 CloudWatch 模板实例化应用程序时提供的 ApplicationName 相同。

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

对从流读取记录时失败的进程排除故障

如果进程在从流读取记录时失败,请确保您符合以下条件:

  • 该流已在您的集群上启用。

  • 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 写入数据时失败的进程进行故障排除

如果进程在向 OpenSearch 写入记录时失败,请确保您符合以下条件:

  • 您的 OpenSearch 版本为 7.1 或更高版本,或者为 Opensearch 2.3 及更高版本

  • 可以在 VPC 中通过轮询器 Lambda 函数访问 OpenSearch。

  • 附加到 OpenSearch 的安全策略允许入站 HTTP/HTTPS 请求。

在现有复制设置中修复 Neptune 和 OpenSearch 之间不同步的问题

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

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

  1. 按照禁用(暂停)流轮询器进程所述禁用复制过程。

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

    curl -X DELETE "(your OpenSearch endpoint)/amazon_neptune"
  3. 创建数据库的克隆(请参阅 Neptune 中的数据库克隆)。

  4. 通过对 Streams API 端点执行此类命令,获取克隆数据库上流的最新 eventID(有关更多信息,请参阅调用 Neptune Streams REST API):

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

    记下响应的 lastEventId 对象中 commitNumopNum 字段的值。

  5. 使用 github 上的 export-neptune-to-elasticsearch 工具执行从克隆的数据库到 OpenSearch 域的一次性同步。

  6. 转至复制堆栈的 DynamoDB 表。表的名称将是您在 Amazon CloudFormation 模板中指定的应用程序名称(默认为 NeptuneStream),并带有 -LeaseTable 后缀。换而言之,默认表名称为 NeptuneStream-LeaseTable

    您可以通过扫描来浏览表行,因为表中应该只有一行。使用上面记录的 commitNumopNum 值进行以下更改:

    • 将表中 checkpoint 字段的值更改为您为 commitNum 记下的值。

    • 将表中 checkpointSubSequenceNumber 字段的值更改为您为 opNum 记下的值。

  7. 按照重新启用流轮询器进程所述重新启用复制过程。

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