Kinesis Data Streams の問題をモニタリングおよびトラブルシューティングするには、どのメトリクスを使用する必要がありますか?

最終更新日: 2020 年 6 月 30 日

Amazon Kinesis Data Streams の受信データと送信データをモニタリングしたいと考えています。どのメトリクスを使用すればよいですか?

解決方法

ストリームレベルのメトリクスの使用

Amazon CloudWatch メトリクスを使用して、Amazon Kinesis データストリームのパフォーマンスとスループットを継続的にモニタリングできます。次のメトリクスは、プロデューサーとコンシューマーの問題のモニタリングに役立ちます。

  • GetRecords.IteratorAgeMilliseconds: すべての GetRecords リクエストについて、ストリーム内の最後のレコードの経過時間をミリ秒単位で測定します。このメトリクスの値 0 は、レコードがストリーム内で最新であることを示します。値は小さい方がお勧めです。パフォーマンスの問題をモニタリングするには、ストリームのコンシューマーの数を増やして、データがより迅速に処理されるようにします。アプリケーションコードを最適化するには、コンシューマーの数を増やしてレコード処理の遅延を軽減します。
  • ReadProvisionedThroughputExceeded: Kinesis Data Streams のサービスまたはシャードの制限を超えて、所定の期間にスロットリングされた GetRecords 呼び出しの数を測定します。値 0 は、データコンシューマーがサービスクォータを超えていないことを示します。その他の値は、スループット制限を超過し、追加のシャードが必要であることを示します。このメトリクスは、ストリームが 5 つの読み込み /秒/シャードまたは 2 MB/ 秒/シャードを超えないことを確認します。拡張モニタリングを有効にして、ストリームにホットシャードがないことを検証できます。
  • WriteProvisionedThroughputExceeded: ストリームがスロットリングされていないかを判断するために、PUT またはデータプロデューサー (ReadProvisionedThroughputExceeded など) を測定します。これは、シャードに書き込むときのデータストリームのサービスクォータを超えています。PUT リクエストが 1 MB/ 秒/シャードまたは 1,000 レコード/シャード/秒を超えないようにしてください。パーティションキーが均等に分散されていること、拡張モニタリングが有効になっていてストリーム内のホットシャードを検証できることを確認します。シャードの飽和状態に応じて、ストリーム内のシャード数を更新して、スループットの増加を許可することを検討してください。
  • PutRecord.Success および PutRecords.Success: データプロデューサーによって指定された期間中にストリームへの PutRecords リクエストが成功したレコードの数を測定します。このメトリクスは、失敗したレコードの有効な再試行ロジックを確認します。
  • GetRecords.Success: ストリーム内の特定の期間における成功した GetRecords リクエストの数を測定します。失敗したレコードに対する有効な再試行ロジックが確認されます。
  • GetRecords.Latency: 指定された期間にストリームで各 GetRecords オペレーションにかかった時間を測定します。ストリームスループットの増加に対して十分な物理リソースまたはレコード処理ロジックがあることを確認します。より大きなデータのバッチを処理して、アプリケーションのネットワークやその他のダウンストリームのレイテンシーを短縮します。Kinesis クライアントライブラリ (KCL) の場合は、 ProcessTask.Time メトリクスを調べて、遅延しているアプリケーションの処理時間をモニタリングします。GetRecords.Latency メトリクスは、IDLE_TIME_BETWEEN_READS_IN_MILLIS 設定がストリーム処理に対応するように設定されていることを確認します。
  • PutRecords.Latency: 指定された期間にストリームに対する各 PutRecords オペレーションにかかった時間を測定します。PutRecords.Latency 値が大きい場合は、レコードをより大きなファイルに集約して、バッチデータを Kinesis データストリームに配置します。複数のスレッドを使用してデータを書き込むこともできます。PutRecords API のスロットリングと再試行ロジックは、レイテンシーと、ストリームの PutRecords オペレーションごとにかかった時間に影響する可能性があります。

次に、リストされたメトリクスの Average 統計を使用して、ストリームのパフォーマンスとスループットをモニタリングします。

注意: GetRecords.IteratorAgeMilliseconds については、 読み取りオペレーションより遅れているコンシューマーのデータ損失のリスクを軽減するには、Maximum 統計を使用する必要があります。メトリクスに対して評価されるデータポイントをトリガーするように CloudWatch アラームを設定します。CloudWatch アラームの詳細については、「Amazon CloudWatch アラームの使用」を参照してください。

拡張ファンアウト機能を使用している場合は、次のメトリクスを使用して Kinesis Data Streams をモニタリングします。

  • SubscribeToShard.RateExceeded: オペレーションで許可されている、またはアクティブなサブスクリプションがすでに存在しているためにサブスクリプションの試行が失敗した場合に、1 秒あたりの呼び出し数の超過を測定します。
  • SubscribeToShard.Success: SubscribeToShard オペレーションが成功するかどうかを確認します。
  • SubscribeToShardEvent.Success: アクティブなサブスクリプションのイベントが正常に発行されたことを確認します。
  • SubscribeToShardEvent.Bytes: 指定された期間にシャードで受け取ったバイト数を測定します。
  • SubscribeToShardEvent.Records: 指定した期間にシャードで受け取ったレコードの数を測定します。
  • SubscribeToShardEvent.MillisBehindLatest: ストリームに書き込まれた SubscribeToShard イベントの現在の時刻と最後のレコードの差を測定します。

拡張シャードレベルのメトリクスの有効化

CloudWatch でシャードレベルのメトリクスを有効にして、特定のタスクをモニタリングし、データプロデューサーとコンシューマーの問題をトラブルシューティングします。たとえば、シャードレベルのメトリクスを有効にすると、不均等なワークロード分散などの問題を特定するのに役立ちます。

拡張モニタリングを有効にするには、以下の手順を実行します。

注意 : EnableEnhancedMonitoring API リクエスト または enable-enhanced-monitoring AWS CLI を使用することもできます。

1.    Kinesis コンソールを開きます。

2.    特定の [リージョン] を選択します。

3.    ナビゲーションペインで [データストリーム] をクリックします。

4.    [データストリーム名] で、お客様の Kinesis データストリームを選択します。

5.    [設定] を選択します。

6.    [拡張 (シャードレベル) メトリクス] の [編集] を選択します。

7.    ドロップダウンメニューから、拡張モニタリングのメトリクスを選択します。

8.    [変更を保存] を選択して、設定を適用します。

API コールに関する追加のトラブルシューティング

以下の API 呼び出しを使用して、Kinesis Data Streams からデータを読み書きすることもできます。

  • CreateStream: アカウントごとに 1 秒あたり 5 件のトランザクションに制限されます。
  • DeleteStream: アカウントごとに 1 秒あたり 5 件のトランザクションに制限されます。
  • ListStreams: アカウントごとに 1 秒あたり 5 件のトランザクションに制限されます。
  • GetShardIterator: 開いているシャードごとに、アカウントごとに 1 秒あたり 5 件のトランザクションに制限されます。
  • MergeShards: アカウントごとに 1 秒あたり 5 件のトランザクションに制限されます。
  • DescribeStream: アカウントごとに 1 秒あたり 10 件のトランザクションに制限されます。
  • DescribeStreamSummary: アカウントごとに 1 秒あたり 20 件のトランザクションに制限されます。

これらの API 呼び出しを使用すると、AWS CloudTrail ログのスロットリングをモニタリングできます。Kinesis Data Streams API コールと CloudTrail の詳細については、「AWS CloudTrail を使用した Amazon Kinesis Data Streams API コールのログ記録」を参照してください。