Amazon CloudWatch を使用した Kinesis Client Library を監視する
Amazon Kinesis Data Streams の Kinesis Client Library (KCL) は、KCL アプリケーションの名前を名前空間として使用して、お客様に代わってカスタム Amazon CloudWatch メトリクスを発行します。CloudWatch console
KCL によって CloudWatch にアップロードされたメトリクスには、小額の課金が発生します。具体的には、Amazon CloudWatch カスタムメトリクスと Amazon CloudWatch API リクエストの料金が適用されます。詳細については、「Amazon CloudWatch 料金表
メトリクスと名前空間
メトリクスのアップロードに使用される名前空間は、KCL の起動時に指定されたアプリケーション名です。
メトリクスレベルとディメンション
CloudWatch にアップロードされるメトリクスを制御する 2 つのオプションがあります。
- メトリクスレベル
-
すべてのメトリクスに、個別のレベルが割り当てられます。メトリクスのレポートレベルを設定すると、レポートレベル以下の個別のレベルのメトリクスは CloudWatch に送信されません。このレベルとして、
NONE、SUMMARY、DETAILEDがあります。デフォルト設定はDETAILEDであり、すべてのメトリクスが CloudWatch に送信されます。レポートレベルNONEは、メトリクスがまったく送信されないことを意味します。各メトリクスに割り当てられるメトリクスの詳細については、メトリクスの一覧を参照してください。 - 有効なディメンション
-
すべての KCL メトリクスには、CloudWatch に送信されるディメンションが関連付けられています。KCL 2.x では、単一のデータストリームを処理するように KCL が設定されている場合、すべてのメトリクスディメンション (
Operation、ShardId、およびWorkerIdentifier) が、デフォルトで有効になっています。また、KCL 2.x では、単一のデータストリームを処理するように KCL が設定されている場合、Operationディメンションを無効にすることはできません。KCL 2.x では、KCL が複数のデータストリームを処理するように構成されている場合、すべてのメトリクスディメンション (Operation、ShardId、StreamId、およびWorkerIdentifier) は、デフォルトで有効になっています。また、KCL 2.x では、KCL が複数のデータストリームを処理するように設定されている場合、OperationとStreamIdディメンションを無効にすることはできません。StreamIdディメンションは、シャードごとのメトリクスでのみ使用できます。KCL 1.x では、デフォルトでは、
OperationおよびShardIdディメンションのみが有効であり、WorkerIdentifierディメンションは無効となります。KCL 1.x では、Operationディメンションを無効にすることはできません。CloudWatch メトリクスディメンションの詳細については、Amazon CloudWatch ユーザーガイドのAmazon CloudWatch の概念トピックのディメンションセクションを参照してください。
WorkerIdentifierディメンションが有効で、特定のKCL ワーカーが再起動するたびにワーカー ID プロパティに異なる値が使用される場合、新しいWorkerIdentifierディメンション値を持つ新しいメトリクスのセットが CloudWatch に送信されます。特定の KCL ワーカーの再起動で、WorkerIdentifierディメンションの値が同じである必要がある場合、各ワーカーの初期化中に同じワーカー ID 値を明示的に指定する必要があります。アクティブな各 KCL ワーカーのワーカー ID 値は、すべての KCL ワーカー間で一意である必要があります。
メトリクスの設定
メトリクスレベルと有効なディメンションは、KinesisClientLibConfiguration インスタンスを使用して設定でき、このインスタンスは KCL アプリケーションを起動するときにワーカーに渡されます。MultiLangDaemon の場合、metricsLevel プロパティおよび metricsEnabledDimensions プロパティは、MultiLangDaemon KCL アプリケーションを起動するために使用される .properties ファイルで指定できます。
メトリクスレベルには、NONE、SUMMARY、または DETAILED の 3 つの値のうち 1 つを割り当てることができます。有効なディメンションの値は、CloudWatch メトリクスで許可されているディメンションのリストを含むカンマ区切りの文字列である必要があります。KCL アプリケーションによって使用されるディメンションは、Operation、ShardId、および WorkerIdentifier です。
メトリクスの一覧
次の表には、範囲およびオペレーションによってグループ分けされた KCL メトリクスが一覧表示されています。
KCL アプリケーションあたりのメトリクス
これらのメトリクスは、Amazon CloudWatch 名前空間で定義されているように、アプリケーションの範囲内にあるすべての KCL ワーカーにわたって集約されます。
トピック
LeaseAssignmentManager
LeaseAssignmentManager オペレーションは、ワーカーへのリースの割り当ておよびリースの再分配を行い、ワーカーリソースの均等な利用を実現する役割を担います。このオペレーションのロジックには、リーステーブルからリース関連のメタデータを読み取り、ワーカーメトリクステーブルからメトリクスを取得し、リースの割り当てを実行する処理が含まれます。
| メトリクス | 説明 |
|---|---|
|
LeaseAndWorkerMetricsLoad.Time |
リース割り当てマネージャー (LAM) で、すべてのリースおよびワーカーメトリクスエントリを読み込むのに要した時間を示します。LAM は、KCL 3.x で導入された新しいリース割り当ておよび負荷分散アルゴリズムです。 メトリクスレベル: Detailed 単位: ミリ秒 |
| TotalLeases |
現在の KCL アプリケーションのリースの合計数。 メトリクスレベル: Summary 単位: カウント |
| NumWorkers |
KCL アプリケーションのワーカーの合計数。 メトリクスレベル: Summary 単位: カウント |
|
AssignExpiredOrUnassignedLeases.Time |
期限切れのリースをメモリ上で割り当てる処理に要した時間。 メトリクスレベル: Detailed 単位: ミリ秒 |
| LeaseSpillover |
ワーカーごとのリース数またはスループットの上限に達したために割り当てられなかったリースの数。 メトリクスレベル: Summary 単位: カウント |
|
BalanceWorkerVariance.Time |
ワーカー間でリースのメモリ上のバランシングを実行する処理に要した時間。 メトリクスレベル: Detailed 単位: ミリ秒 |
|
NumOfLeasesReassignment |
現在の再割り当てイテレーションで実行されたリースの再割り当ての合計数。 メトリクスレベル: Summary 単位: カウント |
|
FailedAssignmentCount |
DynamoDB のリーステーブルに対する AssignLease 呼び出しで発生した失敗の数。 メトリクスレベル: Detailed 単位: カウント |
|
ParallelyAssignLeases.Time |
DynamoDB のリーステーブルに新しい割り当て内容を書き込む処理に要した時間。 メトリクスレベル: Detailed 単位: ミリ秒 |
|
ParallelyAssignLeases.Success |
新しい割り当て内容の書き込みが正常に完了した回数。 メトリクスレベル: Detailed 単位: カウント |
|
TotalStaleWorkerMetricsEntry |
クリーンアップが必要なワーカーメトリクスエントリの合計数。 メトリクスレベル: Detailed 単位: カウント |
| StaleWorkerMetricsCleanup.Time |
DynamoDB のワーカーメトリクステーブルからワーカーメトリクスエントリを削除する処理に要した時間。 メトリクスレベル: Detailed 単位: ミリ秒 |
| Time |
メトリクスレベル: Summary 単位: ミリ秒 |
| Success |
メトリクスレベル: Summary 単位: カウント |
| ForceLeaderRelease |
リース割り当てマネージャーが 3 回連続で失敗し、リーダーワーカーがリーダーシップを解放していることを示します。 メトリクスレベル: Summary 単位: カウント |
|
NumWorkersWithInvalidEntry |
無効と見なされたワーカーメトリクスエントリの数。 メトリクスレベル: Summary 単位: カウント |
|
NumWorkersWithFailingWorkerMetric |
ワーカーメトリクスの値の 1 つとして -1 (ワーカーメトリクス値が利用できないことを示す) が含まれているワーカーメトリクスエントリの数。 メトリクスレベル: Summary 単位: カウント |
|
LeaseDeserializationFailureCount |
逆シリアル化に失敗したリーステーブル内のリースエントリ。 メトリクスレベル: Summary 単位: カウント |
InitializeTask
InitializeTask オペレーションは、KCL アプリケーションのレコードプロセッサを初期化します。このオペレーションのロジックには、Kinesis Data Streams からのシャードイテレーターの取得とレコードプロセッサの初期化が含まれています。
| メトリクス | 説明 |
|---|---|
| KinesisDataFetcher.getIterator.Success |
KCL アプリケーションあたりの メトリクスレベル: Detailed 単位: カウント |
| KinesisDataFetcher.getIterator.Time |
指定された KCL アプリケーションの メトリクスレベル: Detailed 単位: ミリ秒 |
| RecordProcessor.initialize.Time |
レコードプロセッサの初期化メソッドにかかった時間。 メトリクスレベル: Summary 単位: ミリ秒 |
| Success |
レコードプロセッサの初期化の成功回数。 メトリクスレベル: Summary 単位: カウント |
| Time |
KCL ワーカーがレコードプロセッサの初期化にかかった時間。 メトリクスレベル: Summary 単位: ミリ秒 |
ShutdownTask
ShutdownTask オペレーションは、シャード処理のシャットダウンシーケンスを開始します。これは、シャードが分割または結合された場合やシャードリースがワーカーから失われた場合に発生する場合があります。どちらの場合も、レコードプロセッサ shutdown() 関数が呼び出されます。また、シャードが分割または結合された場合、新しいシャードが 1 つまたは 2 つ作成されるため、新しいシャードが検出されます。
| メトリクス | 説明 |
|---|---|
| CreateLease.Success |
親シャードのシャットダウンの後に、新しい子シャードが KCL アプリケーションの DynamoDB テーブルに正常に追加された回数。 メトリクスレベル: Detailed 単位: カウント |
| CreateLease.Time |
KCL アプリケーションの DynamoDB テーブルに新しい子シャード情報を追加する所要時間。 メトリクスレベル: Detailed 単位: ミリ秒 |
| UpdateLease.Success |
レコードプロセッサのシャットダウン中に成功した最終チェックポイントの数。 メトリクスレベル: Detailed 単位: カウント |
| UpdateLease.Time |
レコードプロセッサのシャットダウン中にチェックポイントオペレーションにかかった時間。 メトリクスレベル: Detailed 単位: ミリ秒 |
| RecordProcessor.shutdown.Time |
レコードプロセッサのシャットダウンメソッドにかかった時間。 メトリクスレベル: Summary 単位: ミリ秒 |
| Success |
シャットダウンタスクの成功回数。 メトリクスレベル: Summary 単位: カウント |
| Time |
KCL ワーカーがシャットダウンタスクにかかった時間。 メトリクスレベル: Summary 単位: ミリ秒 |
ShardSyncTask
ShardSyncTask オペレーションは、Kinesis Data Streams のシャード情報に対する変更を検出するため、KCL アプリケーションで新しいシャードを処理できます。
| メトリクス | 説明 |
|---|---|
| CreateLease.Success |
KCL アプリケーションの DynamoDB テーブルへの新しいシャード情報の追加が成功した回数。 メトリクスレベル: Detailed 単位: カウント |
| CreateLease.Time |
KCL アプリケーションの DynamoDB テーブルに新しいシャード情報を追加する所要時間。 メトリクスレベル: Detailed 単位: ミリ秒 |
| Success |
シャード同期オペレーションの成功回数。 メトリクスレベル: Summary 単位: カウント |
| Time |
シャード同期オペレーションにかかった時間。 メトリクスレベル: Summary 単位: ミリ秒 |
BlockOnParentTask
シャードが分割または他のシャードと結合された場合、新しい子シャードが作成されます。BlockOnParentTask オペレーションは、KCL による親シャードの処理が完了するまで、新しいシャードのレコード処理が開始されないようにします。
| メトリクス | 説明 |
|---|---|
| Success |
親シャードの完了チェックの成功回数。 メトリクスレベル: Summary 単位: カウント |
| Time |
親シャードが完了するまでにかかった時間。 メトリクスレベル: Summary 単位: ミリ秒 |
PeriodicShardSyncManager
PeriodicShardSyncManager は、KCL コンシューマーアプリケーションによって処理されているデータストリームを調べ、部分リースを持つデータストリームを特定し、同期のためにそれらを引き渡します。
次のメトリクスは、KCL が単一のデータストリームを処理するように設定されている場合 (次に NumStreamsToSync および NumStreamsWithPartialLeases の値が 1 に設定されている場合)、および複数のデータストリームを処理するように KCL が構成されている場合に使用できます。
| メトリクス | 説明 |
|---|---|
| NumStreamsToSync |
部分的なリースを含み、同期のために引き渡す必要がある、コンシューマーアプリケーションによって処理されているデータストリームの数 (AWS アカウントごと)。 メトリクスレベル: Summary 単位: カウント |
| NumStreamsWithPartialLeases |
部分的なリースを含み、コンシューマーアプリケーションによって処理されているデータストリームの数 (AWS アカウントごと)。 メトリクスレベル: Summary 単位: カウント |
| Success |
回数 メトリクスレベル: Summary 単位: カウント |
| Time |
コンシューマーアプリケーションが処理しているデータストリームを調査し、シャードの同期が必要なデータストリームを特定するために、 メトリクスレベル: Summary 単位: ミリ秒 |
MultistreamTracker
MultistreamTracker インターフェイスを使用すると、複数のデータストリームを同時に処理できる KCL コンシューマーアプリケーションを構築できます。
| メトリクス | 説明 |
|---|---|
| DeletedStreams.Count |
この期間に削除されたデータストリームの数。 メトリクスレベル: Summary 単位: カウント |
| ActiveStreams.Count |
処理されているアクティブなデータストリームの数。 メトリクスレベル: Summary 単位: カウント |
| StreamsPendingDeletion.Count |
メトリクスレベル: Summary 単位: カウント |
ワーカーあたりのメトリクス
これらのメトリクスは、Amazon EC2 インスタンスなど、Kinesis Data Streams のデータを消費するすべてのレコードプロセッサにわたって集約されます。
WorkerMetricStatsReporter
WorkerMetricStatReporter オペレーションは、現在のワーカーのメトリクスを定期的にワーカーメトリクステーブルに公開する役割を担います。これらのメトリクスは、LeaseAssignmentManager オペレーションによるリース割り当ての実行に使用されます。
| メトリクス | 説明 |
|---|---|
|
InMemoryMetricStatsReporterFailure |
一部のワーカーメトリクスの失敗により、メモリ内ワーカーメトリクス値の取得に失敗した回数。 メトリクスレベル: Summary 単位: カウント |
|
WorkerMetricStatsReporter.Time |
メトリクスレベル: Summary 単位: ミリ秒 |
|
WorkerMetricStatsReporter.Success |
メトリクスレベル: Summary 単位: カウント |
LeaseDiscovery
LeaseDiscovery オペレーションは、LeaseAssignmentManager オペレーションによって現在のワーカーに割り当てられた新しいリースを特定する役割を担います。このオペレーションのロジックには、リーステーブルのグローバルセカンダリインデックスを読み取ることで、現在のワーカーに割り当てられたリースを特定する処理が含まれます。
| メトリクス | 説明 |
|---|---|
|
ListLeaseKeysForWorker.Time |
リーステーブルのグローバルセカンダリインデックスを呼び出し、現在のワーカーに割り当てられたリースキーを取得するまでの時間。 メトリクスレベル: Detailed 単位: ミリ秒 |
|
FetchNewLeases.Time |
リーステーブルからすべての新しいリースを取得するまでに要する時間。 メトリクスレベル: Detailed 単位: ミリ秒 |
|
NewLeasesDiscovered |
ワーカーに割り当てられた新しいリースの合計数。 メトリクスレベル: Detailed 単位: カウント |
|
Time |
メトリクスレベル: Summary 単位: ミリ秒 |
|
Success |
メトリクスレベル: Summary 単位: カウント |
|
OwnerMismatch |
GSI の応答とリーステーブルの整合読み取り結果との間で発生した所有者の不一致の数。 メトリクスレベル: Detailed 単位: カウント |
RenewAllLeases
RenewAllLeases オペレーションは、特定のワーカーインスタンスによって所有されるシャードリースを定期的に更新します。
| メトリクス | 説明 |
|---|---|
| RenewLease.Success |
ワーカーによるリース更新の成功回数。 メトリクスレベル: Detailed 単位: カウント |
| RenewLease.Time |
リース更新オペレーションにかかった時間。 メトリクスレベル: Detailed 単位: ミリ秒 |
| CurrentLeases |
すべてのリースの更新後にワーカーによって所有されているシャードリースの数。 メトリクスレベル: Summary 単位: カウント |
| LostLeases |
ワーカーによって所有されているすべてのリースの更新を試みたときに失われたシャードリースの数。 メトリクスレベル: Summary 単位: カウント |
| Success |
ワーカーに対してリース更新オペレーションが正常に実行された回数。 メトリクスレベル: Summary 単位: カウント |
| Time |
ワーカーのすべてのリースを更新するのにかかった時間。 メトリクスレベル: Summary 単位: ミリ秒 |
TakeLeases
TakeLeases オペレーションは、すべての KCL ワーカー間でレコード処理の負荷を分散させます。現在のKCL ワーカーのシャードリースが、必要数を下回る場合、過負荷になっている他のワーカーからシャードリースを取得します。
| メトリクス | 説明 |
|---|---|
| ListLeases.Success |
すべてのシャードリースがKCL アプリケーションのDynamoDB テーブルから正常に取得された回数。 メトリクスレベル: Detailed 単位: カウント |
| ListLeases.Time |
KCL アプリケーションの DynamoDB テーブルからすべてのシャードリースを取得する所要時間。 メトリクスレベル: Detailed 単位: ミリ秒 |
| TakeLease.Success |
ワーカーが他のKCL ワーカーからシャードリースを正常に取得した回数。 メトリクスレベル: Detailed 単位: カウント |
| TakeLease.Time |
ワーカーが取得したリースを使用してリーステーブルを更新するのにかかった時間。 メトリクスレベル: Detailed 単位: ミリ秒 |
| NumWorkers |
特定のワーカーにより識別されるワーカーの総数。 メトリクスレベル: Summary 単位: カウント |
| NeededLeases |
現在のワーカーがシャード処理の負荷を分散するのに必要なシャードリースの数。 メトリクスレベル: Detailed 単位: カウント |
| LeasesToTake |
ワーカーが取得を試みるリースの数。 メトリクスレベル: Detailed 単位: カウント |
| TakenLeases |
ワーカーが取得に成功したリースの数。 メトリクスレベル: Summary 単位: カウント |
| TotalLeases |
CL アプリケーションが処理しているシャードの総数。 メトリクスレベル: Detailed 単位: カウント |
| ExpiredLeases |
特定のワーカーによって識別されるどのワーカーでも処理されていないシャードの総数。 メトリクスレベル: Summary 単位: カウント |
| Success |
メトリクスレベル: Summary 単位: カウント |
| Time |
ワーカーの メトリクスレベル: Summary 単位: ミリ秒 |
シャードあたりのメトリクス
これらのメトリクスは、単一のレコードプロセッサについて集約されます。
ProcessTask
ProcessTask オペレーションは、現在のイテレーター位置を使用して GetRecords を呼び出すことにより、ストリームからレコードを取得して、レコードプロセッサの processRecords 関数を起動します。
| メトリクス | 説明 |
|---|---|
| KinesisDataFetcher.getRecords.Success |
Kinesis data stream シャードあたりの メトリクスレベル: Detailed 単位: カウント |
| KinesisDataFetcher.getRecords.Time |
Kinesis data stream シャードの メトリクスレベル: Detailed 単位: ミリ秒 |
| UpdateLease.Success |
指定されたシャードのレコードプロセッサによってチェックポイントが正常に作成された回数。 メトリクスレベル: Detailed 単位: カウント |
| UpdateLease.Time |
指定されたシャードの各チェックポイントオペレーションにかかった時間。 メトリクスレベル: Detailed 単位: ミリ秒 |
| DataBytesProcessed |
メトリクスレベル: Summary 単位: バイト |
| RecordsProcessed |
メトリクスレベル: Summary 単位: カウント |
| ExpiredIterator |
メトリクスレベル: Summary 単位: カウント |
| MillisBehindLatest | 現在のイテレーターがシャード内の最新のレコード (先端) から遅れている時間。この値は、応答の最新レコードと現在時間における時間差と同じかそれ以下です。これは、最新の応答レコードのタイムスタンプを比較するよりも、シャードが先端からどれくらい離れているかを示すより正確な反映です。この値は、各レコードの全タイムスタンプの平均ではなく、レコードの最新バッチに適用されます。 メトリクスレベル: Summary 単位: ミリ秒 |
| RecordProcessor.processRecords.Time |
レコードプロセッサの メトリクスレベル: Summary 単位: ミリ秒 |
| Success |
プロセスタスクオペレーションの成功回数。 メトリクスレベル: Summary 単位: カウント |
| Time |
プロセスタスクオペレーションにかかった時間。 メトリクスレベル: Summary 単位: ミリ秒 |