

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 對 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 Logs。這些日誌提供自串流讀取的詳細記錄數目，以及成功複寫到 OpenSearch 的詳細記錄數目。

您也可以透過變更 `LoggingLevel` 環境變數，以變更 Lambda 函數的 LOGGING 層級。

**注意**  
將 `LoggingLevel` 設為 `DEBUG` 後，您可以檢視其他詳細資訊，例如捨棄的串流記錄以及捨棄每筆記錄的原因，同時透過 StreamPoller 將資料從 Neptune 複寫到 OpenSearch。如果您發現遺失記錄，這樣做可能很有用。

Neptune 串流消費者應用程式會在 CloudWatch 上發佈兩個亦可協助您診斷問題的指標：
+ `StreamRecordsProcessed` – 應用程式每時間單位所處理的記錄數目。有助於追蹤應用程式執行速率。
+ `StreamLagTime` – 目前時間與正在處理之串流記錄遞交時間的時間差 (以毫秒為單位)。此指標會顯示消費者應用程式落後的程度。

此外，與複寫程序相關的所有指標都會公開在 CloudWatch 的儀表板中，與您使用 CloudWatch 範本執行個體化應用程式時所提供的 `ApplicationName` 同名。

您也可以選擇建立 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`

  
+ DynamoDB 端點是針對 VPC 設定的。
+ 已針對您的 VPC 子網路設定監控端點。

## 對將資料寫入 OpenSearch 時失敗的程序進行疑難排解
<a name="streams-consumer-troubleshooting-writes"></a>

如果程序在將記錄寫入 OpenSearch 時失敗，請確定您有下列項目：
+ 您的 Elasticsearch 版本為 7.1 或更高版本，或是 Opensearch 2.3 以上。
+ 可從 VPC 中的輪詢器 Lambda 函數存取 OpenSearch。
+ 附加至 OpenSearch 的安全政策允許傳入 HTTP/HTTPS 請求。

## 修正現有複寫設定上 Neptune 與 OpenSearch 之間的不同步問題
<a name="streams-consumer-troubleshooting-sync-issues"></a>

您可以使用下列步驟，讓 Neptune 資料庫和 OpenSearch 網域重新與最新資料同步，以防它們之間由於 `ExpiredStreamException` 或資料損毀而發生不同步問題。

請注意，此方法會刪除 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. 針對串流 API 端點執行此類命令，以取得所複製資料庫上串流的最新 `eventID` (如需詳細資訊，請參閱[呼叫 Neptune 串流 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 堆疊。