Amazon OpenSearch Service 도메인으로 스트리밍할 수 있도록 CloudWatch Logs의 문제를 해결하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2022년 1월 20일

내 Amazon CloudWatch Logs를 Amazon OpenSearch Service 도메인으로 스트리밍할 수 없습니다. 이 문제를 해결하려면 어떻게 해야 합니까?

해결 방법

여러 CloudWatch 로그 그룹을 동일한 OpenSearch Service 도메인으로 스트리밍할 수 없습니다.

기본적으로 Amazon CloudWatch는 각 OpenSearch Service 도메인마다 하나의 AWS Lambda 함수만 생성합니다. 여러 로그 그룹을 설정하여 하나의 도메인으로 데이터를 인덱싱하면, 여러 로그 그룹이 모두 동일한 Lambda 함수를 호출합니다. 첫 번째 로그 그룹이 Lambda 함수를 호출하면 해당 호출이 도메인에 인덱스 및 유형 필드를 생성합니다.

Elasticsearch 6.0.0 이상에서 생성된 인덱스는 단일 매핑 유형만 포함할 수 있습니다. 여러 매핑 유형으로 5.x에서 생성된 인덱스는 Elasticsearch 6.x에서 이전과 같이 계속 작동합니다. Elasticsearch 매핑 유형 지원 중단에 대한 자세한 내용은 Elasticsearch 웹 사이트의 매핑 유형 제거를 참조하십시오.

다른 로그 그룹이 동일한 Lambda 함수를 호출하려는 경우, 호출이 실패하고 다음 오류 메시지가 표시됩니다.

"reason": "Rejecting mapping update to [<index_name>] as the final mapping would have more than 1 type: [log-group-1, log-group-2]”

이 문제를 해결하려면 다음 구문으로 Lambda 함수를 업데이트합니다.

var indexName = [
        'cwl-' + payload.logGroup.toLowerCase().split('/').join('-') + '-' + timestamp.getUTCFullYear(),
        ('0' + (timestamp.getUTCMonth() + 1)).slice(-2),
        ('0' + timestamp.getUTCDate()).slice(-2) 
        ].join('.');

이 구문은 OpenSearch Service 도메인으로 스트리밍되는 다양한 로그 그룹에 대해 여러 인덱스를 생성합니다.

그런 다음, 업데이트된 Lambda 함수를 저장하여 도메인으로 스트리밍되는 여러 로그 그룹에 대해 별도의 인덱스를 생성합니다.

동일한 AWS 계정에서 VPC 기반 OpenSearch Service 도메인으로 스트리밍할 수 없습니다.

중요: CloudWatch 로그 그룹을 VPC 기반 OpenSearch Service 도메인으로 스트리밍하기 전에 AWS Identity and Access Management(IAM) 역할 정책을 업데이트해야 합니다. 해당 Lambda 함수에 연결된 IAM 역할에는 AWSLambdaVPCAccessExecutionRole 정책이 연결되어 있어야 합니다.

다음은 JSON 형식의 AWSLambdaVPCAccessExecutionRole 정책입니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "ec2:CreateNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
        }
    ]
}

참고: 이 관리형 정책을 사용하면 Lambda 함수가 CloudWatch 로그 그룹을 VPC에서 클러스터에 작성할 수 있습니다.

정책을 Lambda 함수에 연결한 후 VPC의 OpenSearch Service 도메인으로 로그를 스트리밍하기 시작할 수 있습니다.

세분화된 액세스 제어가 활성화되는 경우 CloudWatch 로그 그룹을 OpenSearch Service 도메인으로 스트리밍할 수 없습니다.

세분화된 액세스 제어로 CloudWatch Logs를 OpenSearch Service 도메인으로 스트리밍하는 경우, 다음과 같은 권한 오류가 발생할 수 있습니다.

"{\"statusCode\":403,\"responseBody\":{\"error\":{\"root_cause\":[{\"type\":\"security_exception\",\"reason\":\"no permissions for [indices:data/write/bulk] and User [name=arn:aws:iam::123456789101:role/lambda_elasticsearch_execution, roles=[arn:aws:iam::123456789101:role/lambda_elasticsearch_execution], requestedTenant=null]\"}],\"type\":\"security_exception\",\"reason\":\"no permissions for [indices:data/write/bulk] and User [name=arn:aws:iam::123456789101:role/lambda_elasticsearch_execution, roles=[arn:aws:iam::123456789101:role/lambda_elasticsearch_execution], requestedTenant=null]\"},\"status\":403}}"

Lambda 함수 로그에서 이 오류 메시지를 수신하면 역할 매핑이 불완전한 것입니다.

참고: 기본적으로 OpenSearch Service는 AWS Lambda 함수를 생성합니다.

7.9 이상을 실행하는 Amazon OpenSearch 도메인(OpenSearch 버전 1.x 포함)

오류 메시지를 해결하려면 다음 단계를 수행합니다.

1.    OpenSearch 대시보드를 엽니다. OpenSearch Service 콘솔의 도메인 요약에서 OpenSearch 대시보드에 대한 링크를 찾을 수 있습니다.

2.    탐색 창에서 보안(Security)을 선택합니다.

3.    역할(Roles)을 선택합니다.

4.    all_access 역할을 선택합니다.

5.    매핑된 사용자(Mapped users) 탭을 선택합니다.

6.    매핑된 사용자(Mapped users) 대화 페이지에서 매핑 관리(Manage mapping)를 선택합니다.

7.    백엔드 역할(Backend roles)에서 Lambda 함수 실행 역할 ARN을 입력합니다.

8.    매핑(Map)을 선택합니다. 이제 로그가 OpenSearch Service 도메인으로 스트리밍됩니다.

역할 매핑에 대한 자세한 내용은 사용자에게 역할 매핑을 참조하세요.

7.8 이하를 실행하는 Amazon OpenSearch 도메인

오류 메시지를 해결하려면 다음 단계를 수행합니다.

1.    OpenSearch 대시보드를 엽니다. OpenSearch Service 콘솔의 도메인 요약에서 OpenSearch 대시보드에 대한 링크를 찾을 수 있습니다.

2.    왼쪽 탐색 창에서 잠금 아이콘을 선택합니다.

3.    역할 매핑을 선택합니다.

4.    all_accesssecurity_manager를 역할로 선택합니다.

참고: all_access 역할은 클러스터에 대한 액세스만 제공합니다. 자신의 사용 사례에 따라 클러스터에 세분화된 액세스 제어를 추가할 수도 있습니다.

5.    all_access에 대한 매핑을 편집합니다.

6.    백엔드 역할(Backend Role)에 대해 Lambda 함수의 실행 역할을 추가하고 제출(Submit)을 선택합니다. 이제 로그가 OpenSearch Service 도메인으로 스트리밍됩니다.

내 CloudWatch Logs가 OpenSearch Service 도메인으로 전송되지 않음

(기본 AWS Lambda 함수를 사용하여) CloudWatch Logs를 OpenSearch Service 도메인으로 스트리밍하면 다음과 같은 인덱싱 오류가 발생할 수 있습니다.

"errorMessage": "{\"statusCode\":200,\"responseBody\":{\"took\":42,\"errors\":true}}",

참고: 기본적으로 AWS Lambda 오류는 200 OK 응답으로 반환됩니다.

이 오류 메시지 문제를 해결하려면 다음 단계를 수행합니다.

1.    기본 AWS Lambda 함수를 엽니다.

2.    다음 코드 행을 찾습니다.

"var logFailedResponses = true;"

3.    var logFailedResponses 값을 ‘true’로 업데이트합니다. 이 업데이트는 AWS Lambda 함수를 사용하는 모든 새로운 인덱싱 요청에 대한 추가 정보를 제공합니다. 추가 정보를 사용하여 인덱싱 문제의 원인을 식별할 수 있습니다.

cluster_block_exception 오류가 발생합니다.

클러스터 블록 예외는 다음과 같은 원인으로 발생합니다.

  • 여유 스토리지 공간 부족
  • 과도한 JVM 메모리 압력

클러스터 블록 예외 문제 해결에 대한 자세한 내용은 ClusterBlockException을 참조하세요.

Amazon OpenSearch Service는 Amazon Elasticsearch Service의 후속 서비스입니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?