Amazon Web Services ブログ

Amazon CloudWatch からテレメトリデータを取得する:メトリクス編

CloudWatch メトリクスを活用することで、システムの状態を可視化し効果的な監視を実現できます。
CloudWatch メトリクスには保存期間の制限があり、また外部の監視ツールと連携したいケースも多く存在するため、 CloudWatch メトリクスを外部に転送して活用するニーズが高まっています。

本記事では、CloudWatch メトリクスの基本的な概念を押さえた上で、メトリクス転送が必要となるユースケースと、AWS が提供する 2 つの転送方法について、それぞれの特徴や使い分けのポイントを詳しく見ていきましょう。

本記事ではメトリクスの取得方法について解説します。ログの取得については Amazon CloudWatch からテレメトリデータを取得する:ログ編をご参照ください。

はじめに

CloudWatch メトリクスの転送方法を詳しく考える前に、CloudWatch メトリクスについて解説します。

CloudWatch メトリクスは、CPU 使用率やメモリ使用量といったパフォーマンス測定値を時系列データとして収集します。各メトリクスは AWS/EC2 や AWS/RDS といった名前空間で分類され、さらに、インスタンス ID やインスタンスタイプなどのディメンション(名前と値のペア)で一意に識別されます。

収集したデータは、合計、最大値、最小値、平均値といった統計値として集計できます。データポイントの集計間隔は期間(Period)として設定でき、1 分、5 分、1 時間など必要に応じて選択可能です。

CloudWatch メトリクスの転送が必要となるユースケース

CloudWatch メトリクスの転送が必要となる、具体的なユースケースを 3 つご紹介します。

1 . メトリクスの長期保存を行いたい

CloudWatch メトリクスのデフォルトの保存期間はデータポイントの粒度によって異なり、次のようにメトリクスデータを保持します。

  • 60 秒未満のデータポイント: 3 時間
  • 1 分間隔のデータポイント: 15 日間
  • 5 分間隔のデータポイント: 63 日間
  • 1 時間間隔のデータポイント: 455 日間(約 15 ヶ月)

注意すべき点は時間が経過するとデータの解像度が自動的に低下することです。たとえば、1 分間隔でデータを収集した場合、最初の 15 日間は 1 分間の解像度で利用できますが、15 日を過ぎると 5 分間隔に集約されます。さらに 63 日を過ぎると 1 時間間隔に集約されます。455 日を超えて保持したい場合や、元の解像度を維持したまま長期保存したい場合は、Amazon S3 などの外部ストレージにエクスポートする必要があります。

2. サードパーティー監視ツールとの連携を行いたい

AWS 以外のクラウドプロバイダーやオンプレミス環境も含めた統合監視のために Datadog、New Relic、Grafana、Splunk などのサードパーティ監視ツールを利用することがあります。こうした環境で AWS のメトリクスも統合して監視したい場合、 CloudWatch メトリクスの転送が必要になることがあります。

3. 詳細な分析を行いたい

取得したメトリクスを使用して、組織固有のニーズに応じた詳細な分析を行いたい場合、メトリクスの転送が必要になる場合があります。

  • コスト最適化分析 : 長期間のリソース使用率データを分析し、コスト最適化の機会を特定
  • トレンド分析 : 数年にわたるメトリクスデータを保持し、長期的なトレンドを分析
  • 機械学習モデルの構築 : 過去のメトリクスデータを使用して予測モデルを構築

CloudWatch メトリクスを転送する方法

この章では、Cloudwatch メトリクスを転送する 2 つの方法をご紹介します。

  1. APIポーリングを使用する方法
  2. CloudWatch Metric Streams を使用する方法法

1. API ポーリングを使用する方法

CloudWatch API を定期的にポーリングしてメトリクスデータを取得する方法です。 GetMetricData API または GetMetricStatistics API を使用し、AWS CLI、AWS SDK、または直接 API 呼び出しで実装できます。データの出力形式は JSON です。
この方法では、CloudWatch のデータ保持期間内であれば任意の過去のメトリクスデータを取得できます。

GetMetricData API GetMetricStatistics API のちがい

GetMetricData を使用すると、データをより高速かつ大規模に取得できるため、GetMetricStatistics ではなく GetMetricData API を使用するのがベストプラクティスです。GetMetricData はメトリクス計算サポートしています。

GetMetricData API は、データをより高速かつ大規模に取得できます。1 回のリクエストで最大 500 のメトリクスを取得でき、Metric Math(メトリクス計算式)を使って統計情報を表示できるほか、順序付けされページ分割された結果を返します。

一方、GetMetricStatistics API は、少量のメトリクスを取得する場合に適しています。AWS 無料利用枠に含まれ、月間 100 万リクエストまで無料で利用できます。

詳細については、API を使用して CloudWatch メトリックスからデータポイントを取得する を参照してください。

料金

GetMetricData API と GetMetricStatistics API では料金体系が異なる点にご注意ください。

GetMetricStatistics API:
GetMetricStatistics API は通常の CloudWatch API リクエストと同じ料金体系で、AWS 無料利用枠に含まれま
す。月間 100 万リクエストまで無料で、無料利用枠を超過すると課金されます。無料利用枠を超過すると1,000 リクエストあたり USD 0.01 の料金が発生します。(東京リージョン)

GetMetricData API:
GetMetricData API は AWS 無料利用枠の対象外で、最初のリクエストから課金され、1,000 個のメトリクスリクエストあたり 0.01 USD の料金が発生します。
単一のリクエストで同じメトリクスについて最大 5 つの統計を取得でき、5 つを超える統計は追加のメトリクスリクエストとして課金されます。例えば、1 つのメトリクスについて 9 つの統計をリクエストすると、2 つのメトリクスリクエストとして課金されます。(東京リージョン)

料金の詳細や最新情報については、Amazon CloudWatch 料金ページを参照してください。

2. CloudWatch Metric Streamsを使用する方法

CloudWatch Metric Streams を利用してCloudWatch メトリクスを転送することができます。

CloudWatch Metric Streams は、最小限のセットアップと設定でユーザーが希望する送信先に継続的にストリーミングする機能です。フルマネージド型のソリューションで、コードを書いたりインフラを維持したりする必要はありません。

CloudWatch Metric Streams を使用することで、API ポーリングを行うことなく CloudWatch からメトリクスデータを取得できます。Amazon S3 などのデータレイクなどにメトリクスを簡単に転送し、Amazon Athena などのツールで使用状況やパフォーマンスの分析を開始できます。また、Amazon Data Firehose の HTTP エンドポイントを使用して、CloudWatch メトリクスをサードパーティサービスプロバイダーに送信することも容易になります。

過去 3 日以上前に公開されたメトリクスはストリーミングされません。メトリクスがストリーミングされるかどうかを判断するには、CloudWatch コンソールでメトリクスをグラフ化して、表示される最新のデータポイントの時間を確認してください。3 日以上経過している場合、CloudWatch Metric Streams で取得されません。

料金

CloudWatch Metric Streams の料金は、更新されたメトリクスの件数に基づきます(東京リージョンでは 1,000
メトリクス更新あたり 0.003 USD)。メトリクスの更新には、4 つのデフォルト統計(最小、最大、サンプル
数、合計)が含まれます。加えて、Data Firehose の料金も課金されます。

不要なメトリクスをフィルタリングしないとコストが高額になる可能性があります。各メトリクスストリームに
は最大 1,000 個のフィルターを設定できるため、必要なメトリクスのみをストリームに含めるようフィルター
を設定してください。

CloudWatch Metric Streams の作成方法

CloudWatch Metric Streams は、CloudWatch コンソールを通じて、または CloudWatch API、AWS SDK、AWS CLI、AWS CloudFormation を使用してプログラムで作成・管理できます。サードパーティサービスプロバイダーが提供する AWS CloudFormation テンプレートを使用して、サードパーティーの宛先へのMetric Streamsの配信を設定することもできます。

主なセットアップ方法を 3 つご紹介します。

 1. Amazon Data Firehose を使用したカスタムセットアップ

CloudWatch Metric Streams を使用して、Amazon Data Firehose 配信ストリームに転送できます。Amazon S3 などデータレイクや、Firehose がサポートする任意の宛先やサードパーティープロバイダーのエンドポイントにストリーミングできます。
出力形式
JSON、OpenTelemetry 1.0.0、 OpenTelemetry 0.7.0 をネイティブに提供し、Firehose 配信ストリームで変換を設定することでParquet 形式などの別の形式にも変換できます。

2. クイック S3 セットアップ
JSON、OpenTelemetry 1.0.0、OpenTelemetry 0.7.0 以外の形式に変換する必要がない場合は、クイック S3 セットアップの方法を使用することで Amazon S3 へのストリームを素早くセットアップ可能です。CloudWatch は、Firehose 配信ストリームや必要な IAM ロールなど、必要なすべてのリソースを作成します。
出力形式
JSON、 OpenTelemetry 1.0.0、 OpenTelemetry 0.7.0

3. クイックパートナーセットアップ
CloudWatch では一部のサードパーティーパートナー向けとしてクイックセットアップのオプションを提供しています。CloudWatch は、Firehose 配信ストリームや必要な IAM ロールなど、必要なすべてのリソースを作成します。
クイックパートナーセットアップを使用してメトリクスストリームを作成する前に、ドキュメントに記載されたリンクから各パートナーのドキュメントを読むことを強くお勧めします。

詳しい実装方法はドキュメントをご覧ください。

フィルターの作成方法

メトリクスを転送する際には、[すべてのメトリクス] または [メトリクスを選択] のどちらかを選択します。

[すべてのメトリクス]の場合、アカウントのすべてのメトリクスがストリームに含まれます。ストリーミングする料金が多いほど、CloudWatch Metrics Stream, Amazon Data Firehose の料金が高くなるため注意してください。

[メトリクスを選択]の場合、以下のいずれかによってストリーミングするメトリクスを選択します。
必要なメトリクスのみを転送することでコスト最適化を行うことができます。

  • [Exclude] : ほとんどの名前空間のメトリクスをストリーミングし、特定の名前空間またはメトリクスを除外
  • [Include] : 特定の名前空間またはメトリクスのみをストリーミング

統計について
CloudWatch Metrics Streams には、デフォルトで Minimum、Maximum、SampleCount、 Sum の4つの統計データが含まれます。CloudWatch Metric Streams に追加の統計データを含めることもでき、メトリクスごとに設定可能です。その場合、追加の料金が発生します。詳細については、ドキュメントを参照してください。

まとめ

CloudWatch メトリクスを転送する2つの方法について詳しくみてきました。どちらの方法を選択すべきかまとめてみましょう。

API ポーリングが適している場合:

  • 少量の特定のメトリクスのみを転送する場合
  • 過去のデータも含めて転送する必要がある場合

CloudWatch Metric Streams が適している場合:

  • 大量のメトリクスをリアルタイムで転送したい場合
  • 運用オーバーヘッドを最小限に抑えたい場合

両方を組み合わせたハイブリッドアプローチも有効です。例えば、最新のデータは CloudWatch Metric Streamsで転送し、必要に応じて過去のデータを API ポーリングで取得する方法が考えられます。

要件に合わせて最適な方法を選択し、効率的なメトリクス転送を実現してください。

著者
大石 美緒
アマゾンウェブサービスジャパン合同会社 ソリューションアーキテクト