View a markdown version of this page

對 Neptune 全文檢索搜尋進行疑難排解 - Amazon Neptune

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

對 Neptune 全文檢索搜尋進行疑難排解

注意

如果您已在 OpenSearch 叢集上啟用精細存取控制,則也需要在 Neptune 資料庫中啟用 IAM 身分驗證。

若要診斷從 Neptune 複寫到 OpenSearch 方面的問題,請參閱輪詢器 Lambda 函數的 CloudWatch Logs。這些日誌提供自串流讀取的詳細記錄數目,以及成功複寫到 OpenSearch 的詳細記錄數目。

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

注意

將 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

  • DynamoDB 端點是針對 VPC 設定的。

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

對將資料寫入 OpenSearch 時失敗的程序進行疑難排解

如果程序在將記錄寫入 OpenSearch 時失敗,請確定您有下列項目:

  • 您的 Elasticsearch 版本為 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. 針對串流 API 端點執行此類命令,以取得所複製資料庫上串流的最新 eventID (如需詳細資訊,請參閱呼叫 Neptune 串流 REST API):

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

    記下回應中 lastEventId 物件中 commitNum 和 opNum 欄位中的值。

  5. 使用 github 上的 export-neptune-to-elasticsearch 工具,執行從複製的資料庫到 OpenSearch 網域的一次性同步。

  6. 移至複寫堆疊的 DynamoDB 資料表。資料表的名稱將是您在 CloudFormation 範本中指定的應用程式名稱 (預設值為 NeptuneStream),尾碼為 -LeaseTable 。換言之,預設資料表名稱為 NeptuneStream-LeaseTable。

    您可以透過掃描來探索資料表資料列,因為資料表中應該只有一個資料列。使用上面記錄的 commitNum 和 opNum 值進行以下變更:

    • 將資料表中 checkpoint 欄位的值變更為您針對 commitNum 記下的值。

    • 將資料表中 checkpointSubSequenceNumber 欄位的值變更為您針對 opNum 記下的值。

  7. 重新啟用複寫程序,如重新啟用串流輪詢器程序中所述。

  8. 刪除複製的資料庫和為export-neptune-to-elasticsearch工具建立的 CloudFormation 堆疊。