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

최종 업데이트 날짜: 2020년 8월 26일

Amazon Elasticsearch Service(Amazon ES) 도메인에 대해 Elasticsearch 느린 로그 검색을 활성화했습니다. 그러나 오류가 발생하거나 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 정책 또는 Amazon ES 임계값을 확인합니다.

Amazon ES가 CloudWatch Logs에 작성할 권한을 필요로 하기 때문에 쿼리를 로깅하려면 적절한 IAM 정책이 있어야 합니다. 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:*"
    }
  ]
}

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

각 디버그 수준(TRACE, DEBUG, INFO 및 WARN)에 대해 개별 INDEX 수준 임계값을 설정할 수도 있습니다. 다음 예제에서는 Kibana에서 YOURINDENAME 인덱스에 대해 WARN 디버그 수준의 임계값이 10초로 설정되어 있습니다.

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

참고: TRACE를 “0“밀리초로 설정하면 Amazon ES 도메인에 대한 모든 쿼리를 로깅할 수 있습니다. 그러나 모든 쿼리 로깅은 리소스를 많이 사용하는 작업이므로 Amazon ES 도메인 성능에 영향을 줄 수 있습니다.

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

GET/YOURINDEXNAME/_settings?pretty

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

모범 사례

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