

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

# Managed Service for Apache Flink 애플리케이션 로깅 설정
<a name="cloudwatch-logs"></a>

Managed Service for Apache Flink 애플리케이션에 Amazon CloudWatch 로깅 옵션을 추가하면 애플리케이션 이벤트 또는 구성 문제를 모니터링할 수 있습니다.

이 주제에서는 CloudWatch Logs 스트림에 애플리케이션 이벤트를 기록하도록 애플리케이션을 구성하는 방법을 설명합니다. CloudWatch 로깅 옵션은 애플리케이션이 CloudWatch Logs에 애플리케이션 이벤트를 기록하는 방식을 구성하는 데 사용하는 애플리케이션 설정 및 권한 모음입니다. AWS Management Console 또는 ()를 사용하여 CloudWatch 로깅 옵션을 추가하고 구성할 수 있습니다 AWS Command Line Interface AWS CLI.

애플리케이션에 CloudWatch 로깅 옵션을 추가하는 방법에 대한 내용은 다음과 같습니다.
+ 콘솔을 사용하여 CloudWatch 로깅 옵션을 추가하면 Managed Service for Apache Flink가 자동으로 CloudWatch 로그 그룹과 로그 스트림을 생성하고 애플리케이션이 로그 스트림에 기록하는 데 필요한 권한을 추가합니다.
+ API를 사용하여 CloudWatch 로깅 옵션을 추가하는 경우 애플리케이션의 로그 그룹과 로그 스트림도 만들어야 하며, 애플리케이션이 로그 스트림에 쓰기 하는 데 필요한 권한도 추가해야 합니다.

## 콘솔을 사용하여 CloudWatch 로깅 설정
<a name="cloudwatch-logs-console"></a>

콘솔에서 애플리케이션에 대한 CloudWatch 로깅을 활성화하면 CloudWatch 로그 그룹과 로그 스트림이 자동으로 생성됩니다. 또한 스트림에 쓸 수 있는 권한으로 애플리케이션의 권한 정책이 업데이트됩니다.

Managed Service for Apache Flink는 다음 규칙에 따라 이름이 지정된 로그 그룹을 생성합니다. 여기서 *ApplicationName*은 애플리케이션의 이름입니다.

```
/aws/kinesis-analytics/ApplicationName
```

Managed Service for Apache Flink는 새 로그 그룹에 다음과 같은 이름으로 로그 스트림을 생성합니다.

```
kinesis-analytics-log-stream
```

**애플리케이션 구성** 페이지의 **모니터링 로그 수준** 섹션을 사용하여 애플리케이션 모니터링 지표 수준 및 모니터링 로그 수준을 설정합니다. 애플리케이션 로그 수준에 대한 자세한 내용은 [애플리케이션 모니터링 수준 제어](#cloudwatch_levels) 섹션을 참조하세요.

## CLI을 사용하여 CloudWatch 로깅 설정
<a name="cloudwatch-logs-api"></a>

를 사용하여 CloudWatch 로깅 옵션을 추가하려면 다음을 AWS CLI완료합니다.
+ CloudWatch 로그 그룹과 로그 스트림을 생성합니다.
+ [CreateApplication](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html) 작업을 사용하여 애플리케이션을 만들 때 로깅 옵션을 추가하거나 [AddApplicationCloudWatchLoggingOption](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_AddApplicationCloudWatchLoggingOption.html) 작업을 사용하여 기존 애플리케이션에 로깅 옵션을 추가합니다.
+ 애플리케이션 정책에 로그에 쓸 수 있는 권한을 추가합니다.

### CloudWatch 로그 그룹과 로그 스트림 생성
<a name="cloudwatch-logs-api-create"></a>

CloudWatch 로그 콘솔 또는 API를 사용하여 CloudWatch 로그 그룹을 생성하고 스트리밍합니다. CloudWatch 로그 그룹 및 로그 스트림 생성에 대한 자세한 내용은 [로그 그룹 및 로그 스트림 작업](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)을 참조하세요.

### 애플리케이션 CloudWatch 로깅 옵션 작업
<a name="adding_cloudwatch"></a>

다음 API 작업을 통해 CloudWatch 로그 옵션을 신규 혹은 기존 애플리케이션에 추가하거나 기존 애플리케이션에 대한 로그 옵션을 변경합니다. JSON 파일을 사용하여 API 작업을 입력하는 방법에 대한 자세한 방법은 [Managed Service for Apache Flink API 예 코드](api-examples.md) 섹션을 참조하세요.

#### 애플리케이션 생성 시 CloudWatch 로그 옵션 추가
<a name="add_cloudwatch_create"></a>

다음 예제는 애플리케이션을 생성할 때 `CreateApplication` 작업을 사용하여 CloudWatch 로그 옵션을 추가하는 방법을 보여 줍니다. 이 예제에서는 *새 애플리케이션에 추가할 CloudWatch 로그 스트림의 Amazon 리소스 이름(ARN)*을 자신의 정보로 바꿉니다. 이러한 작업에 대한 자세한 내용은 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html) 섹션을 참조하세요.

```
{
    "ApplicationName": "test",
    "ApplicationDescription": "test-application-description",
    "RuntimeEnvironment": "FLINK-1_15",
    "ServiceExecutionRole": "arn:aws:iam::123456789123:role/myrole",
    "ApplicationConfiguration": {
        "ApplicationCodeConfiguration": {
            "CodeContent": {
                "S3ContentLocation":{
                              "BucketARN": "arn:aws:s3:::amzn-s3-demo-bucket",
                              "FileKey": "myflink.jar"
                }
            },
            "CodeContentType": "ZIPFILE"
        }
    },
    "CloudWatchLoggingOptions": [{
      "LogStreamARN": "<Amazon Resource Name (ARN) of the CloudWatch log stream to add to the new application>"
	}]
}
```

#### 기존 애플리케이션에 CloudWatch 로그 옵션 추가
<a name="add_to_existing_app"></a>

다음 예제는 `AddApplicationCloudWatchLoggingOption` 작업을 사용하여 기존 애플리케이션에 CloudWatch 로그 옵션을 추가하는 방법을 보여 줍니다. 예제에서 각 *사용자 입력 자리 표시자*를 자신의 정보로 바꿉니다. 이러한 작업에 대한 자세한 내용은 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_AddApplicationCloudWatchLoggingOption.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_AddApplicationCloudWatchLoggingOption.html) 섹션을 참조하세요.

```
{
   "ApplicationName": "<Name of the application to add the log option to>",
   "CloudWatchLoggingOption": { 
      "LogStreamARN": "<ARN of the log stream to add to the application>"
   },
   "CurrentApplicationVersionId": <Version of the application to add the log to>
}
```

#### 기존 CloudWatch 로그 옵션 업데이트
<a name="update_existing"></a>

다음 예제는 `UpdateApplication` 작업을 사용하여 기존 CloudWatch 로그 옵션을 수정하는 방법을 보여 줍니다. 예제에서 각 *사용자 입력 자리 표시자*를 자신의 정보로 바꿉니다. 이러한 작업에 대한 자세한 내용은 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) 섹션을 참조하세요.

```
{
   "ApplicationName": "<Name of the application to update the log option for>",
   "CloudWatchLoggingOptionUpdates": [ 
         { 
            "CloudWatchLoggingOptionId": "<ID of the logging option to modify>",
            "LogStreamARNUpdate": "<ARN of the new log stream to use>"
         }
      ],
   "CurrentApplicationVersionId": <ID of the application version to modify>
}
```

#### 애플리케이션에서 CloudWatch 로그 옵션 삭제
<a name="delete-log"></a>

다음 예제는 `DeleteApplicationCloudWatchLoggingOption` 작업을 사용하여 기존 CloudWatch 로그 옵션을 삭제하는 방법을 보여 줍니다. 예제에서 각 *사용자 입력 자리 표시자*를 자신의 정보로 바꿉니다. 이러한 작업에 대한 자세한 내용은 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_DeleteApplicationCloudWatchLoggingOption.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_DeleteApplicationCloudWatchLoggingOption.html) 섹션을 참조하세요.

```
{
   "ApplicationName": "<Name of application to delete log option from>",
   "CloudWatchLoggingOptionId": "<ID of the application log option to delete>",
   "CurrentApplicationVersionId": <Version of the application to delete the log option from>
}
```

#### 애플리케이션 로깅 수준 설정
<a name="cloudwatch-level"></a>

애플리케이션 로깅 수준을 설정하려면 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html) 작업의 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_MonitoringConfiguration.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_MonitoringConfiguration.html) 파라미터 또는 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) 작업의 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_MonitoringConfigurationUpdate.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_MonitoringConfigurationUpdate.html) 파라미터를 사용합니다.

애플리케이션 로그 수준에 대한 자세한 내용은 [애플리케이션 모니터링 수준 제어](#cloudwatch_levels) 섹션을 참조하세요.

##### 애플리케이션을 생성할 때 애플리케이션 로깅 수준 설정
<a name="cloudwatch-level-create"></a>

다음 예제의 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html)요청은 애플리케이션 로그 수준을 `INFO`로 설정합니다.

```
{
   "ApplicationName": "MyApplication",                    
   "ApplicationDescription": "My Application Description",
   "ApplicationConfiguration": {
      "ApplicationCodeConfiguration":{
      "CodeContent":{
        "S3ContentLocation":{
          "BucketARN":"arn:aws:s3:::amzn-s3-demo-bucket",
          "FileKey":"myflink.jar",
          "ObjectVersion":"AbCdEfGhIjKlMnOpQrStUvWxYz12345"
        }
      },
      "CodeContentType":"ZIPFILE"
      },
      "FlinkApplicationConfiguration": 
         "MonitoringConfiguration": { 
            "ConfigurationType": "CUSTOM",
            "LogLevel": "INFO"
         }
      },
   "RuntimeEnvironment": "FLINK-1_15",
   "ServiceExecutionRole": "arn:aws:iam::123456789123:role/myrole"
}
```

##### 애플리케이션 로깅 수준 업데이트
<a name="cloudwatch-level-update"></a>

다음 예제의 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html)요청은 애플리케이션 로그 수준을 `INFO`로 설정합니다.

```
{
   "ApplicationConfigurationUpdate": {
      "FlinkApplicationConfigurationUpdate": { 
         "MonitoringConfigurationUpdate": { 
            "ConfigurationTypeUpdate": "CUSTOM",
            "LogLevelUpdate": "INFO"
         }
      }
   }
}
```

### CloudWatch 로그 스트림에 쓰기 권한 추가
<a name="enable_putlogevents"></a>

Managed Service for Apache Flink에는 잘못된 구성 오류를 CloudWatch에 쓰기 할수 있는 권한이 필요합니다. Managed Service for Apache Flink가 수임하는 AWS Identity and Access Management (IAM) 역할에 이러한 권한을 추가할 수 있습니다.

Managed Service for Apache Flink에 IAM 역할을 사용하는 방법에 대한 자세한 내용은 [Amazon Managed Service for Apache Flink의 자격 증명 및 액세스 관리](security-iam.md) 섹션을 참조하세요.

#### 신뢰 정책
<a name="enable_putlogevents_trust_policy"></a>

Managed Service for Apache Flink에 권한을 부여하여 IAM 역할을 맡게하려면 다음의 신뢰 정책을 해당 역할에 연결합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "kinesisanalytics.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

#### 권한 정책
<a name="enable_putlogevents_permissions_policy"></a>

Managed Service for Apache Flink 리소스에서 CloudWatch에 로그 이벤트를 쓸 수 있는 권한을 애플리케이션에 부여하려면 다음 IAM 권한 정책을 사용할 수 있습니다. 로그 그룹과 스트림에 대한 올바른 Amazon 리소스 이름(ARN)을 입력합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Stmt0123456789000",
            "Effect": "Allow",
            "Action": [
                "logs:PutLogEvents",
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams"
            ],
            "Resource": [
                "arn:aws:logs:us-east-1:123456789012:log-group:my-log-group:log-stream:my-log-stream*",
                "arn:aws:logs:us-east-1:123456789012:log-group:my-log-group:*",
                "arn:aws:logs:us-east-1:123456789012:log-group:*"
            ]
        }
    ]
}
```

------

## 애플리케이션 모니터링 수준 제어
<a name="cloudwatch_levels"></a>

애플리케이션의 *모니터링 지표 수준* 및 *모니터링 로그 수준*을 사용하여 애플리케이션 로그 메시지 생성을 제어할 수 있습니다.

애플리케이션의 모니터링 지표 수준은 로그 메시지의 세분성을 제어합니다. 모니터링 지표 수준은 다음과 같이 정의됩니다.
+ **애플리케이션**: 지표의 범위는 전체 애플리케이션으로 지정됩니다.
+ **작업**: 지표의 범위는 각 작업별로 지정됩니다. 작업에 대한 자세한 내용은 [Managed Service for Apache Flink의 애플리케이션 조정 구현](how-scaling.md) 섹션을 참조하세요.
+ **연산자**: 지표의 범위는 각 연산자별로 지정됩니다. 연산자에 대한 자세한 내용은 [DataStream API를 사용한 Managed Service for Apache Flink의 연산자를 사용하여 데이터 변환](how-operators.md) 섹션을 참조하세요.
+ **병렬 처리**: 지표의 범위는 애플리케이션 병렬 처리로 지정됩니다. [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html) API의 [MonitoringConfigurationUpdate](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_MonitoringConfigurationUpdate.html) 파라미터를 사용해서만 이 지표 수준을 설정할 수 있습니다. 콘솔을 사용하여 이 지표 수준을 설정할 수는 없습니다. 병렬 처리에 대한 자세한 내용은 [Managed Service for Apache Flink의 애플리케이션 조정 구현](how-scaling.md) 섹션을 참조하세요

애플리케이션의 모니터링 로그 수준은 애플리케이션 로그의 상세 정보를 제어합니다. 모니터링 로그 수준은 다음과 같이 정의됩니다.
+ **오류**: 애플리케이션의 잠재적 재해 이벤트.
+ **경고**: 애플리케이션의 잠재적으로 위험한 상황입니다.
+ **정보**: 애플리케이션의 정보 및 일시적 오류 이벤트. 이 로그 수준을 사용하는 것이 좋습니다.
+ **디버그**: 애플리케이션을 디버깅하는 데 가장 유용한 세분화된 정보 이벤트입니다. *참고*: 이 수준은 임시 디버깅 용도로만 사용하세요.

## 로깅 모범 사례 적용
<a name="cloudwatch_bestpractices"></a>

애플리케이션에서는 **정보** 로깅 수준을 사용하는 것이 좋습니다. **오류** 수준이 아닌 **정보** 수준에서 기록되는 Apache Flink 오류가 표시되도록 하려면 이 수준을 사용하는 것이 좋습니다.

애플리케이션 문제를 조사하는 동안에는 **디버그** 수준을 일시적으로만 사용하는 것이 좋습니다. 문제가 해결되면 **정보** 수준으로 다시 전환하세요. **디버그** 로깅 수준을 사용하면 애플리케이션 성능이 크게 영향을 받습니다.

과도한 로깅은 애플리케이션 성능에도 상당한 영향을 미칠 수 있습니다. 예를 들어 처리된 모든 레코드에 대해 로그 항목을 작성하지 않는 것이 좋습니다. 과도한 로깅은 데이터 처리에 심각한 병목 현상을 일으킬 수 있으며, 소스에서 데이터를 읽는 데 배압이 발생할 수 있습니다.

## 로깅 문제 해결 수행
<a name="cloudwatch_troubleshooting"></a>

애플리케이션 로그가 로그 스트림에 기록되지 않는 경우 다음을 확인하세요.
+ 애플리케이션의 IAM 역할 및 정책이 올바른지 확인하세요. 로그 스트림에 액세스하려면 애플리케이션 정책에 다음과 같은 권한이 필요합니다.
  + `logs:PutLogEvents`
  + `logs:DescribeLogGroups`
  + `logs:DescribeLogStreams`

  자세한 내용을 알아보려면 [CloudWatch 로그 스트림에 쓰기 권한 추가](#enable_putlogevents) 섹션을 참조하세요.
+ 애플리케이션이 실행 중인지 확인합니다. 애플리케이션 상태를 확인하려면 콘솔에서 내 애플리케이션의 페이지를 보거나 [DescribeApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_DescribeApplication.html) 또는 [ListApplications](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_ListApplications.html) 작업을 사용하세요.
+ 다른 애플리케이션 문제를 진단하기 위해 `downtime`와 같은 CloudWatch 지표를 모니터링하세요. CloudWatch 지표 판독에 대한 자세한 내용은 [Managed Service for Apache Flink의 지표 및 차원](metrics-dimensions.md) 섹션을 참조하세요.

## CloudWatch Logs Insights 사용
<a name="cloudwatch_next"></a>

애플리케이션에서 CloudWatch 로깅을 활성화한 후에는 CloudWatch Logs Insights를 사용하여 애플리케이션 로그를 분석할 수 있습니다. 자세한 내용은 [CloudWatch Logs Insights로 로그 분석](cloudwatch-logs-reading.md) 단원을 참조하십시오.