Git Product home page Git Product logo

cloudviz's Introduction

About cloudviz

This package exposes Amazon CloudWatch as a data source for Google Chart Tools. With it, you can quickly generate graphs like this: RequestCount for ELB

Cloudviz is proudly sponsored by Bizo. For details on the cloudviz's origin, see this blog post.

If you're looking for easiest way to start graphing CloudWatch data, check out Cloudgrapher. Cloudgrapher is a free CloudWatch dashboard, and is effectively a hosted, batteries-included extension of cloudviz.

Getting started

  1. Familiarize yourself with:
  2. Download and install:
    • boto - a Python interface for Amazon Web Services
    • gviz_api - a Python library for creating Google Visualization API data sources
    • pytz - world timezone definitions
  3. Set **AWS_ACCESS_KEY_ID **and **AWS_SECRET_ACCESS_KEY **in settings.py
  4. Make cloudviz.py web-accessible using your favorite HTTP server

Using cloudviz

cloudviz expects the following query parameters as a JSON-encoded string passed to a qs parameter. Default values for each parameter may be set in settings.py:

  • namespace (str) - CloudWatch namespace (e.g., "AWS/ELB")
  • metric (str) - CloudWatch metric (e.g., "Latency")
  • unit (str) - CloudWatch unit (e.g., "Seconds")
  • statistics (list of str) - CloudWatch statistics (e.g., ["Average","Maximum"])
  • dimensions (dict of str) - CloudWatch dimensions (e.g., {"LoadBalancerName": "example-lb"})
  • end_time (date) - end time for queried interval (e.g., new Date)
  • start_time (date) - start time for queried interval (e.g., start_time.setDate(end_time.getDate-3))
  • range (int) - desired time range, in hours, for queried interval (e.g., 24). Note: range may be substituted for start_time, end_time, or both:
    • if range and end_time are specified, start_time is calculated as ( end_time - range )
    • if range and start_time are specified, end_time is calculated as ( start_time + range )
    • if only range is specified, end_time is set to the current time and start_time is calculated as ( current time - range )
  • period (int) - (optional) CloudWatch period (e.g., 120). Notes: must be a multiple of 60; if period is not specified, it will be automatically calculated as the smallest valid value (resulting in the most data points being returned) for the queried interval.
  • region (str) - (optional) AWS region (e.g., "us-west-1"; default is "us-east-1")
  • calc_rate (bool) - (optional) when set to True and statistics includes "Sum", cloudviz converts Sum values to per-second Rate values by dividing Sum by seconds in period (e.g., for RequestCount, 150 Requests per period / 60 seconds per period = 2.5 Requests per second)
  • cloudwatch_queries (list of dict) - encapsulates each CloudWatch query, allowing for multiple queries to be graphed in a single chart. Minimally, cloudwatch_queries must contain one dict with prefix defined. Optionally, any of the above parameters may also be defined inside one or more cloudwatch_queries
    • prefix (str) - text identifier for data returned by a single CloudWatch query. This is prepended to the chart label of each data series (e.g., "My LB ")

Example: Graphing CPU utilization of two instances

Here's a JavaScript snippet for building a URL to pass to cloudviz. See examples/host-cpu.html for the rest of the code. Note that **start_time **and **end_time **are set in settings.py.

var qa = {  
            "namespace": "AWS/EC2",       // CloudWatch namespace (string
            "metric": "CPUUtilization",   // CloudWatch metric (string)
            "unit": "Percent",            // CloudWatch unit (string)
            "statistics": ["Average","Maximum"],      // CloudWatch statistics (list of strings)
            "period": 600,                // CloudWatch period (int)
            "cloudwatch_queries":         // (list of dictionaries)
            [   
                {
                    "prefix": "Instance 1 CPU ",   // label prefix for associated data sets (string)
                    "dimensions": { "InstanceId": "i-bd14d3d5"} // CloudWatch dimensions (dictionary)
                },
                {
                    "prefix": "Instance 2 CPU "
                    "dimensions": { "InstanceId": "i-c514d3ad"}
                }
            ]
         };

var qs = JSON.stringify(qa);
var url = 'http://' + window.location.host + '/cloudviz?qs=' + qs;  // assumes cloudviz.py is called at /data

The resulting URL should look something like this: http://localhost:8080/cloudviz?qs={%22namespace%22:%22AWS/EC2%22,%22metric%22:%22CPUUtilization%22,%22unit%22:%22Percent%22,%22statistics%22:[%22Average%22,%22Maximum%22],%22period%22:600,%22cloudwatch_queries%22:[{%22prefix%22:%22Instance%201%20CPU%20%22,%22dimensions%22:{%22InstanceId%22:%22i-bd14d3d5%22}},{%22prefix%22:%22Instance%202%20CPU%20%22,%22dimensions%22:{%22InstanceId%22:%22i-c514d3ad%22}}]}&tqx=reqId%3A0

And the graph, when passed through Google's Visualization API: CPUUtilization for two instances

More examples

Additional examples can be found in examples/, and are written to act as plug-and-play templates.

Licensing

Copyright 2010 Bizo, Inc. (Mike Babineau <[email protected]>)

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

cloudviz's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

cloudviz's Issues

Does this work?

I'm having some serious trouble getting this working. I've discovered that it has no unit tests, and where the docs say "Make cloudviz.py web-accessible using your favorite HTTP server" it apparently means using CGI, not WSGI as I'd assumed.

Am I correct that this requires python 2.6??

Type error calculating rate on update

On initial load, the calc_rate = true works fine. When I cause an update by changing the time period, the script fails with the following:

AH01215: Traceback (most recent call last):
AH01215:   File "/var/www/html/cloudviz/cloudviz.py", line 196, in <module>
AH01215:     
AH01215: status = main()
AH01215:   File "/var/www/html/cloudviz/cloudviz.py", line 190, in main
AH01215:     
AH01215: results = get_cloudwatch_data(cloudviz_query, request_id, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
AH01215:   File "/var/www/html/cloudviz/cloudviz.py", line 146, in get_cloudwatch_data
AH01215:     
AH01215: if args['calc_rate'] == True and 'Sum' in args['statistics']: d.update({u'Rate': d[u'Sum']/args['period']})
AH01215: TypeError
AH01215: : 
AH01215: unsupported operand type(s) for /: 'float' and 'unicode'
AH01215: 
End of script output before headers: cloudviz.py

MOD_PYTHON ERROR

Sorry, I'm a newbie, could you please elaborate more a little bit about: Make cloudviz.py web-accessible using your favorite HTTP server?

I configured the py on apache and still get MOD_PYTHON ERROR for your code.

Any other dependencies missed?

Traceback (most recent call last):

File "/usr/lib/python2.6/site-packages/mod_python/importer.py", line 1540, in HandlerDispatch
default=default_handler, arg=req, silent=hlist.silent)

File "/usr/lib/python2.6/site-packages/mod_python/importer.py", line 1209, in _process_target
object = apache.resolve_object(module, object_str, arg, silent=silent)

File "/usr/lib/python2.6/site-packages/mod_python/apache.py", line 696, in resolve_object
raise AttributeError, s

AttributeError: module '/var/www/cloudviz-master/cloudviz.py' contains no 'handler'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.