

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

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