Techioz Blog

CloudWatch API からメトリクスを一括取得する方法について混乱している

概要

さまざまな Amazon ec2 インスタンスを監視する必要があるため、当初の計画では、数値ウィジェットを備えたダッシュボードを作成し、「CPUUtilization」などの関心のあるさまざまな項目を選択して、そのダッシュボードを取得して、これらすべての現在のメトリック値にアクセスできます。ただし、そのダッシュボードを取得するために呼び出しを行うと、受信する本文は次のようになります。

{"widgets"=>[{"type"=>"metric", "x"=>0, "y"=>0, "width"=>24, "height"=>6, "properties"=>{"view"=>"singleValue", "metrics"=>[["AWS/EC2", "CPUUtilization", "InstanceId", "i-0ea0081d91f6e4aff"], [".", "DiskWriteBytes", ".", "."], [".", "CPUCreditUsage", ".", "."], [".", "StatusCheckFailed", ".", "."], [".", "NetworkPacketsIn", ".", "."], [".", "NetworkOut", ".", "."], [".", "StatusCheckFailed_System", ".", "."], [".", "CPUCreditBalance", ".", "."], [".", "StatusCheckFailed_Instance", ".", "."], [".", "NetworkIn", ".", "."], [".", "NetworkPacketsOut", ".", "."], [".", "DiskReadBytes", ".", "."], [".", "DiskWriteOps", ".", "."], [".", "DiskReadOps", ".", "."]], "region"=>"us-east-1"}}]}

これにはメトリック データは含まれておらず、メトリックの名前のみが含まれています。したがって、これは役に立ちません。

list_metrics メソッドは、2 つの点を除いて有望に見えます…

  1. 単一のメトリクスが必要ですか?ドキュメントには「指定されたメトリクスをリストする」という方法が説明されていますが。

入力は配列ではなくオブジェクトです。このメソッドを使用するには、次のことを行う必要があります。

client.list_metrics({
  namespace: "AWS/EC2",
  metric_name: "CPUUtilization",
  dimensions: [
    {
      name: "InstanceId", 
      value: "i-0fc0181c98e6e4a66"
    },
  ],
})

これにより、このオブジェクトが返されます。

#<struct Aws::CloudWatch::Types::ListMetricsOutput metrics=[#<struct Aws::CloudWatch::Types::Metric namespace="AWS/EC2", metric_name="CPUUtilization", dimensions=[#<struct Aws::CloudWatch::Types::Dimension name="InstanceId", value="i-0fc0181c98e6e4a66">]>], next_token=nil>

これは 2) メトリクス名のみを返し、実際の値は返しません…

私の何が間違っているのでしょうか?

さまざまなインスタンス ID の大量のメトリクスを単純に要求し、リクエストしたメトリクスの実際のメトリクス値を含む応答を取得するにはどうすればよいでしょうか?

解決策

つまり、GetMetricStatistics API への 1 回のリクエストで複数のメトリクスのデータを取得することはできません。最初にメトリクスをリストするというアプローチは正しいです。

ListMetrics API を使用して、名前空間とメトリック名のみを設定できます (正確なインスタンスを設定しているディメンションを削除します)。これにより、過去 2 週間に実行されたすべてのインスタンスのメトリクスが得られるはずです。次に、それらをループして、それぞれに対して GetMetricStatistics を呼び出す必要があります。

使用しようとしたダッシュボード API は、ダッシュボードの操作 (ダッシュボードやダッシュボード上の要素の作成、削除、編集) を目的としています。これらの API ではデータは得られません。ただし、ダッシュボード API がリリースされたとき、その使用方法に関するブログ投稿も公開されました。その投稿では、API を使用して、実行中のすべての EC2 インスタンスからのメトリクスを含むダッシュボードを作成する方法の例が使用されています。おそらくそれはあなたにとって役立つでしょう:

https://translate.google.com/translate?hl=ja&sl=en&tl=ja&u=https://aws.amazon.com/blogs/aws/new-api-cloudformation-support-for-amazon-cloudwatch-dashboards/