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からメトリクスを表示するときの構文サンプルみれますので、皆さん是非試してください。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark