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タグの値(サーバ名)を使用しています。