Amazon CloudWatch を使用した Kinesis Client Library を監視する - Amazon Kinesis Data Streams

Amazon CloudWatch を使用した Kinesis Client Library を監視する

Amazon Kinesis Data Streams の Kinesis Client Library (KCL) は、KCL アプリケーションの名前を名前空間として使用して、お客様に代わってカスタム Amazon CloudWatch メトリクスを発行します。CloudWatch console に移動し、[カスタムメトリクス] を選択すると、これらのメトリクスを表示できます。カスタムメトリクスに関する詳細については、Amazon CloudWatch ユーザーガイドカスタムメトリクスを発行するを参照してください。

KCL によって CloudWatch にアップロードされたメトリクスには、小額の課金が発生します。具体的には、Amazon CloudWatch カスタムメトリクスAmazon CloudWatch API リクエストの料金が適用されます。詳細については、「Amazon CloudWatch 料金表」をご覧ください。

メトリクスと名前空間

メトリクスのアップロードに使用される名前空間は、KCL の起動時に指定されたアプリケーション名です。

メトリクスレベルとディメンション

CloudWatch にアップロードされるメトリクスを制御する 2 つのオプションがあります。

メトリクスレベル

すべてのメトリクスに、個別のレベルが割り当てられます。メトリクスのレポートレベルを設定すると、レポートレベル以下の個別のレベルのメトリクスは CloudWatch に送信されません。このレベルとして、NONESUMMARYDETAILED があります。デフォルト設定は DETAILED であり、すべてのメトリクスが CloudWatch に送信されます。レポートレベル NONE は、メトリクスがまったく送信されないことを意味します。各メトリクスに割り当てられるメトリクスの詳細については、メトリクスの一覧を参照してください。

有効なディメンション

すべての KCL メトリクスには、CloudWatch に送信されるディメンションが関連付けられています。KCL 2.x では、単一のデータストリームを処理するように KCL が設定されている場合、すべてのメトリクスディメンション (OperationShardId、およびWorkerIdentifier) が、デフォルトで有効になっています。また、KCL 2.x では、単一のデータストリームを処理するように KCL が設定されている場合、Operation ディメンションを無効にすることはできません。KCL 2.x では、KCL が複数のデータストリームを処理するように構成されている場合、すべてのメトリクスディメンション (OperationShardIdStreamId、およびWorkerIdentifier) は、デフォルトで有効になっています。また、KCL 2.x では、KCL が複数のデータストリームを処理するように設定されている場合、OperationStreamId ディメンションを無効にすることはできません。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 アプリケーションによって使用されるディメンションは、OperationShardId、および 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

LeaseAssignmentManager オペレーションにかかった時間。

メトリクスレベル: Summary

単位: ミリ秒

Success

LeaseAssignmentManager オペレーションが正常に完了した回数。

メトリクスレベル: Summary

単位: カウント

ForceLeaderRelease

リース割り当てマネージャーが 3 回連続で失敗し、リーダーワーカーがリーダーシップを解放していることを示します。

メトリクスレベル: Summary

単位: カウント

NumWorkersWithInvalidEntry

無効と見なされたワーカーメトリクスエントリの数。

メトリクスレベル: Summary

単位: カウント

NumWorkersWithFailingWorkerMetric

ワーカーメトリクスの値の 1 つとして -1 (ワーカーメトリクス値が利用できないことを示す) が含まれているワーカーメトリクスエントリの数。

メトリクスレベル: Summary

単位: カウント

LeaseDeserializationFailureCount

逆シリアル化に失敗したリーステーブル内のリースエントリ。

メトリクスレベル: Summary

単位: カウント

InitializeTask

InitializeTask オペレーションは、KCL アプリケーションのレコードプロセッサを初期化します。このオペレーションのロジックには、Kinesis Data Streams からのシャードイテレーターの取得とレコードプロセッサの初期化が含まれています。

メトリクス 説明
KinesisDataFetcher.getIterator.Success

KCL アプリケーションあたりの GetShardIterator オペレーションの成功回数。

メトリクスレベル: Detailed

単位: カウント

KinesisDataFetcher.getIterator.Time

指定された KCL アプリケーションの GetShardIterator オペレーションあたりの所要時間。

メトリクスレベル: 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

回数 PeriodicShardSyncManager は、コンシューマーアプリケーションが処理しているデータストリーム内の部分リースを正常に識別できました。

メトリクスレベル: Summary

単位: カウント

Time

コンシューマーアプリケーションが処理しているデータストリームを調査し、シャードの同期が必要なデータストリームを特定するために、PeriodicShardSyncManager が要する時間 (ミリ秒単位)。

メトリクスレベル: Summary

単位: ミリ秒

MultistreamTracker

MultistreamTracker インターフェイスを使用すると、複数のデータストリームを同時に処理できる KCL コンシューマーアプリケーションを構築できます。

メトリクス 説明
DeletedStreams.Count

この期間に削除されたデータストリームの数。

メトリクスレベル: Summary

単位: カウント

ActiveStreams.Count

処理されているアクティブなデータストリームの数。

メトリクスレベル: Summary

単位: カウント

StreamsPendingDeletion.Count

FormerStreamsLeasesDeletionStrategy に基づいて削除が保留中のデータストリームの数。

メトリクスレベル: Summary

単位: カウント

ワーカーあたりのメトリクス

これらのメトリクスは、Amazon EC2 インスタンスなど、Kinesis Data Streams のデータを消費するすべてのレコードプロセッサにわたって集約されます。

WorkerMetricStatsReporter

WorkerMetricStatReporter オペレーションは、現在のワーカーのメトリクスを定期的にワーカーメトリクステーブルに公開する役割を担います。これらのメトリクスは、LeaseAssignmentManager オペレーションによるリース割り当ての実行に使用されます。

メトリクス 説明

InMemoryMetricStatsReporterFailure

一部のワーカーメトリクスの失敗により、メモリ内ワーカーメトリクス値の取得に失敗した回数。

メトリクスレベル: Summary

単位: カウント

WorkerMetricStatsReporter.Time

WorkerMetricsStats オペレーションにかかった時間。

メトリクスレベル: Summary

単位: ミリ秒

WorkerMetricStatsReporter.Success

WorkerMetricsStats オペレーションが正常に完了した回数。

メトリクスレベル: Summary

単位: カウント

LeaseDiscovery

LeaseDiscovery オペレーションは、LeaseAssignmentManager オペレーションによって現在のワーカーに割り当てられた新しいリースを特定する役割を担います。このオペレーションのロジックには、リーステーブルのグローバルセカンダリインデックスを読み取ることで、現在のワーカーに割り当てられたリースを特定する処理が含まれます。

メトリクス 説明

ListLeaseKeysForWorker.Time

リーステーブルのグローバルセカンダリインデックスを呼び出し、現在のワーカーに割り当てられたリースキーを取得するまでの時間。

メトリクスレベル: Detailed

単位: ミリ秒

FetchNewLeases.Time

リーステーブルからすべての新しいリースを取得するまでに要する時間。

メトリクスレベル: Detailed

単位: ミリ秒

NewLeasesDiscovered

ワーカーに割り当てられた新しいリースの合計数。

メトリクスレベル: Detailed

単位: カウント

Time

LeaseDiscovery オペレーションにかかった時間。

メトリクスレベル: Summary

単位: ミリ秒

Success

LeaseDiscovery オペレーションが正常に完了した回数。

メトリクスレベル: 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

TakeLeases オペレーションが正常に完了した回数。

メトリクスレベル: Summary

単位: カウント

Time

ワーカーの TakeLeases オペレーションにかかった時間。

メトリクスレベル: Summary

単位: ミリ秒

シャードあたりのメトリクス

これらのメトリクスは、単一のレコードプロセッサについて集約されます。

ProcessTask

ProcessTask オペレーションは、現在のイテレーター位置を使用して GetRecords を呼び出すことにより、ストリームからレコードを取得して、レコードプロセッサの processRecords 関数を起動します。

メトリクス 説明
KinesisDataFetcher.getRecords.Success

Kinesis data stream シャードあたりの GetRecords オペレーションの成功回数。

メトリクスレベル: Detailed

単位: カウント

KinesisDataFetcher.getRecords.Time

Kinesis data stream シャードの GetRecords オペレーションあたりの所要時間。

メトリクスレベル: Detailed

単位: ミリ秒

UpdateLease.Success

指定されたシャードのレコードプロセッサによってチェックポイントが正常に作成された回数。

メトリクスレベル: Detailed

単位: カウント

UpdateLease.Time

指定されたシャードの各チェックポイントオペレーションにかかった時間。

メトリクスレベル: Detailed

単位: ミリ秒

DataBytesProcessed

ProcessTask の各呼び出しで処理されたレコードのバイト単位の合計サイズ。

メトリクスレベル: Summary

単位: バイト

RecordsProcessed

ProcessTask の各呼び出しで処理されたレコード数。

メトリクスレベル: Summary

単位: カウント

ExpiredIterator

GetRecords を呼び出したときに受信した ExpiredIteratorException の数。

メトリクスレベル: Summary

単位: カウント

MillisBehindLatest 現在のイテレーターがシャード内の最新のレコード (先端) から遅れている時間。この値は、応答の最新レコードと現在時間における時間差と同じかそれ以下です。これは、最新の応答レコードのタイムスタンプを比較するよりも、シャードが先端からどれくらい離れているかを示すより正確な反映です。この値は、各レコードの全タイムスタンプの平均ではなく、レコードの最新バッチに適用されます。

メトリクスレベル: Summary

単位: ミリ秒

RecordProcessor.processRecords.Time

レコードプロセッサの processRecords メソッドにかかった時間。

メトリクスレベル: Summary

単位: ミリ秒

Success

プロセスタスクオペレーションの成功回数。

メトリクスレベル: Summary

単位: カウント

Time

プロセスタスクオペレーションにかかった時間。

メトリクスレベル: Summary

単位: ミリ秒