こんにちは! JQです。
前回は『OSS編~Grafanaを試してみる01~』と題して、Grafanaを試してみました。
今回は『OSS編~Grafanaを試してみる02~』と題して、CloudWatchから取得したデータでGrafanaを試してみたいと思います。
1.スクリプト作成
CloudWatchから取得したメトリクスデータをGraphiteに登録するスクリプトを作成します。
今回はEC2のCPUUtilizationを取得します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import time import datetime import os from socket import socket import boto.ec2.cloudwatch CARBON_SERVER = '127.0.0.1' CARBON_PORT = 2003 delay = 60 if len(sys.argv) > 1: delay = int(sys.argv[1]) if sys.argv[2]: instanceid = sys.argv[2] else: sys.exit(1) def get_metrics(): cw = boto.ec2.cloudwatch.connect_to_region('us-east-1') metric = cw.get_metric_statistics( 300, datetime.datetime.utcnow() - datetime.timedelta(seconds=600), datetime.datetime.utcnow(), 'CPUUtilization', 'AWS/EC2', 'Average', dimensions={'InstanceId': [instanceid]} ) return metric sock = socket() try: sock.connect((CARBON_SERVER, CARBON_PORT)) except: print "Couldn't connect to %(server)s on port %(port)d, is carbon-agent.py running?" % {'server': CARBON_SERVER, 'port': CARBON_PORT} sys.exit(1) while True: lines = [] metrics = get_metrics() for i in metrics: lines.append("aws.%s.%s %s %s" % (instanceid, 'CPUUtilization', i['Average'], int(time.mktime( i['Timestamp'].timetuple() )))) message = '\n'.join(lines) + '\n' print "sending message\n" print '-' * 80 print message print sock.sendall(message) time.sleep(delay) |
2.実行
上記のスクリプトを実行します。
第一引数にdelayと第二引数にinstanceidを指定します。
1 2 3 4 5 6 7 8 9 |
$ sudo python metrics_graphite.py 60 i-xxxxxx sending message -------------------------------------------------------------------------------- aws.i-xxxxxx.CPUUtilization 0.0 1411102500 aws.i-xxxxxx.CPUUtilization 0.0 1411102620 aws.i-xxxxxx.CPUUtilization 1.04 1411102680 aws.i-xxxxxx.CPUUtilization 0.0 1411102380 |
3.Grafanaで確認
少しまったらGrafanaで確認してみましょう。
成功していれば上記のように表示されます。
いかがでしたでしょうか?
次回もお楽しみに!!!