2018年2月4日日曜日

CloudWatchダッシュボードを python で作る

python の boto3 を使用して、CloudWatch ダッシュボードを作ります。

EC2のタグ(Environment) に 'dev' が設定されてるサーバを対象にして、CPU使用率を表示するグラフを作ってみます。

ソースコードは以下のとおり。

[root@centos702 ~]# cat ./dashbord_cpu.py
#!/usr/bin/python
# coding: utf-8

# Dashboard Body Structure and Syntax
#
# https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/APIReference/CloudWatch-Dashboard-Body-Structure.html#CloudWatch-Dashboard-Properties-Metrics-Array-Format
#

import boto3
import json

cw   = boto3.client("cloudwatch")
ec2  = boto3.client("ec2")
ec2r = boto3.resource('ec2')

metrics_name  = "CPUUtilization"
x, y          = [0, 0]
width, height = [10, 5]
widgets       = []
metrics       = []

# TAG(Environment) が "dev" の EC2 が対象
instances = ec2.describe_instances(
              Filters=[{'Name':'tag:Environment','Values':['dev']}]
            )

# CPU使用率のメトリクス 作成
# 1グラフに複数のEC2を表示する
for r in instances['Reservations']:
    for i in r['Instances']:
       # TAG(Name) の値を取得する
       ec2instance = ec2r.Instance(i['InstanceId'])
       name = [t['Value'] for t in ec2instance.tags if t['Key'] == 'Name']
       if len(name) != 0:
           # メトリクスをセット
           metric = ['AWS/EC2', metrics_name, 'InstanceId', i['InstanceId'], {'label':name[0]}]
           metrics.append(metric)

# ウィジェット作成
widget = {'type'      : 'metric',
          'x'         : x,
          'y'         : y,
          'height'    : height,
          'width'     : width,
          'properties': { 'view'    : 'timeSeries',
                          'stacked' : False,
                          'metrics' : metrics,
                          'period'  : 1,
                          'stat'    : 'Average',
                          'region'  : 'us-east-1',
                          'title'   : metrics_name
                        }
         }

widgets.append(widget)

# ClodWatch dashbord 用 のJSONデータ
body   = {'widgets' : widgets}
body_j = json.dumps(body)
#print body_j

# Dashbord 登録
cw.put_dashboard(DashboardName = "EC2_DEV_CPU",
                 DashboardBody = body_j)

以下のようにして実行します。
[root@centos702 ~]# chmod +x ./dashbord_cpu.py
[root@centos702 ~]# ./dashbord_cpu.py
[root@centos702 ~]#

AWSコンソールで、CloudWatchを見ると、下図のようにダッシュボードが作成されます。



グラフは、下図のように表示されます。
1つのグラフに、複数サーバの CPU使用率が表示されます。
グラフ線のラベルには、Nameタグの値(サーバ名)を使用しています。