

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

# Amazon CloudWatch Logs를 사용하여 OpenSearch 로그 모니터링
<a name="createdomain-configure-slow-logs"></a>

Amazon OpenSearch Service는 Amazon CloudWatch Logs를 통해 다음과 같은 OpenSearch 로그를 노출합니다.
+ 오류 로그
+ [느린 검색 요청 로그](https://opensearch.org/docs/latest/install-and-configure/configuring-opensearch/logs/#search-request-slow-logs)
+ [느린 샤드 로그](https://opensearch.org/docs/latest/install-and-configure/configuring-opensearch/logs/#shard-slow-logs)
+ [감사 로그](audit-logs.md)

느린 검색 샤드 로그, 느린 인덱싱 느린 로그 및 오류 로그는 성능 및 안정성 문제 해결에 유용합니다. 감사 로그는 규정 준수를 위해 사용자 활동을 추적합니다. 모든 로그는 기본적으로 *비활성화*되어 있습니다. 활성화되면, [표준 CloudWatch 요금](https://aws.amazon.com/cloudwatch/pricing/)이 적용됩니다.

**참고**  
오류 로그는 OpenSearch 및 Elasticsearch 버전 5.1 이상에서만 사용할 수 있습니다. 느린 로그는 모든 OpenSearch 및 Elasticsearch 버전에서 사용할 수 있습니다.

OpenSearch는 로그에 대해 [Apache Log4j 2](https://logging.apache.org/log4j/2.x/) 및 `TRACE`, `DEBUG`, `INFO`, `WARN`, `ERROR`, `FATAL`의 내장형 로그 수준(최저\~최고 수준의 심각도)을 사용합니다.

오류 로그를 활성화하면 OpenSearch Service에서는 `WARN`,`ERROR` 및 `FATAL`의 로그 줄을 CloudWatch에 게시합니다. 또한 OpenSearch Service는 `DEBUG` 수준에서 다음을 비롯한 여러 제외 항목을 게시합니다.
+ `org.opensearch.index.mapper.MapperParsingException`
+ `org.opensearch.index.query.QueryShardException`
+ `org.opensearch.action.search.SearchPhaseExecutionException`
+ `org.opensearch.common.util.concurrent.OpenSearchRejectedExecutionException`
+ `java.lang.IllegalArgumentException`

오류 로그는 다음을 포함하여 많은 상황에서 문제를 해결하는 데 도움이 될 수 있습니다.
+ Painless 스크립트 컴파일 문제
+ 잘못된 쿼리
+ 인덱싱 문제
+ 스냅샷 실패
+ 인덱스 상태 관리 마이그레이션 실패
**참고**  
모든 오류가 오류 로그에 보고되지는 않습니다.

**참고**  
OpenSearch Service는 발생하는 모든 오류를 로깅하지 않습니다.

**Topics**
+ [로그 게시 활성화(콘솔)](#createdomain-configure-slow-logs-console)
+ [로그 게시 활성화(AWS CLI)](#createdomain-configure-slow-logs-cli)
+ [로그 게시(AWS SDKs) 활성화](#createdomain-configure-slow-logs-sdk)
+ [로그 게시 활성화(CloudFormation)](#createdomain-configure-slow-logs-cfn)
+ [느린 검색 요청 로그 임계치 설정](#createdomain-configure-search-request-slow-logs)
+ [느린 샤드 로그 임계치 설정](#createdomain-configure-slow-logs-indices)
+ [느린 로그 테스트](#createdomain-configure-slow-logs-testing)
+ [로그 보기](#createdomain-configure-slow-logs-viewing)

## 로그 게시 활성화(콘솔)
<a name="createdomain-configure-slow-logs-console"></a>

OpenSearch Service 콘솔은 CloudWatch에 대한 로그 게시를 활성화하는 가장 간편한 방법입니다.

**CloudWatch에 대한 로그 게시를 활성화하려면(콘솔)**

1. [aws.amazon.com](https://aws.amazon.com/)으로 이동한 다음 **로그인**을 선택하고 자격 증명을 제공합니다.

1. **분석(Analytics)**에서 **Amazon OpenSearch Service**를 선택합니다.

1. 업데이트할 도메인을 선택합니다.

1. [**로그(Logs)**] 탭에서 로그 유형을 선택하고 [**사용(Enable)**]을 선택합니다.

1. 새 CloudWatch 로그 그룹을 생성하거나 기존 로그 그룹을 선택합니다.
**참고**  
여러 로그를 활성화하려는 경우 자체 로그 그룹에 각각 게시하는 것이 좋습니다. 이렇게 분리하면 로그를 더 쉽게 검사할 수 있습니다.

1. 적절한 사용 권한이 포함된 액세스 정책을 선택하거나 콘솔에서 제공하는 JSON을 사용하여 정책을 만듭니다.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "es.amazonaws.com"
         },
         "Action": [
           "logs:PutLogEvents",
           "logs:CreateLogStream"
         ],
         "Resource": "arn:aws:logs:{{us-east-1}}:{{111122223333}}:log-group:{{cw_log_group_name}}:*"
       }
     ]
   }
   ```

------

   [혼동된 대리자 문제](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)로부터 자신을 보호하기 위하여 `aws:SourceAccount` 및 `aws:SourceArn` 조건 키를 정책에 추가할 것을 권장합니다. 소스 계정은 도메인의 소유자이고 소스 ARN은 도메인의 ARN입니다. 이러한 조건 키를 추가하려면 도메인에 서비스 소프트웨어 R20211203 이상을 사용해야 합니다.

   예를 들어 정책에 다음 조건 블록을 추가할 수 있습니다.

   ```
   "Condition": {
       "StringEquals": {
           "aws:SourceAccount": "{{account-id}}"
       },
       "ArnLike": {
           "aws:SourceArn": "arn:aws:es:{{region}}:{{account-id}}:domain/{{domain-name}}"
       }
   }
   ```
**중요**  
CloudWatch Logs는 [리전당 10개의 리소스 정책](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutResourcePolicy.html)을 지원합니다. 여러 OpenSearch Service 도메인에 대해 로그를 사용하도록 설정하려는 경우, 이 제한에 도달하지 않도록 하려면 여러 로그 그룹을 포함하는 더 광범위한 정책을 생성하여 재사용해야 합니다. 정책 업데이트 단계는 [로그 게시 활성화(AWS CLI)](#createdomain-configure-slow-logs-cli) 섹션을 참조하세요.

1. **활성화(Enable)**를 선택합니다.

   도메인 상태가 **활성(Active)**에서 **처리 중(Processing)**으로 바뀝니다. 상태가 다시 **활성(Active)**으로 돌아온 다음에 로그 게시를 활성화해야 합니다. 이 변경은 일반적으로 30분이 소요되지만 도메인 구성에 따라 시간이 더 오래 걸릴 수 있습니다.

느린 샤드 로그 중 하나를 활성화한 경우 [느린 샤드 로그 임계치 설정](#createdomain-configure-slow-logs-indices) 섹션을 참조하세요. 감사 로그를 활성화한 경우 [2단계: OpenSearch Dashboards에서 감사 로그 켜기](audit-logs.md#audit-log-dashboards-ui) 섹션을 참조하세요. 오류 로그만 활성화한 경우 추가 구성 단계를 수행할 필요가 없습니다.

## 로그 게시 활성화(AWS CLI)
<a name="createdomain-configure-slow-logs-cli"></a>

로그 게시를 활성화하려면 CloudWatch 로그 그룹이 필요합니다. 아직 없는 경우 다음 명령을 사용하여 생성할 수 있습니다.

```
aws logs create-log-group --log-group-name {{my-log-group}}
```

다음 명령을 입력하여 로그 그룹의 ARN을 찾은 다음 *이를 기록해 둡니다*.

```
aws logs describe-log-groups --log-group-name {{my-log-group}}
```

이제 로그 그룹에 작성할 수 있는 권한을 OpenSearch Service에 부여할 수 있습니다. 명령의 끝 부분에 로그 그룹의 ARN을 제공해야 합니다.

```
aws logs put-resource-policy \
  --policy-name my-policy \
  --policy-document '{ "Version": "2012-10-17",		 	 	  "Statement": [{ "Sid": "", "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com"}, "Action":[ "logs:PutLogEvents","logs:CreateLogStream"],"Resource": "{{cw_log_group_arn}}:*"}]}'
```

**중요**  
CloudWatch Logs는 [리전당 10개의 리소스 정책](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutResourcePolicy.html)을 지원합니다. 여러 OpenSearch Service 도메인에 대해 느린 샤드 로그를 사용하도록 설정하려는 경우, 이 제한에 도달하지 않도록 하려면 여러 로그 그룹을 포함하는 더 광범위한 정책을 생성하여 재사용해야 합니다.

나중에 이 정책을 검토해야 하는 경우 `aws logs describe-resource-policies` 명령을 사용합니다. 정책을 업데이트하려면 새 정책 문서에 동일한 `aws logs put-resource-policy` 명령을 실행합니다.

마지막으로, `--log-publishing-options` 옵션을 사용하여 게시를 활성화할 수 있습니다. 옵션에 대한 구문은 `create-domain` 및 `update-domain-config` 명령 둘 다에서 동일합니다.



- **`--log-publishing-options`**
  - SEARCH\_SLOW\_LOGS={CloudWatchLogsLogGroupArn={{cw\_log\_group\_arn}},Enabled=true\|false}
  - INDEX\_SLOW\_LOGS={CloudWatchLogsLogGroupArn={{cw\_log\_group\_arn}},Enabled=true\|false}
  - ES\_APPLICATION\_LOGS={CloudWatchLogsLogGroupArn={{cw\_log\_group\_arn}},Enabled=true\|false}
  - AUDIT\_LOGS={CloudWatchLogsLogGroupArn={{cw\_log\_group\_arn}},Enabled=true\|false}



**참고**  
여러 로그를 활성화하려는 경우 자체 로그 그룹에 각각 게시하는 것이 좋습니다. 이렇게 분리하면 로그를 더 쉽게 검사할 수 있습니다.

**예제**

다음 예제는 지정된 도메인에 대한 느린 샤드 로그 검색 및 인덱싱의 게시를 활성화합니다.

```
aws opensearch update-domain-config \
  --domain-name my-domain \
  --log-publishing-options "SEARCH_SLOW_LOGS={CloudWatchLogsLogGroupArn=arn:aws:logs:us-east-1:123456789012:log-group:my-log-group,Enabled=true},INDEX_SLOW_LOGS={CloudWatchLogsLogGroupArn=arn:aws:logs:us-east-1:123456789012:log-group:my-other-log-group,Enabled=true}"
```

CloudWatch에 대한 게시를 비활성화하려면 `Enabled=false`를 통해 동일한 명령을 실행합니다.

느린 샤드 로그 중 하나를 활성화한 경우 [느린 샤드 로그 임계치 설정](#createdomain-configure-slow-logs-indices) 섹션을 참조하세요. 감사 로그를 활성화한 경우 [2단계: OpenSearch Dashboards에서 감사 로그 켜기](audit-logs.md#audit-log-dashboards-ui) 섹션을 참조하세요. 오류 로그만 활성화한 경우 추가 구성 단계를 수행할 필요가 없습니다.

## 로그 게시(AWS SDKs) 활성화
<a name="createdomain-configure-slow-logs-sdk"></a>

로그 게시를 활성화하려면 먼저 CloudWatch 로그 그룹을 생성하고, ARN을 얻고, OpenSearch Service에 작성할 수 있는 권한을 부여해야 합니다. 관련 작업은 [Amazon CloudWatch Logs API 참조](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/)에 문서화되어 있습니다.
+ `CreateLogGroup`
+ `DescribeLogGroup`
+ `PutResourcePolicy`

[AWS SDK](https://aws.amazon.com/tools/#sdk)를 사용하여 이 작업에 액세스할 수 있습니다.

 AWS SDKs(Android 및 iOS SDKs 제외)는 `CreateDomain` 및에 대한 `--log-publishing-options` 옵션을 포함하여 [Amazon OpenSearch Service API 참조](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/Welcome.html)에 정의된 모든 작업을 지원합니다`UpdateDomainConfig`.

느린 샤드 로그 중 하나를 활성화한 경우 [느린 샤드 로그 임계치 설정](#createdomain-configure-slow-logs-indices) 섹션을 참조하세요. 오류 로그만 활성화한 경우 추가 구성 단계를 수행할 필요가 없습니다.

## 로그 게시 활성화(CloudFormation)
<a name="createdomain-configure-slow-logs-cfn"></a>

이 예제에서는 CloudFormation을 사용하여 `opensearch-logs`라는 로그 그룹을 생성하고 적절한 권한을 할당한 다음, 애플리케이션 로그, 느린 검색 샤드 로그 및 느린 인덱싱 로그에 대한 로그 게시가 활성화된 도메인을 생성합니다.

로그 게시를 활성화하려면 CloudWatch 로그 그룹을 생성해야 합니다.

```
Resources:
  OpenSearchLogGroup:
    Type: AWS::Logs::LogGroup
    Properties: 
      LogGroupName: {{opensearch-logs}}
Outputs:
  Arn:
    Value:
      'Fn::GetAtt':
        - OpenSearchLogGroup
        - Arn
```

템플릿은 로그 그룹의 ARN을 출력합니다. 이 경우 ARN은 `arn:aws:logs:us-east-1:123456789012:log-group:opensearch-logs`입니다.

ARN을 사용하여 로그 그룹에 작성할 수 있는 권한을 OpenSearch Service를 부여하는 리소스 정책을 만듭니다.

```
Resources:
 OpenSearchLogPolicy:
   Type: AWS::Logs::ResourcePolicy
   Properties:
     PolicyName: {{my-policy}}
     PolicyDocument: "{ \"Version\": \"2012-10-17\", \"Statement\": [{ \"Sid\": \"\", \"Effect\": \"Allow\", \"Principal\": { \"Service\": \"es.amazonaws.com\"}, \"Action\":[ \"logs:PutLogEvents\",\"logs:CreateLogStream\"],\"Resource\": \"arn:aws:logs:us-east-1:123456789012:log-group:opensearch-logs:*\"}]}"
```

마지막으로 로그 게시를 사용하여 OpenSearch 서비스 도메인을 생성하는 다음 CloudFormation 스택을 생성합니다. 액세스 정책은의 사용자가 도메인에 대한 모든 HTTP 요청을 할 수 AWS 계정 있도록 허용합니다.

```
Resources:
  OpenSearchServiceDomain:
    Type: "AWS::OpenSearchService::Domain"
    Properties:
      DomainName: {{my-domain}}
      EngineVersion: "OpenSearch_1.0"
      ClusterConfig:
        InstanceCount: 2
        InstanceType: "r6g.xlarge.search"
        DedicatedMasterEnabled: true
        DedicatedMasterCount: 3
        DedicatedMasterType: "r6g.xlarge.search"
      EBSOptions:
        EBSEnabled: true
        VolumeSize: 10
        VolumeType: "gp2"
      AccessPolicies:
        Version: "2012-10-17"		 	 	 
        Statement:
            Effect: "Allow"
            Principal:
                AWS: "arn:aws:iam::{{123456789012}}:user/es-user"
            Action: "es:*"
            Resource: "arn:aws:es:us-east-1:{{123456789012}}:domain/{{my-domain}}/*"
      LogPublishingOptions:
        ES_APPLICATION_LOGS:
          CloudWatchLogsLogGroupArn: "arn:aws:logs:us-east-1:{{123456789012}}:log-group:opensearch-logs"
          Enabled: true
        SEARCH_SLOW_LOGS:
          CloudWatchLogsLogGroupArn: "arn:aws:logs:us-east-1:{{123456789012}}:log-group:opensearch-logs"
          Enabled: true
        INDEX_SLOW_LOGS:
          CloudWatchLogsLogGroupArn: "arn:aws:logs:us-east-1:{{123456789012}}:log-group:opensearch-logs"
          Enabled: true
```

자세한 구문 정보는 *CloudFormation 사용 설명서*의 [로그 게시 옵션](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-logpublishingoption.html)을 참조하세요.

## 느린 검색 요청 로그 임계치 설정
<a name="createdomain-configure-search-request-slow-logs"></a>

[느린 검색 요청 로그](https://opensearch.org/docs/latest/install-and-configure/configuring-opensearch/logs/#search-request-slow-logs)는 버전 2.13 이상에서 실행되는 OpenSearch Service 도메인에서 검색할 수 있습니다. 느린 검색 요청 로그 임계치는 총 요청 소요 시간에 대해 구성됩니다. 이는 개별 샤드 소요 시간에 대해 구성된 느린 샤드 요청 로그와 다릅니다.

클러스터 설정을 사용하여 느린 검색 요청 로그를 지정할 수 있습니다. 이는 인덱스 설정으로 활성화하는 느린 샤드 로그와 다릅니다. 예를 들어 OpenSearch REST API를 통해 다음 설정을 지정할 수 있습니다.

```
PUT {{domain-endpoint}}/_cluster/settings
{
  "transient": {
    "cluster.search.request.slowlog.threshold.warn": "5s",
    "cluster.search.request.slowlog.threshold.info": "2s"
  }
}
```

**참고**  
`PUT /_cluster/settings` 엔드포인트는 Amazon OpenSearch Service에서 제한됩니다. 이 요청을 보내면 오류가 반환됩니다. 샤드 느린 로그 임계값을 구성`Your request: '/_cluster/settings' payload is not allowed.`하려면 인덱스 수준 설정을 대신 사용합니다. 예제:  

```
PUT {{domain-endpoint}}/{{index}}/_settings
{
  "index.search.slowlog.threshold.query.warn": "5s",
  "index.search.slowlog.threshold.query.info": "2s"
}
```

## 느린 샤드 로그 임계치 설정
<a name="createdomain-configure-slow-logs-indices"></a>

OpenSearch는 기본적으로 [느린 샤드 로그](https://opensearch.org/docs/latest/install-and-configure/configuring-opensearch/logs/#shard-slow-logs)를 비활성화합니다. CloudWatch에 느린 샤드 로그 *게시*를 활성화한 후 각 OpenSearch 인덱스에 대한 로깅 임계치를 지정해야 합니다. 이러한 임계값은 정확하게 기록할 내용과 로그 수준을 정의합니다.

예를 들어 OpenSearch REST API를 통해 이러한 설정을 지정할 수 있습니다.

```
PUT {{domain-endpoint}}/{{index}}/_settings
{
  "index.search.slowlog.threshold.query.warn": "5s",
  "index.search.slowlog.threshold.query.info": "2s"
}
```

## 느린 로그 테스트
<a name="createdomain-configure-slow-logs-testing"></a>

느린 검색 요청 및 샤드 로그가 성공적으로 게시되고 있는지 테스트하려면 매우 낮은 값으로 시작하여 로그가 CloudWatch에 나타나는지 확인한 다음, 임계치를 더 유용한 수준으로 늘립니다.

로그가 나타나지 않는 경우 다음 정보를 확인합니다.
+ CloudWatch 로그 그룹이 있습니까? CloudWatch 콘솔을 확인합니다.
+ 로그 그룹에 작성할 수 있는 권한이 OpenSearch Service에 있습니까? OpenSearch Service 콘솔을 확인합니다.
+ OpenSearch Service 도메인이 로그 그룹에 게시되도록 구성되었습니까? OpenSearch Service 콘솔을 확인하거나, 옵션을 사용하거나 AWS CLI `describe-domain-config`, SDK 중 하나를 `DescribeDomainConfig` 사용하여를 호출합니다. SDKs
+ 요청이 해당 값을 초과할 만큼 OpenSearch 로깅 임계값이 낮습니까?

  도메인에 대한 느린 검색 요청 로그 임계치를 검토하려면 다음 명령을 사용합니다.

  ```
  GET {{domain-endpoint}}/_cluster/settings?flat_settings
  ```

  인덱스에 대한 느린 샤드 로그 임계치를 검토하려면 다음 명령을 사용합니다.

  ```
  GET {{domain-endpoint}}/{{index}}/_settings?pretty
  ```

인덱스에 대해 느린 로그를 사용하지 않으려면 변경한 임계값을 `-1`의 기본값으로 되돌립니다.

OpenSearch Service 콘솔을 사용하여 CloudWatch에 게시를 비활성화하거나 OpenSearch의 로그 생성을 중지*하지* AWS CLI 않고 해당 로그의 *게시*만 중지합니다. 느린 샤드 로그가 더 이상 필요하지 않은 경우 인덱스 설정을 확인하고 느린 검색 요청 로그가 더 이상 필요하지 않은 경우 도메인 설정을 확인해야 합니다.

## 로그 보기
<a name="createdomain-configure-slow-logs-viewing"></a>

CloudWatch에서 애플리케이션 및 느린 로그를 보는 것은 다른 CloudWatch 로그를 보는 것과 같습니다. 자세한 내용은 *Amazon CloudWatch Logs 사용 설명서*의 [로그 데이터 보기](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#ViewingLogData)를 참조하세요.

다음은 로그를 볼 때 고려해야 할 몇 가지 사항입니다.
+ OpenSearch Service는 각 줄에 있는 처음 255,000개 문자만 CloudWatch에 게시합니다. 남아 있는 모든 콘텐츠는 잘리게 됩니다. 감사 로그의 경우 메시지당 10,000자입니다.
+ CloudWatch에서 로그 스트림 이름에는 콘텐츠를 식별하는 데 도움이 되는 `-index-slow-logs`, `-search-slow-logs`, `-application-logs` 및 `-audit-logs` 접미사가 있습니다.