| Index: third_party/gsutil/boto/docs/source/cloudwatch_tut.rst
|
| diff --git a/third_party/gsutil/boto/docs/source/cloudwatch_tut.rst b/third_party/gsutil/boto/docs/source/cloudwatch_tut.rst
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5639c0431ed34f8a85a79cdc5be6ccbcdb2adbfb
|
| --- /dev/null
|
| +++ b/third_party/gsutil/boto/docs/source/cloudwatch_tut.rst
|
| @@ -0,0 +1,116 @@
|
| +.. cloudwatch_tut:
|
| +
|
| +==========
|
| +CloudWatch
|
| +==========
|
| +
|
| +First, make sure you have something to monitor. You can either create a
|
| +LoadBalancer or enable monitoring on an existing EC2 instance. To enable
|
| +monitoring, you can either call the monitor_instance method on the
|
| +EC2Connection object or call the monitor method on the Instance object.
|
| +
|
| +It takes a while for the monitoring data to start accumulating but once
|
| +it does, you can do this::
|
| +
|
| + >>> import boto
|
| + >>> c = boto.connect_cloudwatch()
|
| + >>> metrics = c.list_metrics()
|
| + >>> metrics
|
| + [Metric:NetworkIn,
|
| + Metric:NetworkOut,
|
| + Metric:NetworkOut(InstanceType,m1.small),
|
| + Metric:NetworkIn(InstanceId,i-e573e68c),
|
| + Metric:CPUUtilization(InstanceId,i-e573e68c),
|
| + Metric:DiskWriteBytes(InstanceType,m1.small),
|
| + Metric:DiskWriteBytes(ImageId,ami-a1ffb63),
|
| + Metric:NetworkOut(ImageId,ami-a1ffb63),
|
| + Metric:DiskWriteOps(InstanceType,m1.small),
|
| + Metric:DiskReadBytes(InstanceType,m1.small),
|
| + Metric:DiskReadOps(ImageId,ami-a1ffb63),
|
| + Metric:CPUUtilization(InstanceType,m1.small),
|
| + Metric:NetworkIn(ImageId,ami-a1ffb63),
|
| + Metric:DiskReadOps(InstanceType,m1.small),
|
| + Metric:DiskReadBytes,
|
| + Metric:CPUUtilization,
|
| + Metric:DiskWriteBytes(InstanceId,i-e573e68c),
|
| + Metric:DiskWriteOps(InstanceId,i-e573e68c),
|
| + Metric:DiskWriteOps,
|
| + Metric:DiskReadOps,
|
| + Metric:CPUUtilization(ImageId,ami-a1ffb63),
|
| + Metric:DiskReadOps(InstanceId,i-e573e68c),
|
| + Metric:NetworkOut(InstanceId,i-e573e68c),
|
| + Metric:DiskReadBytes(ImageId,ami-a1ffb63),
|
| + Metric:DiskReadBytes(InstanceId,i-e573e68c),
|
| + Metric:DiskWriteBytes,
|
| + Metric:NetworkIn(InstanceType,m1.small),
|
| + Metric:DiskWriteOps(ImageId,ami-a1ffb63)]
|
| +
|
| +The list_metrics call will return a list of all of the available metrics
|
| +that you can query against. Each entry in the list is a Metric object.
|
| +As you can see from the list above, some of the metrics are generic metrics
|
| +and some have Dimensions associated with them (e.g. InstanceType=m1.small).
|
| +The Dimension can be used to refine your query. So, for example, I could
|
| +query the metric Metric:CPUUtilization which would create the desired statistic
|
| +by aggregating cpu utilization data across all sources of information available
|
| +or I could refine that by querying the metric
|
| +Metric:CPUUtilization(InstanceId,i-e573e68c) which would use only the data
|
| +associated with the instance identified by the instance ID i-e573e68c.
|
| +
|
| +Because for this example, I'm only monitoring a single instance, the set
|
| +of metrics available to me are fairly limited. If I was monitoring many
|
| +instances, using many different instance types and AMI's and also several
|
| +load balancers, the list of available metrics would grow considerably.
|
| +
|
| +Once you have the list of available metrics, you can actually
|
| +query the CloudWatch system for that metric. Let's choose the CPU utilization
|
| +metric for our instance.::
|
| +
|
| + >>> m = metrics[5]
|
| + >>> m
|
| + Metric:CPUUtilization(InstanceId,i-e573e68c)
|
| +
|
| +The Metric object has a query method that lets us actually perform
|
| +the query against the collected data in CloudWatch. To call that,
|
| +we need a start time and end time to control the time span of data
|
| +that we are interested in. For this example, let's say we want the
|
| +data for the previous hour::
|
| +
|
| + >>> import datetime
|
| + >>> end = datetime.datetime.now()
|
| + >>> start = end - datetime.timedelta(hours=1)
|
| +
|
| +We also need to supply the Statistic that we want reported and
|
| +the Units to use for the results. The Statistic can be one of these
|
| +values::
|
| +
|
| + ['Minimum', 'Maximum', 'Sum', 'Average', 'SampleCount']
|
| +
|
| +And Units must be one of the following::
|
| +
|
| + ['Seconds', 'Percent', 'Bytes', 'Bits', 'Count',
|
| + 'Bytes/Second', 'Bits/Second', 'Count/Second']
|
| +
|
| +The query method also takes an optional parameter, period. This
|
| +parameter controls the granularity (in seconds) of the data returned.
|
| +The smallest period is 60 seconds and the value must be a multiple
|
| +of 60 seconds. So, let's ask for the average as a percent::
|
| +
|
| + >>> datapoints = m.query(start, end, 'Average', 'Percent')
|
| + >>> len(datapoints)
|
| + 60
|
| +
|
| +Our period was 60 seconds and our duration was one hour so
|
| +we should get 60 data points back and we can see that we did.
|
| +Each element in the datapoints list is a DataPoint object
|
| +which is a simple subclass of a Python dict object. Each
|
| +Datapoint object contains all of the information available
|
| +about that particular data point.::
|
| +
|
| + >>> d = datapoints[0]
|
| + >>> d
|
| + {u'Average': 0.0,
|
| + u'SampleCount': 1.0,
|
| + u'Timestamp': u'2009-05-21T19:55:00Z',
|
| + u'Unit': u'Percent'}
|
| +
|
| +My server obviously isn't very busy right now!
|
|
|