Amazon OpenSearch Service에서 느린 로그 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 7월 30일

Amazon OpenSearch Service(Amazon Elasticsearch Service 후속) 도메인에 대한 검색 느린 로그를 활성화했습니다. 그러나 오류가 발생하거나 Amazon CloudWatch 로그 그룹에 느린 로그가 나타나지 않습니다. 이 오류를 해결하려면 어떻게 해야 합니까?

해결 방법

느린 로그를 설정하려고 할 때 오류가 발생합니다

AWS 계정에 리전의 리소스 정책이 10개를 초과하는 경우 Amazon CloudWatch Logs에 다음과 같은 오류 메시지가 나타납니다.

"Unable to create the Resource Access Policy - You have reached the maximum limit for number of Resource Access Policies for CloudWatch Logs. Please select an existing policy and edit it or delete an older policy and try again."

이 오류 메시지를 해결하려면 여러 로그 그룹을 포함하는 리소스 정책을 생성합니다.

예를 들면 다음과 같습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
         "Effect": "Allow",
         "Principal": {
         "Service": "es.amazonaws.com"
        },
        "Action": [
         "logs:PutLogEvents",
         "logs:CreateLogStream"
        ],
        "Resource": [
         "ARN-Log-Group-1",
         "ARN-Log-Group-2",
         "ARN-Log-Group-3",
         "ARN-Log-Group-4"
        }
    ]
}

참고: AWS Identity and Access Management(IAM) 정책 제한은 늘릴 수 없습니다.

느린 로그가 전달되고 있는지 확인할 수 없습니다

느린 로그가 CloudWatch로 전달되고 있는지 확인할 수 없는 경우 IAM 정책 또는 OpenSearch Service 임계값을 확인합니다.

OpenSearch Service가 CloudWatch Logs에 작성할 권한을 필요로 하기 때문에 쿼리를 로깅하려면 적절한 IAM 정책이 있어야 합니다. IAM 정책을 업데이트하려면 느린 로그 검색으로 이동한 다음 설정 선택을 선택합니다.

예를 들면 다음과 같습니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "es.amazonaws.com"
      },
      "Action": [
        "logs:PutLogEvents",
        "logs:CreateLogStream"
      ],
      "Resource": "arn:aws:logs:us-east-1:588671893395:log-group:/aws/aes/domains/myes/search-logs:*"
    }
  ]
}

또한 도메인에 적절한 타이밍 임계값을 설정해야 합니다. 예를 들어 설정된 임계값 이전에 모든 요청이 완료되면 로그가 로그 그룹에 전달되지 않습니다.

각 디버그 수준(TRACE, DEBUG, INFO 및 WARN)에 대해 개별 INDEX 수준 임계값을 설정할 수도 있습니다.

예를 들어 OpenSearch 대시보드의 YOURINDEXNAME 인덱스에 대하여 WARN 디버그 수준 임계값을 10초로 설정할 수 있습니다.

PUT /YOURINDEXNAME/_settings{"index.search.slowlog.threshold.query.warn": "10s"}

참고: TRACE를 ‘0’밀리초로 설정하면 도메인에 대한 모든 쿼리를 로깅할 수 있습니다. 다만 모든 쿼리를 로깅하면 리소스가 많이 소모되므로 도메인 성능이 저하될 수 있습니다.

그 후 다음 명령을 사용하여 임계값을 확인합니다.

GET/YOURINDEXNAME/_settings?pretty

OpenSearch Service는 정의된 임계값을 초과하는 모든 쿼리를 로깅합니다.

모범 사례

  • 여러 구성 변경(예: CloudWatch에 게시된 로그 활성화 또는 비활성화)을 동시에 수행하지 마십시오. 한 번에 너무 많은 구성을 변경하면 여러 개의 블루/그린 배포가 트리거됩니다. 여러 개의 블루/그린 배포로 인해 OpenSearch Service 도메인이 처리 중 상태로 멈출 수 있습니다. 블루/그린 배포에 대한 자세한 내용은 OpenSearch Service에서 구성 변경을 참조하세요.
  • 느린 검색 쿼리를 식별하기 위해 쿼리 단계와 가져오기 단계 모두에 대해 임계값을 설정합니다.
  • 낮은 임계값으로 테스트하고 성능에 영향을 주거나 최적화가 필요한 쿼리만 로깅하도록 임계값을 서서히 높입니다.
  • 클러스터에 적합한 샤드 수를 선택하여 클러스터 성능을 최적화합니다. 샤드 유지 관리에 대한 자세한 내용은 Amazon OpenSearch Service 모범 사례를 참조하세요.
  • 느린 로그의 경우 TRACE, DEBUG, INFO 및 WARN 디버그 수준에서 로깅을 활성화합니다. 각 디버그 수준은 서로 다른 범주의 정보를 로깅하므로 요청 상태에 따라 로깅을 활성화하는 것이 가장 좋습니다.