CloudFormationを利用してCloudWatchダッシュボードを設置してみた

AWS CloudFormationを利用して、再利用可能なCloudWatchダッシュボードの設置を試みてみました。
2018.12.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

AWSチームのすずきです。

AWSの複数リソースの稼働確認に役立つCloudWatchダッシュボード、 CloudFormationで設置を試みる機会がありましたので、紹介させて頂きます。

手順

全設定

  • CloudWatchダッシュボードの設定情報、「ダッシュボードの編集」を利用してJSON形式で取得する事が可能です。

  • 「Copy souce」した結果を「source.json」として保存しました。

個別設定

  • グラフの編集画面から、各グラフ単位の設定を確認する事も可能です。

ソート

  • JSONの設定と表示順序を一致させ、再利用性を向上するため「jq」コマンドを利用してソートを行いました。
cat source.json | jq  '.widgets'  | jq 'sort_by(.y)'

CloudFormationテンプレート作成

  • エクスポートしたJSON、CloudFormationの「DashboardBody」として利用する事が可能です。
AWSTemplateFormatVersion: '2010-09-09'
Description: Dashboard for monitoring LoadBalancer RequestCount
Resources:
  DashboardSideBySide:
    Type: AWS::CloudWatch::Dashboard
    Properties:
      DashboardBody: !Sub |
        {
          "widgets": [
            {
              "type": "metric",
              "x": 0,
              "y": 2,
              "width": 6,
              "height": 6,
              "properties": {
                "metrics": [
                  [
                    "AWS/ApplicationELB",
                    "RequestCount",
                    "LoadBalancer",
                    "app/aaaaaaaa/aaaaaaaa",
                    "AvailabilityZone",
                    "ap-northeast-1a",
                    {
                      "period": 300,
                      "stat": "Sum"
                    }
                  ]
                ],
                "view": "timeSeries",
                "stacked": true,
                "region": "ap-northeast-1",
                "period": 300
              }
            }  
          ]
        }
  • 監視対象のリソース、CloudFormationのパラメータとする事で再利用性を高めました。
Parameters:
  AlbLoadBalancer:
    Description: AlbLoadBalancer
    Type: String
    Default: app/aaaaaaaa/aaaaaaaa
Resources:
  DashboardSideBySide:
    Type: AWS::CloudWatch::Dashboard
    Properties:
      DashboardBody: !Sub |
        {
          "widgets": [
            {
              "type": "metric",
              "x": 0,
              "y": 2,
              "width": 6,
              "height": 6,
              "properties": {
                "metrics": [
                  [
                    "AWS/ApplicationELB",
                    "RequestCount",
                    "LoadBalancer",
                    "${AlbLoadBalancer}",
                    "AvailabilityZone",
                    "ap-northeast-1a",
                    {
                      "period": 300,
                      "stat": "Sum"
                    }
                  ]
                ],
                "view": "timeSeries",
                "stacked": true,
                "region": "ap-northeast-1",
                "period": 300
              }
            }  
          ]
        }

利用例

  • cloudwatch-dashboard-for-ec2autoscale.yaml
  • ELB、AutoScallingGroup、RDS、EC2の情報をCloudFormationのパラメータとして指定する事で、以下の記事で紹介したCloudWatchダッシュボードを再現する事ができました。

CloudWatchダッシュボードを利用してオートスケール環境の稼働状態を可視化してみた

まとめ

CloudFormationを利用してCloudWatchダッシュボードを管理することで、グラフ項目、単位などの揺れの抑制や効率的な管理が可能になります。 LAMP構成など、類似のシステムが多数存在する環境ではぜひお試しください。

テンプレート

今回の検証、以下のCloudFormationテンプレートを利用しました。