AWSJavaScriptNode.js

CloudWatchのメトリクスグラフを取得するNode.jsスクリプトを作る

はい。とりたかったです。ということでさわってみたまとめです。。 基本構成 だいたいこんな感じです。propsの中の値を書き換えて必要なデータを出力するようにします。 あとcloudwatch.getMetricWidge […]

広告ここから
広告ここまで

はい。とりたかったです。ということでさわってみたまとめです。。

基本構成

だいたいこんな感じです。propsの中の値を書き換えて必要なデータを出力するようにします。

あとcloudwatch.getMetricWidgetImage()はBufferで値を返してくるので、fs.writeFileSync()でpngとして出力しています。

const AWS = require('aws-sdk')
const fs = require('fs')

const test = async () => {
  const props = {
    'width': 500,
    'height': 400,
    'start': '-PT3H',
    'end': 'PT0H',
    'view': 'timeSeries',
    'stacked': false,
    'metrics': [
      [
        'AWS/EC2',
        'CPUUtilization',
        'AutoScalingGroupName',
        'AS_GROUP_NAME'
      ], [
        'AWS/EC2',
        'NetworkOut',
        'InstanceId',
        'i-XXXX',
        {
          'yAxis': 'right'
        }
      ]
    ],
    'stat': 'Average',
    'period': 60
  }
  const widgetDefinition = {
    MetricWidget: JSON.stringify(props)
  }

  const cloudwatch = new AWS.CloudWatch()
  try {
    const result = await cloudwatch.getMetricWidgetImage(widgetDefinition).promise()
    console.log(result)
    fs.writeFileSync('./test1.png', result.MetricWidgetImage)
  } catch (e) {
    console.log(e)
  }
}
test()

AutoScaling GroupのCPU Utilizationを取得する

過去3時間のAS Group別のCPU負荷を出力するときのサンプルです。

const props = {
    'width': 500,
    'height': 400,
    'start': '-PT3H',
    'end': 'PT0H',
    'view': 'timeSeries',
    'stacked': false,
    'metrics': [
      [
        'AWS/EC2',
        'CPUUtilization',
        'AutoScalingGroupName',
        'AS_GROUP_NAME'
      ], [
        'AWS/EC2',
        'CPUUtilization',
        'AutoScalingGroupName',
        'AS_GROUP_NAME1'
      ], [
        'AWS/EC2',
        'CPUUtilization',
        'AutoScalingGroupName',
        'AS_GROUP_NAME2'
      ]
    ],
    'stat': 'Average',
    'period': 60
  }

出力したものがこちら。

EC2のCPU UtilizationとNetworkOutを同時にみる

今度は項目を変えてみます。yAxisでグラフの表示位置を指定できる様子です。

  const props = {
    'width': 500,
    'height': 400,
    'start': '-PT3H',
    'end': 'PT0H',
    'view': 'timeSeries',
    'stacked': false,
    'metrics': [
      [
        'AWS/EC2',
        'CPUUtilization',
        'InstanceId',
        'INSTANCE_ID'
      ], [
        'AWS/EC2',
        'NetworkOut',
        'InstanceId',
        'INSTANCE_ID',
        {
          'yAxis': 'right'
        }
      ]
    ],
    'stat': 'Average',
    'period': 60
  }

完成品がこちら

API経由で返す

API経由で返す場合、Lambdaからはnew Buffer(data.MetricWidgetImage).toString('base64')してやるのがよいかなと思います。

https://github.com/aws-samples/aws-cloudwatch-building-dashboard-outside-aws-console/blob/master/server/server.js#L8-L29

あと、 GetMetricWidgetImage: Metric Widget Structure and Syntaxからメトリクスを表示するときの構文サンプルみれますので、皆さん是非試してください。

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts