

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Managed Service for Apache Flink でのロギングとモニタリング
<a name="monitoring-overview"></a>

モニタリングは、Managed Service for Apache Flink アプリケーションの信頼性、可用性、パフォーマンスを維持する上で重要な部分です。マルチポイント障害が発生した場合は、その障害をより簡単にデバッグできるように、 AWS ソリューションのすべての部分からモニタリングデータを収集する必要があります。

Managed Service for Apache Flinkのモニタリングを開始する前に、以下の質問に対する回答を反映したモニタリング計画を作成する必要があります。
+ モニタリングの目的は何ですか?
+ どのリソースをモニタリングしますか?
+ どのくらいの頻度でこれらのリソースをモニタリングしますか?
+ どのモニタリングツールを利用しますか?
+ 誰がモニタリングタスクを実行しますか?
+ 問題が発生したときに誰が通知を受け取りますか?

次のステップでは、通常の Managed Service for Apache Flink パフォーマンスのベースラインを環境に確立します。これを行うには、さまざまな時間帯とさまざまな負荷条件下でのパフォーマンスを測定します。Managed Service for Apache Flink をモニタリングする際、過去のモニタリングデータを保存することができます。保存すれば、パフォーマンスデータをこの過去のデータと比較して、通常のパフォーマンスパターンとパフォーマンス異常を識別することで、問題の対処方法を考案しやすくなります。

**Topics**
+ [Managed Service for Apache Flink でのロギング](logging.md)
+ [Managed Service for Apache Flink でのモニタリング](monitoring.md)
+ [Managed Service for Apache Flink でアプリケーションロギングを設定する](cloudwatch-logs.md)
+ [CloudWatch Logs Insights でログを解析する](cloudwatch-logs-reading.md)
+ [Managed Service for Apache Flink でのメトリクスおよびディメンション](metrics-dimensions.md)
+ [CloudWatch Logs にカスタムメッセージを書き込む](cloudwatch-logs-writing.md)
+ [を使用した Apache Flink API コールの Managed Service のログ記録 AWS CloudTrail](logging-using-cloudtrail.md)

# Managed Service for Apache Flink でのロギング
<a name="logging"></a>

実稼働アプリケーションでは、エラーや障害を理解するためにロギングが重要である。ただし、ロギング サブシステムはログエントリを収集して CloudWatch Logs に転送する必要があります。一部のロギングは適切で望ましいものですが、大規模なロギングはサービスに過負荷を与え、Flink アプリケーションの遅れを引き起こす可能性があります。例外や警告をログに記録するのは確かに良い考えです。しかし、Flink アプリケーションによって処理されるすべてのメッセージに対してログ メッセージを生成することはできません。Flink は、高いスループットと低いレイテンシを実現するために最適化されていますが、ロギング サブシステムは最適化されていません。処理されたメッセージごとにログ出力を生成する必要がある場合は、Flink アプリケーション内の追加のDataStreamと適切なシンクを使用してデータをAmazon S3またはCloudWatchに送信します。この目的にはJavaロギングシステムを使用しないでください。さらに、Managed Service for Apache Flink`Debug Monitoring Log Level` の設定によって大量のトラフィックが生成され、バックプレッシャが発生する可能性があります。アプリケーションの問題を積極的に調査する場合にのみ使用してください。

## CloudWatch Logs Insights でログをクエリする
<a name="logging-querying"></a>

CloudWatch Logs Insights は、ログを大規模にクエリする強力なサービスです。お客様はその機能を活用してログを迅速に検索して、運用イベント中のエラーを特定して軽減する必要があります。

 次のクエリは、すべてのタスク マネージャー ログから例外を検索し、発生時刻に従って例外を並べ替えます。

```
fields @timestamp, @message
| filter isPresent(throwableInformation.0) or isPresent(throwableInformation) or @message like /(Error|Exception)/
| sort @timestamp desc
```

その他の便利なクエリについては、[クエリの例](https://docs.aws.amazon.com/managed-flink/latest/java/cloudwatch-logs-reading.html#cloudwatch-logs-reading-examples)を参照してください。

# Managed Service for Apache Flink でのモニタリング
<a name="monitoring"></a>

実稼働環境でストリーミング アプリケーションを実行する場合は、アプリケーションを継続的かつ無期限に実行するように設定します。Flink アプリケーションだけでなく、すべてのコンポーネントのモニターと適切なアラームを実装することが重要です。そうでなければ、新たな問題を早期に見逃してしまい、運用上の事件が完全に解明され、軽減することがはるかに難しくなってしまうと気付くリスクがあります。一般的に監視すべき事項は次のとおりです。
+ ソースはデータを取り込んでいますか。
+ データはソース(ソースの観点から)から読み込まれていますか。
+ Flinkアプリケーションはデータを受信していますか?
+ Flinkアプリケーションは対応できるのか、それとも遅れていますか。
+ Flinkアプリケーションは(アプリケーションの観点から)データをシンクに永続化していますか?
+ シンクはデータを受信していますか?

その場合は、Flinkアプリケーションについてより具体的なメトリクスを検討する必要があります。この[CloudWatch ダッシュボード](https://github.com/aws-samples/kda-metrics-dashboard)はいい出発点となります。実稼働アプリケーションのモニタリング対象となるメトリクスの詳細については、　[Amazon Managed Service for Apache Flink で CloudWatch アラームを使用する](monitoring-metrics-alarms.md)　を参照してください。これらのメトリクスには次のものが含まれます。
+ **records\$1lag\$1max**と**MillisBehindLatest** — アプリケーションが Kinesis または Kafka からデータを消費している場合、これらのメトリックは、アプリケーションが遅れていて、現在の負荷に対応するためにスケーリングする必要があるかどうかを示します。これは、あらゆる種類のアプリケーションで追跡しやすい汎用的な指標です。しかし、これはリアクティブスケーリング、つまりアプリケーションがすでに遅れている場合にのみ使用できます。
+ **cpuUtilization**と**heapMemoryUtilization** - これらのメトリクスは、アプリケーションの全体的なリソース使用率を適切に示して、アプリケーションがI/Oバインド出ない限り、プロアクティブなスケーリングに使用できます。
+ **ダウンタイム** — ダウンタイムがゼロより大きい場合は、アプリケーションに障害が発生したことを示します。値が0より大きい場合、アプリケーションはデータを処理していません。
+ **LastCheckpointSize** と *LastCheckpointDuration *— これらのメトリクスは、状態に保存されているデータ量と、チェックポイントの取得にかかる時間を監視します。チェックポイントが増えたり、時間がかかったりしても、アプリケーションはチェックポイント処理に時間を費やし続けて、実際の処理のサイクルは少なくなります。場合によっては、チェックポイントが増えすぎたり、時間がかかりすぎて失敗したりすることがあります。絶対値を監視することに加えて、顧客は`RATE(lastCheckpointSize)`と`RATE(lastCheckpointDuration)`による変化率の監視を検討する必要もあります。
+ **NumberOfFailedCheckpoints** — このメトリックは、アプリケーションの起動以降に失敗したチェックポイントの数をカウントします。アプリケーションによっては、チェックポイントが失敗することがあっても許容できる場合があります。ただし、チェックポイントが定期的に失敗する場合は、アプリケーションが異常である可能性が高く、注意深く見ることが必要です。絶対値ではなく勾配でアラームを出すようにモニタリング`RATE(numberOfFailedCheckpoints)`をお勧めします。

# Managed Service for Apache Flink でアプリケーションロギングを設定する
<a name="cloudwatch-logs"></a>

Managed Service for Apache FlinkアプリケーションにAmazon CloudWatchロギングオプションを追加することで、アプリケーションのイベントや設定の問題を監視することができます。

このトピックでは、アプリケーションイベントをCloudWatch Logsストリームに書き込むようにアプリケーションを設定する方法について説明します。CloudWatch ロギングオプションは、アプリケーションイベントをCloudWatch Logsに書き込む方法を設定するためにアプリケーションが使用するアプリケーション設定と権限のコレクションです。 AWS マネジメントコンソール または AWS Command Line Interface () を使用して CloudWatch ログ記録オプションを追加および設定できます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、次の手順を実行します。
+  ロググループとログストリームの作成
+ [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 コンソール、 または CloudWatch Logs API を使用して削除できます。CloudWatch Logs ロググループの設定については、「[ロググループとログストリームの操作](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)」を参照してください。

### アプリケーション CloudWatch ロギングオプションを使用する
<a name="adding_cloudwatch"></a>

 ログオプションを新しいアプリケーションまたは既存アプリケーションに追加するか、既存アプリケーションのログオプションを変更するには、以下の API アクションを使用します。JSON ファイルを API アクションの入力に使用する方法の詳細については、[Managed Service for Apache Flink API コードの例](api-examples.md)　を参照してください。

#### アプリケーション作成時の CloudWatch ログオプションを追加する
<a name="add_cloudwatch_create"></a>

以下のコード例では、`CreateApplication` アクションを使用して、アプリケーション作成時に ログオプションを使用する方法について説明します。この例では、*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` アクションを使用して、既存アプリケーションにログオプションを追加する方法について説明します。例では、各 *ユーザー入力プレースホルダー* を独自の情報に置き換えます。これらのアクションの詳細については、「[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` アクションを使用して、既存のログオプションを変更する方法について説明します。例では、各 *ユーザー入力プレースホルダー* を独自の情報に置き換えます。これらのアクションの詳細については、「[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` アクションを使用して、既存のログオプションを削除する方法について説明します。例では、各 *ユーザー入力プレースホルダー* を独自の情報に置き換えます。これらのアクションの詳細については、「[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) ロールにこれらのアクセス許可を追加できます。

AManaged Service for Apache Flinkに IAM ロールを使用する方法の詳細については、　[Amazon Managed Service for Apache Flink のIDとアクセスマネジメント](security-iam.md)　を参照してください。

#### 信頼ポリシー
<a name="enable_putlogevents_trust_policy"></a>

IAM ロールを引き受けるためのアクセス権限を Managed Service for Apache Flinkに付与するには、以下の信頼ポリシーをそのロールにアタッチします。

------
#### [ 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>

アプリケーションには **Info** ロギングレベルを使用することをおすすめします。Apache Flink エラーを確実に表示するために、このレベルをお勧めします。エラーレベルは **Error** レベルではなく **Info** レベルで記録されます。

**Debug** レベルはアプリケーションの問題を調査する間は一時的にのみ使用することをおすすめします。問題が解決したら、**Info** レベルに戻してください。**Debug** ログレベルを使用すると、アプリケーションのパフォーマンスに大きく影響します。

ロギングが多すぎると、アプリケーションのパフォーマンスにも大きな影響を与える可能性があります。例のように処理されたレコードごとにログエントリを書き込まないことをお勧めします。ロギングが多すぎると、データ処理に重大なボトルネックが生じ、ソースからデータを読み取る際にバックプレッシャが発生する可能性があります。

## ログ記録のトラブルシューティングを実施する
<a name="cloudwatch_troubleshooting"></a>

アプリケーションログがログストリームに書き込まれていない場合は、次のことを確認してください。
+ アプリケーションのIAM ロールとポリシーが正しいことを確認してください。ログストリームにアクセスするには、アプリケーションのポリシーに以下の権限が必要です。
  + `logs:PutLogEvents`
  + `logs:DescribeLogGroups`
  + `logs:DescribeLogStreams`

  詳細については、「[CloudWatch ログストリームに書き込むためのアクセス許可を追加する](#enable_putlogevents)」を参照してください。
+ ステップ 5: アプリケーションが実行されていることを検証する アプリケーションのステータスを確認するには、コンソールでアプリケーションのページを表示するか、[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 インサイトを使用してアプリケーションログを分析できます。詳細については、「[CloudWatch Logs Insights でログを解析する](cloudwatch-logs-reading.md)」を参照してください。

# CloudWatch Logs Insights でログを解析する
<a name="cloudwatch-logs-reading"></a>

前のセクションで説明したようにCloudWatch ロギング　オプションをアプリケーションに追加した後、CloudWatch Logs Insightsを使用して、特定のイベントまたはエラーについてログ ストリームをクエリできます。

CloudWatch Logs Insights を使用すると、Amazon CloudWatch Logs のログデータをインタラクティブに検索し分析することが可能になります。

CloudWatch Logs Insights の詳細については、「[CloudWatch Logs Insights を使用したログデータの分析](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)」を参照してください。

## サンプルクエリを実行する
<a name="cloudwatch-logs-reading-run"></a>

このセクションでは、CloudWatch Logs Insightsのサンプルクエリを実行する方法について説明します。

**前提条件**
+ CloudWatch Logs で設定されている既存のロググループとログストリーム
+ ログは CloudWatch Logs に保存されます。

Amazon Route 53 AWS CloudTrailや Amazon VPC などのサービスを使用する場合は、CloudWatch Logs に移動するようにそれらのサービスのログを既に設定している可能性があります。CloudWatch Logs の詳細については、[[Getting Started with CloudWatch Logs]](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_GettingStarted.html) (CloudWatch Logs の開始方法) を参照してください。

CloudWatch Logs Insights のクエリは、ログイベントから一連のフィールドを返すか、ログイベントに対して実行された数学的な集約やその他のオペレーションの結果を返します。このチュートリアルでは、ログイベントのリストを返すクエリを示します。

**CloudWatch Logs Insights サンプルクエリを実行するには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. ナビゲーションペインで、[**Insights**] を選択します。

   

1. [Logs Insights] (ログのインサイト) ページでは、クエリエディタにデフォルトクエリが表示されます。デフォルトでは、最新の 20 件のログイベントが返されます。クエリエディタの上で、クエリを実行する対象のロググループを選択します。

   

   ロググループを選択すると、CloudWatch Logs Insights はロググループのデータのフィールドを自動的に検出し、右側のペインの [**Discovered fields (検出済みフィールド)**] に表示します。また、このロググループのログイベントを時間の経過に従って棒グラフで表示します。この棒グラフは、表に示されるイベントだけでなく、クエリと時間範囲に一致するロググループ内のイベントの分布を示します。

1. **[Run query]** (クエリの実行) を選択します。

   クエリの結果が表示されます。この例では、タイプを問わず、最新の 20 件のログイベントが結果として表示されます。

1. 返されたログイベントのいずれかについて、すべてのフィールドを表示するには、そのログイベントの左側にある矢印を選択します。

CloudWatch Logs Insights クエリを実行および変更する方法の詳細については、[サンプルクエリの実行と変更](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData_RunSampleQuery.html)を参照してください。

## クエリの例を確認する
<a name="cloudwatch-logs-reading-examples"></a>

このセクションには、Managed Service for Apache Flinkのアプリケーションログを分析するための CloudWatch Logs Insights サンプルクエリが含まれています。これらのクエリは、いくつかのエラー状態の例を検索して、他のエラー状態を検索するクエリを作成するためのテンプレートとして機能します。

**注記**  
次のクエリ例のリージョン (*us-west-2*)、アカウント ID (*012345678901*)、アプリケーション名 (*YourApplication*) を、アプリケーションのリージョンとアカウント ID に置き換えます。

**Topics**
+ [オペレーションの分析: タスクの分散](#cloudwatch-logs-reading-tm)
+ [オペレーションの分析: 並列度の変化](#cloudwatch-logs-reading-auto)
+ [エラーの分析: アクセスが拒否されました](#cloudwatch-logs-reading-access)
+ [エラーの分析: ソースまたはシンクが見つかりません](#cloudwatch-logs-reading-con)
+ [エラーの分析: アプリケーションタスク関連の障害](#cloudwatch-logs-reading-apps)

### オペレーションの分析: タスクの分散
<a name="cloudwatch-logs-reading-tm"></a>

次の CloudWatch Logs Insights クエリは、Apache Flink Job マネージャーがタスクマネージャー間で分散するタスクの数を返します。クエリが以前のジョブのタスクを返さないように、クエリの時間枠を 1 回のジョブ実行と一致するように設定する必要があります。並列ロードの詳細については、「[アプリケーションスケーリングを実装する](how-scaling.md)」をご参照ください。

```
fields @timestamp, message
| filter message like /Deploying/
| parse message " to flink-taskmanager-*" as @tmid
| stats count(*) by @tmid
| sort @timestamp desc
| limit 2000
```

次の CloudWatch Logs Insights クエリは、各タスクマネージャーに割り当てられたサブタスクを返します。サブタスクの総数は、各タスクの並列処理の合計です。タスク並列処理は演算子の並列処理から派生し、コード内で`setParallelism`を指定して変更しない限り、デフォルトではアプリケーションの並列処理と同じです。演算子の並列処理の設定の詳細について、[Apache Flink ドキュメント](https://nightlies.apache.org/flink/flink-docs-release-1.15/)の[並列処理の設定:演算子レベル](https://nightlies.apache.org/flink/flink-docs-release-1.15/dev/parallel.html#operator-level)を参照してください。

```
fields @timestamp, @tmid, @subtask
| filter message like /Deploying/
| parse message "Deploying * to flink-taskmanager-*" as @subtask, @tmid
| sort @timestamp desc
| limit 2000
```

タスクスケジューリングについて詳しくは、[Apache Flink ドキュメント](https://nightlies.apache.org/flink/flink-docs-release-1.15/)の[ジョブとスケジューリング](https://nightlies.apache.org/flink/flink-docs-release-1.15/internals/job_scheduling.html)を参照してください。

### オペレーションの分析: 並列度の変化
<a name="cloudwatch-logs-reading-auto"></a>

次の CloudWatch Logs Insights クエリは、アプリケーションの並列処理に対する変更 (たとえば、自動スケーリングによる) を返します。このクエリでは、アプリケーションの並列処理に対する手動による変更も返されます。 Auto Scaling の詳細については、「」を参照してください[Managed Service for Apache Flink で自動スケーリングを使用する](how-scaling-auto.md)。

```
fields @timestamp, @parallelism
| filter message like /property: parallelism.default, /
| parse message "default, *" as @parallelism
| sort @timestamp asc
```

### エラーの分析: アクセスが拒否されました
<a name="cloudwatch-logs-reading-access"></a>

次の CloudWatch Logsインサイトクエリは　`Access Denied`　ログを返します。

```
fields @timestamp, @message, @messageType
| filter applicationARN like /arn:aws:kinesisanalyticsus-west-2:012345678901:application\/YourApplication/
| filter @message like /AccessDenied/
| sort @timestamp desc
```

### エラーの分析: ソースまたはシンクが見つかりません
<a name="cloudwatch-logs-reading-con"></a>

次のCloudWatch Logsインサイトクエリは　`ResourceNotFound`　ログを返します。 Kinesis ソースまたはシンクが見つからない場合、結果を　`ResourceNotFound`　ログに記録します。

```
fields @timestamp,@message
| filter applicationARN like /arn:aws:kinesisanalyticsus-west-2:012345678901:application\/YourApplication/
| filter @message like /ResourceNotFoundException/
| sort @timestamp desc
```

### エラーの分析: アプリケーションタスク関連の障害
<a name="cloudwatch-logs-reading-apps"></a>

次の CloudWatch Logs Insights クエリは、アプリケーションのタスク関連の障害ログを返します。これらのログは、アプリケーションのステータスが`RUNNING`から`RESTARTING`に切り替わった場合に生成されます。

```
fields @timestamp,@message
| filter applicationARN like /arn:aws:kinesisanalyticsus-west-2:012345678901:application\/YourApplication/
| filter @message like /switched from RUNNING to RESTARTING/
| sort @timestamp desc
```

Apache Flink バージョン 1.8.2 以前を使用するアプリケーションでは、タスク関連の障害が発生すると、アプリケーションのステータスが代わりに`RUNNING`から`FAILED`に切り替わります。Apache Flink 1.8.2 以前のバージョンを使用している場合は、次のクエリを使用してアプリケーションタスク関連の障害を検索してください。

```
fields @timestamp,@message
| filter applicationARN like /arn:aws:kinesisanalyticsus-west-2:012345678901:application\/YourApplication/
| filter @message like /switched from RUNNING to FAILED/
| sort @timestamp desc
```

# Managed Service for Apache Flink でのメトリクスおよびディメンション
<a name="metrics-dimensions"></a>

Managed Service for Apache Flinkがデータソースを処理する場合、Managed Service for Apache Flinkは以下のメトリクスとディメンションをAmazon CloudWatchにレポートします。

**Flink 2.2 メトリクスの変更**  
Flink 2.2 では、モニタリングとアラームに影響を与える可能性のあるメトリクスの変更が導入されています。アップグレードする前に、次の変更を確認してください。  
`fullRestarts` メトリクスは削除されました。代わりに `numRestarts` を使用します。
`uptime` および `downtime`メトリクスは廃止され、今後のリリースで削除されます。新しい状態固有のメトリクスに移行します。
Kinesis Data Streams コネクタ 6.0.0 の `bytesRequestedPerFetch`メトリクスが削除されました。

## アプリケーションメトリクス
<a name="metrics-dimensions-jobs"></a>


| メトリクス | 単位 | 説明 | レベル | 使用に関する注意事項 | 
| --- | --- | --- | --- | --- | 
| backPressuredTimeMsPerSecond\$1 | ミリ秒 | このタスクまたはオペレーターが1秒あたりにバックプレッシャーを受ける時間(ミリ秒単位)。 | タスク、オペレータ、並列度 | \$1Flink バージョン 1.13 を実行しているManaged Service for Apache Flinkアプリケーションでのみ使用できます。 これらのメトリックはアプリケーションのボトルネックを特定することに役立ちます。 | 
| busyTimeMsPerSecond\$1 | ミリ秒 | このタスクまたはオペレーターがビジー状態(アイドル状態でもバックプレッシャーでもない)の1秒あたりの時間(ミリ秒単位)。値を計算できなかった場合はNaNでもかまいません。 | タスク、オペレータ、並列度 | \$1Flink バージョン 1.13 を実行しているManaged Service for Apache Flinkアプリケーションでのみ使用できます。 これらのメトリックはアプリケーションのボトルネックを特定することに役立ちます。 | 
| cpuUtilization | パーセンテージ | タスクマネージャー全体の CPU 使用率。たとえば、タスクマネージャーが5つある場合、Apache Flink Managed Service for Apache Flinkは、レポート間隔ごとにメトリックサンプルを5つ公開します。 | アプリケーション | このメトリックスを使用して、アプリケーションの CPU 使用率の最小値、平均値、最大値を監視できます。このCPUUtilizationメトリックでは、コンテナ内で実行されている TaskManager JVM プロセスの CPU 使用率のみが考慮されます。 | 
| containerCPUUtilization | パーセンテージ | Flink アプリケーションクラスター内のタスクマネージャーコンテナー全体の CPU 使用率。たとえば、タスクマネージャーが 5 つある場合、それに応じて TaskManager コンテナが 5 つあり、Apache Flink 用マネージドサービスは 1 分のレポート間隔ごとに、このメトリックのサンプルを 2 5 個公開します。たとえば、タスクマネージャが5つある場合、それに対応してTaskManagerコンテナも5つあり、Managed Service for Apache Flinkは、1分間のレポート間隔ごとにこのメトリックのサンプルを2\$15発行します。 | アプリケーション | コンテナごとに次のように計算されます。 *コンテナが消費した合計 CPU 時間 (秒単位) \$1 100/コンテナの CPU 上限 (CPU/秒)* この`CPUUtilization`メトリックでは、コンテナ内で実行されている TaskManager JVM プロセスの CPU 使用率のみが考慮されます。同じコンテナ内で JVM の外部で実行されているほかのコンポーネントもあります。この`containerCPUUtilization`メトリックにより、コンテナでの CPU の消耗とそれに起因する障害に関するすべてのプロセスを含めて、より包括的な全体像を把握できます。  | 
| containerMemoryUtilization | パーセンテージ | Flink アプリケーションクラスター内のタスクマネージャーコンテナー全体のメモリー使用率。たとえば、タスクマネージャーが 5 つある場合、それに応じて TaskManager コンテナが 5 つあり、Apache Flink 用マネージドサービスは 1 分のレポート間隔ごとに、このメトリックのサンプルを 2 5 個公開します。たとえば、タスクマネージャが5つある場合、それに対応してTaskManagerコンテナも5つあり、Managed Service for Apache Flinkは、1分間のレポート間隔ごとにこのメトリックのサンプルを2\$15発行します。 | アプリケーション | コンテナごとに次のように計算されます。 *コンテナのメモリ使用量 (バイト) \$1 100/ポッドデプロイメント仕様に基づくコンテナのメモリ上限 (バイト単位)* `HeapMemoryUtilization`　と　`ManagedMemoryUtilzations`　メトリクスは、TaskManager JVMのヒープメモリ使用量やマネージド・メモリ（[RocksDBステートバックエンド](https://flink.apache.org/2021/01/18/rocksdb.html#:~:text=Conclusion-,The%20RocksDB%20state%20backend%20(i.e.%2C%20RocksDBStateBackend)%20is%20one%20of,with%20exactly%2Donce%20processing%20guarantees.)のようなネイティブ・プロセスのJVM外のメモリ使用量）のような特定のメモリ・メトリクスのみを考慮します。この`containerMemoryUtilization`メトリックには、ワーキングセットメモリを含めることで全体像を把握できるため、メモリの総消費量を追跡しやすくなります。メモリが使い果たされると、TaskManager ポッドの`Out of Memory Error`に反映されます。  | 
| containerDiskUtilization | パーセンテージ | Flink アプリケーションクラスター内のタスクマネージャーコンテナー全体のディスク使用率。たとえば、タスクマネージャーが 5 つある場合、それに応じて TaskManager コンテナが 5 つあり、Apache Flink 用マネージドサービスは 1 分のレポート間隔ごとに、このメトリックのサンプルを 2 5 個公開します。たとえば、タスクマネージャが5つある場合、それに対応してTaskManagerコンテナも5つあり、Managed Service for Apache Flinkは、1分間のレポート間隔ごとにこのメトリックのサンプルを2\$15発行します。 | アプリケーション | コンテナごとに次のように計算されます。 *ディスク使用量 (バイト) \$1 100/コンテナのディスク上限 (バイト)* コンテナの場合、コンテナのルートボリュームが設定されているファイルシステムの使用率を表します。  | 
| currentInputWatermark | ミリ秒 | このアプリケーション、オペレータ、タスク、スレッドが受け取った最後のウォーターマーク | アプリケーション、オペレータ、タスク、並列処理 | このレコードは、入力が 2 つあるディメンションでのみ出力されます。これは最後に受信したウォーターマークの最小値です。 | 
| currentOutputWatermark | ミリ秒 | このアプリケーション、オペレータ、タスク、スレッドが最後に出力したウォーターマーク | アプリケーション、オペレータ、タスク、並列処理 |  | 
| downtime [廃止] | ミリ秒 | 現在障害または回復中のジョブの場合は、その停止中に経過した時間です。 | アプリケーション | この指標は、ジョブが失敗または回復している間に経過した時間を測定します。このメトリックは、実行中のジョブの場合は 0 を返し、完了したジョブの場合は-1を返します。このメトリクスが0または-1でない場合は、アプリケーションの Apache Flink ジョブが実行に失敗したことを示します。**Flink 2.2 では廃止されました。**`failingTime` 代わりに、`restartingTime`、`cancellingTime`、および/または を使用します。 | 
| failingTime | ミリ秒 | アプリケーションが失敗状態で費やした時間 (ミリ秒単位）。このメトリクスを使用して、アプリケーションの障害をモニタリングし、アラートをトリガーします。 | アプリケーション、フロー | Flink 2.2 から入手できます。廃止されたdowntimeメトリクスの一部を置き換えます。 | 
| heapMemoryUtilization | パーセンテージ | タスクマネージャー全体のヒープメモリ使用率。たとえば、タスクマネージャーが5つある場合、Apache Flink Managed Service for Apache Flinkは、レポート間隔ごとにメトリックサンプルを5つ公開します。 | アプリケーション | このメトリクスを使用して、アプリケーションのヒープメモリ使用率の最小値、平均値、最大値を監視できます。HeapMemoryUtilizationはTaskManagerJVMのヒープメモリ使用量などの特定のメモリメトリックのみを考慮します。 | 
| idleTimeMsPerSecond\$1 | ミリ秒 | このタスクまたはオペレータが 1 秒あたりにアイドル状態 (処理するデータがない) の時間 (ミリ秒単位)。アイドル時間にはバック プレッシャーの時間は含まれないため、タスクにバック プレッシャーがかかっている場合、そのタスクはアイドルではありません。 | タスク、オペレータ、並列度 | \$1Flink バージョン 1.13 を実行しているManaged Service for Apache Flinkアプリケーションでのみ使用できます。 これらのメトリックはアプリケーションのボトルネックを特定することに役立ちます。 | 
| lastCheckpointSize | バイト | 最後のチェックポイントの合計サイズ | アプリケーション | このメトリックを使用して、実行中のアプリケーションストレージの使用率を判断できます。このメトリックの値が増加している場合は、メモリリークやボトルネックなど、アプリケーションに問題がある可能性があります。 | 
| lastCheckpointDuration | ミリ秒 | 最後のチェックポイントを完了するまでにかかった時間 | アプリケーション | このメトリックは、最新のチェックポイントを完了するまでにかかった時間を測定します。このメトリックの値が増加している場合は、メモリリークやボトルネックなど、アプリケーションに問題がある可能性があります。場合によっては、チェックポイントを無効にすることでこの問題を解決できます。 | 
| managedMemoryUsed\$1 | バイト | 現在使用中のメモリの量。 | アプリケーション、オペレータ、タスク、並列処理 | \$1Flink バージョン 1.13 を実行しているManaged Service for Apache Flinkアプリケーションでのみ使用できます。 これは Flink が Java ヒープ外で管理するメモリに関するものです。RocksDB のステートバックエンドに使用され、アプリケーションでも利用できます。 | 
| managedMemoryTotal\$1 | バイト | メモリの合計量。 | アプリケーション、オペレータ、タスク、並列処理 | \$1Flink バージョン 1.13 を実行しているManaged Service for Apache Flinkアプリケーションでのみ使用できます。 これは Flink が Java ヒープ外で管理するメモリに関するものです。RocksDB のステートバックエンドに使用され、アプリケーションでも利用できます。この　`ManagedMemoryUtilzations`　メトリックは、Managed Memory ([RocksDB State Backend](https://flink.apache.org/2021/01/18/rocksdb.html#:~:text=Conclusion-,The%20RocksDB%20state%20backend%20(i.e.%2C%20RocksDBStateBackend)%20is%20one%20of,with%20exactly%2Donce%20processing%20guarantees.)のようなネイティブプロセスの JVM 外のメモリ使用量) のような特定のメモリーメトリクスのみを考慮します。 | 
| managedMemoryUtilization\$1 | パーセンテージ | 管理対象メモリー使用量/管理メモリー合計によって導出されます。 | アプリケーション、オペレータ、タスク、並列処理 | \$1Flink バージョン 1.13 を実行しているManaged Service for Apache Flinkアプリケーションでのみ使用できます。 これは Flink が Java ヒープ外で管理するメモリに関するものです。RocksDB のステートバックエンドに使用され、アプリケーションでも利用できます。 | 
| numberOfFailedCheckpoints | カウント | チェックポイントが失敗した回数。 | アプリケーション | このメトリックを使用して、アプリケーションの状態と進行状況を監視できます。スループットや権限の問題など、アプリケーションの問題が原因でチェックポイントが失敗することがあります。 | 
| numRecordsIn\$1 | カウント | このアプリケーション、オペレータ、またはタスクが受信したレコードの総数。 | アプリケーション、オペレータ、タスク、並列処理 | \$1一定期間 (秒/分) にわたって SUM 統計を適用するには: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/managed-flink/latest/java/metrics-dimensions.html) メトリックのレベルは、このメトリックがアプリケーション全体、特定のオペレータ、または特定のタスクが受信したレコードの総数を測定するかどうかを指定します。 | 
| numRecordsInPerSecond\$1 | Count/Second | このアプリケーション、オペレータ、またはタスクが 1 秒あたりに受信したレコードの総数です。 | アプリケーション、オペレータ、タスク、並列処理 | \$1一定期間 (秒/分) にわたって SUM 統計を適用するには: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/managed-flink/latest/java/metrics-dimensions.html) メトリックのレベルは、このメトリックがアプリケーション全体、特定のオペレータ、または特定のタスクが 1 秒あたりに受信したレコードの総数を測定するかどうかを指定します。 | 
| numRecordsOut\$1 | カウント | このアプリケーション、オペレータ、またはタスクが送信したレコードの総数。 | アプリケーション、オペレータ、タスク、並列処理 |  \$1一定期間 (秒/分) にわたって SUM 統計を適用するには: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/managed-flink/latest/java/metrics-dimensions.html) メトリックのレベルは、このメトリックがアプリケーション全体、特定のオペレータ、または特定のタスクが発行したレコードの総数を測定するかどうかを指定します。 | 
| numLateRecordsDropped\$1 | カウント | アプリケーション、オペレータ、タスク、並列処理 |  | \$1一定期間 (秒/分) にわたって SUM 統計を適用するには: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/managed-flink/latest/java/metrics-dimensions.html) このオペレータまたはタスクが遅れたために減少したレコードの数。 | 
| numRecordsOutPerSecond\$1 | Count/Second | このアプリケーション、オペレータ、またはタスクが 1 秒あたりに送信したレコードの総数。 | アプリケーション、オペレータ、タスク、並列処理 |  \$1一定期間 (秒/分) にわたって SUM 統計を適用するには: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/managed-flink/latest/java/metrics-dimensions.html) メトリックのレベルは、このメトリックがアプリケーション全体、特定のオペレータ、または特定のタスクが 1 秒あたりに送信したレコードの総数を測定するかどうかを指定します。 | 
| oldGenerationGCCount | カウント | すべてのタスクマネージャーで発生した古いガベージコレクション操作の総数。 | アプリケーション |  | 
| oldGenerationGCTime | ミリ秒 | 古いガベージコレクション操作の実行にかかった合計時間。 | アプリケーション | このメトリックを使用して、ガベージコレクションの合計時間、平均時間、最大時間を監視できます。 | 
| threadsCount | カウント | アプリケーションが使用したライブスレッドの総数。 | アプリケーション | このメトリックは、アプリケーションコードが使用するスレッド数を測定します。これはアプリケーションの並列処理とは異なります。 | 
| cancellingTime | ミリ秒 | アプリケーションがキャンセル状態で費やした時間 (ミリ秒単位）。このメトリクスを使用して、アプリケーションのキャンセルオペレーションをモニタリングします。 | アプリケーション、フロー | Flink 2.2 から入手できます。廃止されたdowntimeメトリクスの一部を置き換えます。 | 
| restartingTime | ミリ秒 | アプリケーションが再起動状態で費やした時間 (ミリ秒単位）。このメトリクスを使用して、アプリケーションの再起動動作をモニタリングします。 | アプリケーション、フロー | Flink 2.2 から入手できます。廃止されたdowntimeメトリクスの一部を置き換えます。 | 
| runningTime | ミリ秒 | アプリケーションが中断なく実行されていた時間 (ミリ秒単位）。廃止されたuptimeメトリクスを置き換えます。 | アプリケーション、フロー | Flink 2.2 から入手できます。廃止されたuptimeメトリクスの直接の置き換えとして を使用します。 | 
| uptime [廃止] | ミリ秒 | ジョブが中断されずに実行された時間。 | アプリケーション | この指標を使用して、ジョブが正常に実行されているかどうかを判断できます。このメトリックは、完了したジョブに対して -1 を返します。**Flink 2.2 では廃止されました。**代わりに `runningTime` を使用します。 | 
| jobmanagerFileDescriptorsMax | カウント | JobManager で使用できるファイル記述子の最大数。 | アプリケーション、フロー、ホスト | このメトリクスを使用して、ファイル記述子の容量をモニタリングします。 | 
| jobmanagerFileDescriptorsOpen | カウント | JobManager の開いているファイル記述子の現在の数。 | アプリケーション、フロー、ホスト | このメトリクスを使用して、ファイル記述子の使用状況をモニタリングし、リソースの枯渇の可能性を検出します。 | 
| taskmanagerFileDescriptorsMax | カウント | 各 TaskManager で使用できるファイル記述子の最大数。 | アプリケーション、フロー、ホスト、tm\$1id | このメトリクスを使用して、ファイル記述子の容量をモニタリングします。 | 
| taskmanagerFileDescriptorsOpen | カウント | 各 TaskManager の開いているファイル記述子の現在の数。 | アプリケーション、フロー、ホスト、tm\$1id | このメトリクスを使用して、ファイル記述子の使用状況をモニタリングし、リソースの枯渇の可能性を検出します。 | 
| KPUs\$1 | カウント | アプリケーションが使用した KPU の総数。 | アプリケーション | \$1このメトリクスは、課金期間 (1 時間) ごとに 1 件のサンプルを受け取ります。時間の経過に伴う KPU の数を可視化するには、最低 1 時間の区切りで MAX または AVG を使用します。 KPU 数には `orchestration` KPU が含まれます。詳細については、「[Managed Service for Apache Flink の料金](https://aws.amazon.com/managed-service-apache-flink/pricing/)」を参照してください | 

**Flink 2.2 メトリクス移行ガイダンス**  
**fullRestarts からの移行:** `fullRestarts`メトリクスは Flink 2.2 で削除されました。代わりに `numRestarts`メトリクスを使用します。`numRestarts` メトリクスは同等の機能を提供し、しきい値の調整を必要とせずに CloudWatch アラームの直接置き換えとして使用できます。  
**アップタイムからの移行:** `uptime`メトリクスは Flink 2.2 では廃止され、今後のリリースで削除されます。代わりに `runningTime`メトリクスを使用します。`runningTime` メトリクスは同等の機能を提供し、しきい値の調整を必要とせずに CloudWatch アラームの直接置き換えとして使用できます。  
**ダウンタイムからの移行:** `downtime`メトリクスは Flink 2.2 では廃止され、今後のリリースで削除されます。モニタリングする内容に応じて、次のメトリクスを 1 つ以上使用します。  
`restartingTime`: アプリケーションの再起動にかかった時間をモニタリングする
`cancellingTime`: アプリケーションのキャンセルにかかった時間をモニタリングする
`failingTime`: 失敗状態で費やされた時間をモニタリングする

## Kinesis Data Streams コネクタメトリクス
<a name="metrics-dimensions-stream"></a>

AWS は、以下に加えて Kinesis Data Streams のすべてのレコードを発行します。


| メトリクス | 単位 | 説明 | レベル | 使用に関する注意事項 | 
| --- | --- | --- | --- | --- | 
| millisbehindLatest | ミリ秒 | コンシューマーがストリームの先頭から遅れているミリ秒数は、コンシューマーが現在時刻からどれだけ遅れているかを示します。 | アプリケーション (Stream 用)、並列処理 (ShardId 用) | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/managed-flink/latest/java/metrics-dimensions.html)  | 

**注記**  
`bytesRequestedPerFetch` メトリクスは Flink AWS コネクタバージョン 6.0.0 (Flink 2.2 と互換性のある唯一のコネクタバージョン) で削除されました。Flink 2.2 で使用できる Kinesis Data Streams コネクタメトリクスは のみです`millisBehindLatest`。

## Amazon MSK コネクタメトリクス
<a name="metrics-dimensions-msk"></a>

AWS は、以下に加えて、Amazon MSK のすべてのレコードを発行します。


| メトリクス | 単位 | 説明 | レベル | 使用に関する注意事項 | 
| --- | --- | --- | --- | --- | 
| currentoffsets | 該当なし | 各パーティションのコンシューマーの現在の読み取りオフセット。特定のパーティションのメトリックは、トピック名とパーティション ID で指定できます。 | アプリケーション (Topic用)、並列処理 (PartitionID 用) |  | 
| commitsFailed | 該当なし | オフセットのコミットとチェックポイントが有効になっている場合、Kafka へのオフセット コミットの失敗の合計数  | アプリケーション、オペレータ、タスク、並列処理 | オフセットを Kafka にコミットすることは、コンシューマの進行状況を公開するための手段にすぎないため、コミットの失敗は Flink のチェックポイントが設定されたパーティション オフセットの完全性に影響しません。 | 
| commitsSucceeded | 該当なし | オフセットのコミットとチェックポイント設定が有効な場合、Kafka へのオフセット コミットが成功した合計数。 | アプリケーション、オペレータ、タスク、並列処理 |  | 
| committedoffsets | 該当なし | 最後に正常にコミットされたオフセットは、パーティションごとに Kafka に送信されます。特定のパーティションのメトリックは、トピック名とパーティション ID で指定できます。 | アプリケーション (Topic用)、並列処理 (PartitionID 用) |  | 
| records\$1lag\$1max | カウント | このウィンドウ内の任意のパーティションのレコード数に関する最大ラグ | アプリケーション、オペレータ、タスク、並列処理 |  | 
| bytes\$1consumed\$1rate | バイト | トピック用に消費された1秒あたりの平均バイト数 | アプリケーション、オペレータ、タスク、並列処理 |  | 

## Apache Zeppelin メトリクス
<a name="metrics-dimensions-zeppelin"></a>

Studio ノートブックの場合、 はアプリケーションレベルで次のメトリクスを AWS 出力します: `KPUs`、`cpuUtilization`、`heapMemoryUtilization`、`oldGenerationGCTime`、`oldGenerationGCCount`、および `threadCount`。さらに、アプリケーションレベルで次の表に示すようなメトリクスを出力します。


****  

| メトリクス | 単位 | 説明 | Prometheus 名 | 
| --- | --- | --- | --- | 
| zeppelinCpuUtilization | パーセンテージ | Apache Zeppelin サーバーの CPU 使用率の全体的パーセンテージ。 | process\$1cpu\$1usage | 
| zeppelinHeapMemoryUtilization | パーセンテージ | Apache Zeppelin サーバーのヒープメモリ使用率の全体的パーセンテージ。 | jvm\$1memory\$1used\$1bytes | 
| zeppelinThreadCount | カウント | Apache Zeppelin サーバーが使用しているライブスレッドの総数。 | jvm\$1threads\$1live\$1threads | 
| zeppelinWaitingJobs | カウント | キューに入っていて 1 つのスレッドを待っている Apache Zeppelin ジョブの数。 | jetty\$1threads\$1jobs | 
| zeppelinServerUptime | 秒 | サーバーが稼働していた合計時間。 | process\$1uptime\$1seconds | 

# CloudWatch メトリクスを表示する
<a name="metrics-dimensions-viewing"></a>

Amazon CloudWatch コンソールを使用して、スポットフリートの CloudWatch メトリクスを表示できます AWS CLI。

**CloudWatch コンソールを使用してメトリクスを表示するには**

1. CloudWatch コンソール ([https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)) を開きます。

1. ナビゲーションペインで [**Metrics (メトリクス)**] を選択してください。

1. Managed Service for Apache Flinkの[**CloudWatch Metrics by Category**] ペインで、メトリクスカテゴリを選択します。

1. 上部のペインで、スクロールするとメトリクスの詳細なリストが表示されます。

**を使用してメトリクスを表示するには AWS CLI**
+ コマンドプロンプトで、次のコマンドを使用します。

  ```
  1. aws cloudwatch list-metrics --namespace "AWS/KinesisAnalytics" --region region
  ```

# CloudWatch メトリクスレポートレベルを設定する
<a name="cloudwatch-logs-levels"></a>

アプリケーションが作成するアプリケーションメトリクスのレベルを制御できます。Managed Service for Apache Flink は、以下のメトリクスレベルをサポートしています。
+ **アプリケーション：**アプリケーションは各アプリケーションの最高レベルのメトリックのみを報告します。Managed Service for Apache Flinkのメトリックは、デフォルトではアプリケーションレベルで公開されます。
+ **タスク:**アプリケーションは、1秒あたりにアプリケーションに出入りするレコード数など、タスクメトリックレポートレベルで定義されたメトリックについて、タスク固有のメトリックディメンションをレポートします。
+ **オペレータ:**アプリケーションは、オペレータメトリックレポートレベルで定義されたメトリック（各フィルタまたはマップ操作のメトリックスなど）について、オペレータ固有のメトリックディメンションをレポートします。
+ **並列処理:**アプリケーションは各実行スレッドのレポートについて　`Task`　レベルと　`Operator`　レベルメトリクスを報告します。このレポートレベルはコストがかかりすぎたため、並列処理が64を超えるアプリケーションには推薦されません。
**注記**  
サービスが生成するメトリックデータの量が多いため、このメトリックレベルはトラブルシューティングにのみ使用する必要があります。このメトリック レベルはCLIでのみ設定できます。このメトリックレベルはコンソールでは利用できない。

デフォルトレベルは**アプリケーション**です。アプリケーションは現在のレベルとすべてのそれより高いレベルのメトリクスを報告します。例えば、レポートレベルが**オペレータ**に設定されている場合、アプリケーションは**アプリケーション**、**タスク**、**オペレーター**のメトリックをレポートします。

[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) アクションの `MonitoringConfiguration` パラメータまたは [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) アクションの `MonitoringConfigurationUpdate` パラメータを使用して 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)アクションのリクエストはCloudWatch メトリクスのレポートレベルを**タスク**に設定しています。

```
{
   "ApplicationName": "MyApplication",  
   "CurrentApplicationVersionId": 4,
   "ApplicationConfigurationUpdate": { 
      "FlinkApplicationConfigurationUpdate": { 
         "MonitoringConfigurationUpdate": { 
            "ConfigurationTypeUpdate": "CUSTOM",
            "MetricsLevelUpdate": "TASK"
         }
      }
   }
}
```

[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) アクションの `LogLevel` パラメータまたは [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) アクションの `LogLevelUpdate` パラメータを使用してロギングレベルを設定することができます。次のログレベルから選択できます。
+ `ERROR`: 回復可能性のあるエラーイベントをログに記録します。
+ `WARN`: エラーの原因となる可能性のある警告イベントをログに記録します。
+ `INFO`： 情報イベントをログに記録します。
+ `DEBUG`： 一般的なデバッグイベントをログに記録します。

Log4j のロギングレベルの詳細については、[Apache](https://logging.apache.org/log4j/2.x/) Log4j ドキュメントの[カスタムログレベル](https://logging.apache.org/log4j/2.x/manual/customloglevels.html)を参照してください。

# Amazon Managed Service for Apache Flink でカスタムメトリクスを使用する
<a name="monitoring-metrics-custom"></a>

Managed Service for Apache Flinkはリソースの使用量とスループットのメトリックスを含む19のメトリクスをCloudWatch に公開します。さらに、イベントの処理や外部リソースへのアクセスなど、アプリケーション固有のデータを追跡するための独自のメトリクスを作成できます。

**Topics**
+ [仕組み](#monitoring-metrics-custom-howitworks)
+ [マッピングクラスを作成するための例を表示する](#monitoring-metrics-custom-examples)
+ [カスタムメトリクスを表示する](#monitoring-metrics-custom-examples-viewing)

## 仕組み
<a name="monitoring-metrics-custom-howitworks"></a>

Managed Service for Apache Flinkのカスタムメトリクスは Apache Flink メトリックシステムを使用します。Managed Service Flink メトリクスには、以下の属性を持っています。
+ **タイプ:**メトリックのタイプは、データをどのように測定することを説明して報告します。Apache Flink メトリックのタイプには、カウント、ゲージ、ヒストグラム、メーターなどがあります。Apache Flink メトリクスタイプの詳細について、[メトリクスタイプ](https://nightlies.apache.org/flink/flink-docs-release-1.15/monitoring/metrics.html#metric-types)を参照してください。
**注記**  
AWS CloudWatch Metrics は、ヒストグラム Apache Flink メトリクスタイプをサポートしていません。CloudWatch は、カウント、ゲージ、メータータイプの Apache Flink メトリクスのみを表示できます。
+ **スコープ：**メトリクスのスコープは、その識別子と、メトリックスが CloudWatch にどのように報告されるかを示す一連のキーと値のペアで構成されます。メトリクスの ID は次で構成されます。
  + メトリクスが報告されるレベルを示すシステムスコープ (例：オペレーター)。
  + ユーザー変数やメトリックグループ名などの属性を定義するユーザースコープ。これらの属性は[https://ci.apache.org/projects/flink/flink-docs-master/api/java/org/apache/flink/metrics/MetricGroup.html#addGroup-java.lang.String-java.lang.String-](https://ci.apache.org/projects/flink/flink-docs-master/api/java/org/apache/flink/metrics/MetricGroup.html#addGroup-java.lang.String-java.lang.String-)または[https://ci.apache.org/projects/flink/flink-docs-master/api/java/org/apache/flink/metrics/MetricGroup.html#addGroup-java.lang.String-](https://ci.apache.org/projects/flink/flink-docs-master/api/java/org/apache/flink/metrics/MetricGroup.html#addGroup-java.lang.String-)によって定義されます。

  スコープの詳細については、[スコップ](https://nightlies.apache.org/flink/flink-docs-release-1.15/monitoring/metrics.html#scope)を参照してください。

Apache Flink メトリクスの詳細については、[Apache Flink ドキュメント](https://nightlies.apache.org/flink/flink-docs-release-1.15/)の[メトリック](https://nightlies.apache.org/flink/flink-docs-release-1.15/monitoring/metrics.html)を参照してください。

Managed Service for Apache Flinkでカスタムメトリクスを作成するには、`RichFunction`を拡張する任意のユーザー関数から[https://nightlies.apache.org/flink/flink-docs-release-1.15/api/java/org/apache/flink/api/common/functions/RuntimeContext.html#getMetricGroup--](https://nightlies.apache.org/flink/flink-docs-release-1.15/api/java/org/apache/flink/api/common/functions/RuntimeContext.html#getMetricGroup--)を呼び出して、Apache Flink メトリックシステムにアクセスできます。このメソッドは、カスタムメトリクスの作成と登録に使用できる[MetricGroup](https://nightlies.apache.org/flink/flink-docs-release-1.15/api/java/org/apache/flink/metrics/MetricGroup.html)オブジェクトを返します。Managed Service for Apache Flink　は、グループキー`KinesisAnalytics`で作成されたすべてのメトリクスを CloudWatchにレポートします。定義したカスタムメトリクスには、次の特徴があります。
+ カスタムメトリックスにはメトリクス名とグループ名があります。これらの名前は、[Prometheus の命名規則](https://prometheus.io/docs/instrumenting/writing_exporters/#naming)に従って英数字で構成する必要があります。
+ ユーザースコープで定義した属性 (`KinesisAnalytics`メトリクスグループを除く)はCloudWatch ディメンションとして公開されます。
+ カスタムメトリックスはデフォルトで　`Application`　レベルで公開されます。
+ アプリケーションの監視レベルに基づいて、ディメンション (タスク/オペレーター/並列処理) がメトリックスに追加されます。[CreateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_CreateApplication.html) アクションの [MonitoringConfiguration](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_MonitoringConfiguration.html) パラメータ、または [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html) アクションの [MonitoringConfigurationUpdate](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_MonitoringConfigurationUpdate.html) パラメータを使用してアプリケーションのモニタリングレベルを設定します。

## マッピングクラスを作成するための例を表示する
<a name="monitoring-metrics-custom-examples"></a>

以下のコード例は、カスタムメトリックを作成および増加させるマッピングクラスを作成する方法と、そのマッピングクラスを `DataStream` オブジェクトに追加してアプリケーションに実装する方法を示しています。

### レコードカウントのカスタムメトリック
<a name="monitoring-metrics-custom-examples-recordcount"></a>

以下のコード例は、データストリーム内のレコードをカウントするメトリクス (`numRecordsIn`メトリクスと同じ機能)を作成するマッピングクラスの作成方法を示しています。

```
    private static class NoOpMapperFunction extends RichMapFunction<String, String> {
        private transient int valueToExpose = 0;
        private final String customMetricName;
 
        public NoOpMapperFunction(final String customMetricName) {
            this.customMetricName = customMetricName;
        }
 
        @Override
        public void open(Configuration config) {
            getRuntimeContext().getMetricGroup()
                    .addGroup("KinesisAnalytics")
                    .addGroup("Program", "RecordCountApplication")
                    .addGroup("NoOpMapperFunction")
                    .gauge(customMetricName, (Gauge<Integer>) () -> valueToExpose);
        }
 
        @Override
        public String map(String value) throws Exception {
            valueToExpose++;
            return value;
        }
    }
```

前の例で、アプリケーションが処理するレコードごとに`valueToExpose`変数はインクリメントされます。

マッピングクラスを定義したら、マップを実装するアプリケーション内ストリームを作成します。

```
DataStream<String> noopMapperFunctionAfterFilter =
    kinesisProcessed.map(new NoOpMapperFunction("FilteredRecords"));
```

このアプリケーションの完全なコードについては、[レコードカウント:カスタムメトリックアプリケーション](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/java/CustomMetrics/RecordCount)を参照してください。

### ワードカウントのカスタムメトリック
<a name="monitoring-metrics-custom-examples-wordcount"></a>

次のコード例は、データストリーム内の単語数をカウントするメトリクスを作成するマッピングクラスを作成する方法を示しています。

```
private static final class Tokenizer extends RichFlatMapFunction<String, Tuple2<String, Integer>> {
     
            private transient Counter counter;
     
            @Override
            public void open(Configuration config) {
                this.counter = getRuntimeContext().getMetricGroup()
                        .addGroup("KinesisAnalytics")
                        .addGroup("Service", "WordCountApplication")
                        .addGroup("Tokenizer")
                        .counter("TotalWords");
            }
     
            @Override
            public void flatMap(String value, Collector<Tuple2<String, Integer>>out) {
                // normalize and split the line
                String[] tokens = value.toLowerCase().split("\\W+");
     
                // emit the pairs
                for (String token : tokens) {
                    if (token.length() > 0) {
                        counter.inc();
                        out.collect(new Tuple2<>(token, 1));
                    }
                }
            }
        }
```

前の例では、アプリケーションが処理する単語ごとに`counter`変数はインクリメントされます。

マッピングクラスを定義したら、マップを実装するアプリケーション内ストリームを作成します。

```
// Split up the lines in pairs (2-tuples) containing: (word,1), and
// group by the tuple field "0" and sum up tuple field "1"
DataStream<Tuple2<String, Integer>> wordCountStream = input.flatMap(new Tokenizer()).keyBy(0).sum(1);
     
// Serialize the tuple to string format, and publish the output to kinesis sink
wordCountStream.map(tuple -> tuple.toString()).addSink(createSinkFromStaticConfig());
```

このアプリケーションの完全なコードについては、[ワードカウント:カスタムメトリック](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/java/CustomMetrics/WordCount)を参照してください。

## カスタムメトリクスを表示する
<a name="monitoring-metrics-custom-examples-viewing"></a>

アプリケーションのカスタムメトリックスは、**AWS/KinesisAnalytics**ダッシュボードの CloudWatch Metrics コンソールの**アプリケーション**メトリクスグループに表示されます。

# Amazon Managed Service for Apache Flink で CloudWatch アラームを使用する
<a name="monitoring-metrics-alarms"></a>

Amazon CloudWatchメトリックアラームを使用して、指定した期間にわたってCloudWatchメトリックを監視することができる。アラームは、複数の期間にわたる閾値に対するメトリックまたはメートルの値に基づいて、1つまたは複数のアクションを実行します。例えば、アラームは Amazon Simple Notiﬁcation Service (Amazon SNS) トピックに通知を送信します。

CloudWatch アラームの詳細については、[Amazon CloudWatchアラームの使用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)を参照してください。

## 推奨アラームを確認する
<a name="monitoring-metrics-alarms-recommended"></a>

このセクションには、Managed Service for Apache Flinkアプリケーションをモニタリングするための推薦アラームが含まれています。

この表には推奨されるアラームが説明されており、次のセクションがあります。
+ **メトリック表現：**しきい値に対してテストするメトリックまたはメトリック式。
+ **統計:**メトリックのチェックに使用される統計。たとえば、**平均**です。
+ **しきい値：**このアラームを使用するには、期待されるアプリケーションパフォーマンスの上限を定義するしきい値を決定する必要があります。このしきい値は、通常の状態でアプリケーションを監視して決定する必要があります。
+ **説明：**このアラームをトリガーする可能性のある原因と、この状態に対して考えられる解決方法。


| メトリクス式 | 統計) | Threshold | 説明 | 
| --- |--- |--- |--- |
| ダウンタイム > 0 | Average | 0 |  A downtime greater than zero indicates that the application has failed. If the value is larger than 0, the application is not processing any data. Recommended for all applications. The ダウンタイム metric measures the duration of an outage. A downtime greater than zero indicates that the application has failed. For troubleshooting, see [アプリケーションが再起動している](troubleshooting-rt-restarts.md). | 
| レート (失敗したチェックポイントの数) > 0 | Average | 0 | This metric counts the number of failed checkpoints since the application started. Depending on the application, it can be tolerable if checkpoints fail occasionally. But if checkpoints are regularly failing, the application is likely unhealthy and needs further attention. We recommend monitoring RATE(numberOfFailedCheckpoints) to alarm on the gradient and not on absolute values. Recommended for all applications. Use this metric to monitor application health and checkpointing progress. The application saves state data to checkpoints when it's healthy. Checkpointing can fail due to timeouts if the application isn't making progress in processing the input data. For troubleshooting, see [チェックポイントがタイムアウトしています。](troubleshooting-chk-timeout.md). | 
| Operator.numRecordsOutPerSecond < threshold | Average | The minimum number of records emitted from the application during normal conditions.  | Recommended for all applications. Falling below this threshold can indicate that the application isn't making expected progress on the input data. For troubleshooting, see [スループットが遅すぎる](troubleshooting-rt-throughput.md). | 
| records\$1lag\$1max\$1millisbehindLatest > threshold | Maximum | The maximum expected latency during normal conditions. | If the application is consuming from Kinesis or Kafka, these metrics indicate if the application is falling behind and needs to be scaled in order to keep up with the current load. This is a good generic metric that is easy to track for all kinds of applications. But it can only be used for reactive scaling, i.e., when the application has already fallen behind. Recommended for all applications. Use the records\$1lag\$1max metric for a Kafka source, or the millisbehindLatest for a Kinesis stream source. Rising above this threshold can indicate that the application isn't making expected progress on the input data. For troubleshooting, see [スループットが遅すぎる](troubleshooting-rt-throughput.md). | 
| lastCheckpointDuration > threshold | Maximum | The maximum expected checkpoint duration during normal conditions. | Monitors how much data is stored in state and how long it takes to take a checkpoint. If checkpoints grow or take long, the application is continuously spending time on checkpointing and has less cycles for actual processing. At some points, checkpoints may grow too large or take so long that they fail. In addition to monitoring absolute values, customers should also considering monitoring the change rate with RATE(lastCheckpointSize) and RATE(lastCheckpointDuration). If the lastCheckpointDuration continuously increases, rising above this threshold can indicate that the application isn't making expected progress on the input data, or that there are problems with application health such as backpressure. For troubleshooting, see [際限のない状態の成長](troubleshooting-rt-stateleaks.md). | 
| lastCheckpointSize > threshold | Maximum | The maximum expected checkpoint size during normal conditions. | Monitors how much data is stored in state and how long it takes to take a checkpoint. If checkpoints grow or take long, the application is continuously spending time on checkpointing and has less cycles for actual processing. At some points, checkpoints may grow too large or take so long that they fail. In addition to monitoring absolute values, customers should also considering monitoring the change rate with RATE(lastCheckpointSize) and RATE(lastCheckpointDuration). If the lastCheckpointSize continuously increases, rising above this threshold can indicate that the application is accumulating state data. If the state data becomes too large, the application can run out of memory when recovering from a checkpoint, or recovering from a checkpoint might take too long. For troubleshooting, see [際限のない状態の成長](troubleshooting-rt-stateleaks.md). | 
| heapMemoryUtilization > threshold | Maximum | This gives a good indication of the overall resource utilization of the application and can be used for proactive scaling unless the application is I/O bound. The maximum expected heapMemoryUtilization size during normal conditions, with a recommended value of 90 percent. | You can use this metric to monitor the maximum memory utilization of task managers across the application. If the application reaches this threshold, you need to provision more resources. You do this by enabling automatic scaling or increasing the application parallelism. For more information about increasing resources, see [アプリケーションスケーリングを実装する](how-scaling.md). | 
| cpuUtilization > threshold | Maximum | This gives a good indication of the overall resource utilization of the application and can be used for proactive scaling unless the application is I/O bound. The maximum expected cpuUtilization size during normal conditions, with a recommended value of 80 percent. | You can use this metric to monitor the maximum CPU utilization of task managers across the application. If the application reaches this threshold, you need to provision more resources You do this by enabling automatic scaling or increasing the application parallelism. For more information about increasing resources, see [アプリケーションスケーリングを実装する](how-scaling.md). | 
| threadsCount > threshold | Maximum | The maximum expected threadsCount size during normal conditions. | You can use this metric to watch for thread leaks in task managers across the application. If this metric reaches this threshold, check your application code for threads being created without being closed. | 
| (oldGarbageCollectionTime \$1 100)/60\$1000 over 1 min period') > threshold | Maximum | The maximum expected 古いガベージコレクション時間 duration. We recommend setting a threshold such that typical garbage collection time is 60 percent of the specified threshold, but the correct threshold for your application will vary. | If this metric is continually increasing, this can indicate that there is a memory leak in task managers across the application. | 
| RATE(oldGarbageCollectionCount)  > threshold | Maximum | The maximum expected oldGarbageCollectionCount under normal conditions. The correct threshold for your application will vary. | If this metric is continually increasing, this can indicate that there is a memory leak in task managers across the application. | 
| Operator.currentOutputWatermark - Operator.currentInputWatermark  > threshold | Minimum | The minimum expected watermark increment under normal conditions. The correct threshold for your application will vary. | If this metric is continually increasing, this can indicate that either the application is processing increasingly older events, or that an upstream subtask has not sent a watermark in an increasingly long time. | 

# CloudWatch Logs にカスタムメッセージを書き込む
<a name="cloudwatch-logs-writing"></a>

Managed Service for Apache Flinkアプリケーションの CloudWatch ログにカスタムメッセージを書き込むことができます。Apache[https://logging.apache.org/log4j/](https://logging.apache.org/log4j/)ライブラリまたは[https://www.slf4j.org/](https://www.slf4j.org/)ライブラリを使用します。

**Topics**
+ [Log4J を使用して CloudWatch Logs に書き込む](#cloudwatch-logs-writing-log4j)
+ [SLF4J を使用して CloudWatch Logs に書き込む](#cloudwatch-logs-writing-slf4j)

## Log4J を使用して CloudWatch Logs に書き込む
<a name="cloudwatch-logs-writing-log4j"></a>

1. 次の依存関係をアプリケーションの`pom.xml`ファイルに追加します。

   ```
   <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-api</artifactId>
       <version>2.6.1</version>
   </dependency>
   <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-core</artifactId>
       <version>2.6.1</version>
   </dependency>
   ```

1. ライブラリからオブジェクトを含めます。

   ```
   import org.apache.logging.log4j.Logger;
   ```

1. `Logger`オブジェクトをインスタンス化し、次のアプリケーションクラスを渡します。

   ```
   private static final Logger log = LogManager.getLogger.getLogger(YourApplicationClass.class);
   ```

1. `log.info`を使用してログに書き込みます。アプリケーションログには、多数のメッセージが書き込まれます。カスタムメッセージをフィルタリングしやすくするには、`INFO`アプリケーションログレベルを使用してください。

   ```
   log.info("This message will be written to the application's CloudWatch log");
   ```

アプリケーションは、次のようなメッセージを含むレコードをログに書き込みます。

```
{
  "locationInformation": "com.amazonaws.services.managed-flink.StreamingJob.main(StreamingJob.java:95)", 
  "logger": "com.amazonaws.services.managed-flink.StreamingJob", 
  "message": "This message will be written to the application's CloudWatch log", 
  "threadName": "Flink-DispatcherRestEndpoint-thread-2", 
  "applicationARN": "arn:aws:kinesisanalyticsus-east-1:123456789012:application/test", 
  "applicationVersionId": "1", "messageSchemaVersion": "1", 
  "messageType": "INFO" 
}
```

## SLF4J を使用して CloudWatch Logs に書き込む
<a name="cloudwatch-logs-writing-slf4j"></a>

1. 次の依存関係をアプリケーション `pom.xml` ファイルに追加します。

   ```
   <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
       <version>1.7.7</version>
       <scope>runtime</scope>
   </dependency>
   ```

1. ライブラリからのオブジェクトを含めます。

   ```
   import org.slf4j.Logger;
   import org.slf4j.LoggerFactory;
   ```

1. `Logger`オブジェクトをインスタンス化し、次のアプリケーションクラスを渡します。

   ```
   private static final Logger log = LoggerFactory.getLogger(YourApplicationClass.class);
   ```

1. `log.info`を使用してログに書き込みます。アプリケーションログには、多数のメッセージが書き込まれます。カスタムメッセージをフィルタリングしやすくするには、`INFO`アプリケーションログレベルを使用してください。

   ```
   log.info("This message will be written to the application's CloudWatch log");
   ```

アプリケーションは、次のようなメッセージを含むレコードをログに書き込みます。

```
{
  "locationInformation": "com.amazonaws.services.managed-flink.StreamingJob.main(StreamingJob.java:95)", 
  "logger": "com.amazonaws.services.managed-flink.StreamingJob", 
  "message": "This message will be written to the application's CloudWatch log", 
  "threadName": "Flink-DispatcherRestEndpoint-thread-2", 
  "applicationARN": "arn:aws:kinesisanalyticsus-east-1:123456789012:application/test", 
  "applicationVersionId": "1", "messageSchemaVersion": "1", 
  "messageType": "INFO" 
}
```

# を使用した Apache Flink API コールの Managed Service のログ記録 AWS CloudTrail
<a name="logging-using-cloudtrail"></a>

Managed Service for Apache Flink は AWS CloudTrail、Managed Service for Apache Flink のユーザー、ロール、または AWS サービスによって実行されたアクションを記録するサービスである と統合されています。CloudTrailはManaged Service for Apache Flinkのすべての API コールをイベントとしてキャプチャーします。キャプチャーされた呼び出しには、Managed Service for Apache Flink・コンソールの呼び出しと、Managed Service for Apache FlinkAPIオペレーションへのコード呼び出しが含まれます。追跡を作成すると、Managed Service for Apache Flinkのイベントを含むCloudTrail・イベントのAmazon S3バケットへの継続的な配信が有効になります。証跡を設定しない場合でも、CloudTrail コンソールの **[イベント履歴]** で最新のイベントを表示できます。CloudTrail によって収集された情報を使用して、Managed Service for Apache Flink に対して行われたリクエスト、リクエスト元の IP アドレス、リクエスト者、リクエストが行われた日時、および追加の詳細を確認することができます。

CloudTrail の詳細については、「[AWS CloudTrail ユーザーガイド](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)」を参照してください。

## CloudTrail における Managed Service for Apache Flink の情報
<a name="service-name-info-in-cloudtrail"></a>

CloudTrail は、 AWS アカウントの作成時にアカウントで有効になります。Managed Service for Apache Flink でアクティビティが発生すると、そのアクティビティはイベント**履歴**の他の AWS サービスイベントとともに CloudTrail イベントに記録されます。 AWS アカウントで最近のイベントを表示、検索、ダウンロードできます。詳細については、[CloudTrail イベント履歴でのイベントの表示](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)を参照してください。

Managed Service for Apache Flink のイベントなど、 AWS アカウントのイベントの継続的な記録については、証跡を作成します。*証跡*により、CloudTrail はログファイルを Amazon S3 バケットに配信できます。デフォルトでは、コンソールで証跡を作成すると、証跡はすべての AWS リージョンに適用されます。証跡は、 AWS パーティション内のすべてのリージョンからのイベントをログに記録し、指定した Amazon S3 バケットにログファイルを配信します。さらに、CloudTrail ログで収集されたイベントデータをさらに分析して処理するように他の AWS サービスを設定できます。詳細については、次を参照してください: 
+ [証跡の作成のための概要](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [CloudTrail がサポートするサービスと統合](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-aws-service-specific-topics.html#cloudtrail-aws-service-specific-topics-integrations)
+ [CloudTrail 用 Amazon SNS 通知の構成](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/getting_notifications_top_level.html)
+ [複数のリージョンから CloudTrail ログファイルを受け取る](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html)および[複数のアカウントから CloudTrail ログファイルを受け取る](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-receive-logs-from-multiple-accounts.html)

すべての Managed Service for Apache Flink のアクションは CloudTrail によって記録され、[Managed Service for Apache Flink APIreference](/managed-flink/latest/apiv2/Welcome.html)に文書化されています。例えば、`[CreateApplication](/managed-flink/latest/apiv2/API_CreateApplication.html)` および ` [UpdateApplication](/managed-flink/latest/apiv2/API_UpdateApplication.html)` の各アクションを呼び出すと、CloudTrail ログファイルにエントリが生成されます。

各イベントまたはログエントリには、リクエストの生成者に関する情報が含まれます。アイデンティティ情報は、以下を判別するのに役立ちます。
+ リクエストがルートまたは AWS Identity and Access Management (IAM) ユーザー認証情報を使用して行われたかどうか。
+ リクエストがロールまたはフェデレーションユーザーのテンポラリなセキュリティ認証情報を使用して行われたかどうか。
+ リクエストが別の AWS サービスによって行われたかどうか。

詳細については、「[CloudTrail userIdentity 要素](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html)」を参照してください。

## Managed Service for Apache Flink のログファイルエントリについて
<a name="understanding-service-name-entries"></a>

「トレイル」は、指定した Amazon S3 バケットにイベントをログファイルとして配信するように設定できます。CloudTrail のログファイルは、単一か複数のログエントリを含みます。イベントは、任意の出典からの単一のリクエストを表し、リクエストされたアクション、アクションの日時、リクエストパラメータなどに関する情報が含まれます。CloudTrail ログファイルは、パブリック API 呼び出しの順序付けられたスタックトレースではないため、特定の順序では表示されません。

次の例は、[AddApplicationCloudWatchLoggingOption](/managed-flink/latest/apiv2/API_AddApplicationCloudWatchLoggingOption.html) アクションと [DescribeApplication](/managed-flink/latest/apiv2/API_DescribeApplication.html) アクションを示す CloudTrail ログエントリを表しています。

```
{
    "Records": [
        {
            "eventVersion": "1.05",
            "userIdentity": {
                "type": "IAMUser",
                "principalId": "EX_PRINCIPAL_ID",
                "arn": "arn:aws:iam::012345678910:user/Alice",
                "accountId": "012345678910",
                "accessKeyId": "EXAMPLE_KEY_ID",
                "userName": "Alice"
            },
            "eventTime": "2019-03-07T01:19:47Z",
            "eventSource": "kinesisanlaytics.amazonaws.com",
            "eventName": "AddApplicationCloudWatchLoggingOption",
            "awsRegion": "us-east-1",
            "sourceIPAddress": "127.0.0.1",
            "userAgent": "aws-sdk-java/unknown-version Linux/x.xx",
            "requestParameters": {
                "applicationName": "cloudtrail-test",
                "currentApplicationVersionId": 1,
                "cloudWatchLoggingOption": {
                    "logStreamARN": "arn:aws:logs:us-east-1:012345678910:log-group:cloudtrail-test:log-stream:flink-cloudwatch"
                }
            },
            "responseElements": {
                "cloudWatchLoggingOptionDescriptions": [
                    {
                        "cloudWatchLoggingOptionId": "2.1",
                        "logStreamARN": "arn:aws:logs:us-east-1:012345678910:log-group:cloudtrail-test:log-stream:flink-cloudwatch"
                    }
                ],
                "applicationVersionId": 2,
                "applicationARN": "arn:aws:kinesisanalyticsus-east-1:012345678910:application/cloudtrail-test"
            },
            "requestID": "18dfb315-4077-11e9-afd3-67f7af21e34f",
            "eventID": "d3c9e467-db1d-4cab-a628-c21258385124",
            "eventType": "AwsApiCall",
            "apiVersion": "2018-05-23",
            "recipientAccountId": "012345678910"
        },
        {
            "eventVersion": "1.05",
            "userIdentity": {
                "type": "IAMUser",
                "principalId": "EX_PRINCIPAL_ID",
                "arn": "arn:aws:iam::012345678910:user/Alice",
                "accountId": "012345678910",
                "accessKeyId": "EXAMPLE_KEY_ID",
                "userName": "Alice"
            },
            "eventTime": "2019-03-12T02:40:48Z",
            "eventSource": "kinesisanlaytics.amazonaws.com",
            "eventName": "DescribeApplication",
            "awsRegion": "us-east-1",
            "sourceIPAddress": "127.0.0.1",
            "userAgent": "aws-sdk-java/unknown-version Linux/x.xx",
            "requestParameters": {
                "applicationName": "sample-app"
            },
            "responseElements": null,
            "requestID": "3e82dc3e-4470-11e9-9d01-e789c4e9a3ca",
            "eventID": "90ffe8e4-9e47-48c9-84e1-4f2d427d98a5",
            "eventType": "AwsApiCall",
            "apiVersion": "2018-05-23",
            "recipientAccountId": "012345678910"
        }
    ]
}
```