

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 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의 2가지 지표를 게시합니다.
+ `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`

  
+ DynamoDB 엔드포인트가 VPC에 대해 구성되었습니다.
+ 모니터링 엔드포인트가 VPC 서브넷에 대해 구성되었습니다.

## OpenSearch에 데이터를 쓰는 동안 실패한 프로세스 문제 해결
<a name="streams-consumer-troubleshooting-writes"></a>

OpenSearch에 레코드를 쓰는 동안 프로세스가 실패할 경우 다음 사항을 갖추고 있는지 확인합니다.
+ Elasticsearch 버전이 7.1 이상이거나 OpenSearch 2.3 이상입니다.
+ OpenSearch는 VPC의 폴러 Lambda 함수에서 액세스할 수 있습니다.
+ OpenSearch에 연결된 보안 정책은 인바운드 HTTP/HTTPS 요청을 허용합니다.

## 기존 복제 설정에서 Neptune과 OpenSearch 간의 동기화 불능 문제 해결
<a name="streams-consumer-troubleshooting-sync-issues"></a>

`ExpiredStreamException` 또는 데이터 손상으로 인해 Neptune 데이터베이스와 OpenSearch 도메인 간에 동기화 불능 문제가 발생하는 경우 아래 단계를 통해 Neptune 데이터베이스와 OpenSearch 도메인을 최신 데이터와 다시 동기화할 수 있습니다.

이 접근 방식은 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 스택을 삭제합니다.