

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Managed Service for Apache Flink 中設定應用程式記錄
<a name="cloudwatch-logs"></a>

透過將 Amazon CloudWatch 記錄選項新增至您的 Managed Service for Apache Flink 應用程式，您可以監控應用程式事件或組態問題。

本主題說明如何將應用程式設定為將應用程式事件寫入 CloudWatch Logs 串流。CloudWatch 記錄選項是應用程式設定和許可的集合，您的應用程式用它來設定將應用程式事件寫入 CloudWatch Logs 的方式。您可以使用 AWS 管理主控台 或 () 新增和設定 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 Logs 主控台或 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 Resource Name (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) 角色。

如需將 IAM 角色用於 Managed Service for Apache Flink 的詳細資訊，請參閱[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 Resource Name (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)。
+ **運算子**：指標的適用範圍是每個運算子。如需運算子的相關資訊，請參閱 [使用 Managed Service for Apache Flink 中的運算子搭配 DataStream API 轉換資料](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) 動作。
+ 監控 CloudWatch 指標 (例如 `downtime`)，以診斷其他應用程式問題。如需讀取 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)。