$charts = array(array('M' => 'NetworkIn', 'U' => 'Bytes', 'L' => 'Network In (Bytes)'), array('M' => 'NetworkOut', 'U' => 'Bytes', 'L' => 'Network Out (Bytes)'), array('M' => 'CPUUtilization', 'U' => 'Percent', 'L' => 'CPU Utilization (Percent)'), array('M' => 'DiskReadBytes', 'U' => 'Bytes', 'L' => 'Disk Read Bytes'), array('M' => 'DiskReadOps', 'U' => 'Count', 'L' => 'Disk Read Operations/Second'), array('M' => 'DiskWriteBytes', 'U' => 'Bytes', 'L' => 'Disk Write Bytes'), array('M' => 'DiskWriteOps', 'U' => 'Count', 'L' => 'Disk Write Operations/Second')); // Create the CloudWatch access object // $cw = new AmazonCloudWatch(null, null, 'ap-southeast-1.monitoring.amazonaws.com'); $cw = new AmazonCloudWatch(); // $cw->set_region(REGION_US_E1); // Prepare to get metrics $opt = array('Namespace' => 'AWS/EC2', 'Period' => $period); $statistics = array('Average', 'Minimum', 'Maximum', 'Sum'); $chartImages = array(); // Generate one chart for each member of $charts foreach ($charts as &$chart) { $measure = $chart['M']; $unit = $chart['U']; $label = $chart['L']; // Get the metrics $res = $cw->get_metric_statistics($opt['Namespace'], $measure, $start, $end, $opt['Period'], $statistics, $unit); if ($debug < 2) { print_r($res); exit(0); } if ($res->isOK()) { $datapoints = $res->body->GetMetricStatisticsResult->Datapoints->member; // Populate an array with the metrics for sorting $dataRows = array(); foreach ($datapoints as $datapoint) { $timestamp = (string) $datapoint->Timestamp; $dataRows[$timestamp] = array('Timestamp' => (string) $datapoint->Timestamp, 'Units' => (string) $datapoint->Unit, 'Samples' => (string) $datapoint->Samples, 'Average' => (double) $datapoint->Average, 'Minimum' => (double) $datapoint->Minimum, 'Maximum' => (double) $datapoint->Maximum, 'Sum' => (double) $datapoint->Sum); } // Sort the metrics ksort($dataRows); // Form arrays for each of the statistics
<?php require_once '/usr/share/php/AWSSDKforPHP/sdk.class.php'; define('AWS_KEY', 'AKIAJKI7FFIP2BHMXF7A'); define('AWS_SECRET_KEY', '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'); define('AWS_ACCOUNT_ID', '382146031153'); $cw = new AmazonCloudWatch(); $cw->set_region($cw::REGION_EU_W1); $measure = $_GET['measure']; $statistics = $_GET['statistics']; $unit = $_GET['unit']; $dimensions = explode('=', urldecode($_GET['dimensions'])); $namespace = $_GET['namespace']; $period = $_GET['period']; $threshold = (int) $_GET['threshold']; if (!isset($measure) || !isset($statistics) || !isset($unit) || !isset($dimensions) || !isset($namespace) || !isset($period) || !isset($threshold)) { exit("Usage: http://localhost/cloudwatch/breach.php?measure=CPUUtilization&statistics=Average&unit=Percent&dimensions=ImageId%3dami-30360344&namespace=EC2&period=900&threshold=20"); } $now = time(); $before = $now - (int) $period; $opt = array('Namespace' => 'AWS/' . $namespace, 'Period' => (int) $period); $opt = array_merge($opt, CFComplexType::map(array('Dimensions' => array('member' => array('Name' => $dimensions[0], 'Value' => $dimensions[1]))))); $response = $cw->get_metric_statistics($measure, $statistics, $unit, date("c", $before), date("c", $now), $opt); $measurement = $response->body->member(0)->{$statistics}(0); $breach = $measurement >= $threshold; echo $breach ? 1 : 0;
$period *= 60; // Create array of chart parameters, one interior array per chart $charts = array(array('M' => 'NetworkIn', 'U' => 'Bytes', 'L' => 'Network In (Bytes)'), array('M' => 'NetworkOut', 'U' => 'Bytes', 'L' => 'Network Out (Bytes)'), array('M' => 'CPUUtilization', 'U' => 'Percent', 'L' => 'CPU Utilization (Percent)'), array('M' => 'DiskReadBytes', 'U' => 'Bytes', 'L' => 'Disk Read Bytes'), array('M' => 'DiskReadOps', 'U' => 'Count', 'L' => 'Disk Read Operations/Second'), array('M' => 'DiskWriteBytes', 'U' => 'Bytes', 'L' => 'Disk Write Bytes'), array('M' => 'DiskWriteOps', 'U' => 'Count', 'L' => 'Disk Write Operations/Second')); // Create the CloudWatch access object $cw = new AmazonCloudWatch(null, null, 'ap-southeast-1.monitoring.amazonaws.com'); // Prepare to get metrics $opt = array('Namespace' => 'AWS/EC2', 'Period' => $period); $statistics = array('Average', 'Minimum', 'Maximum', 'Sum'); $chartImages = array(); // Generate one chart for each member of $charts foreach ($charts as &$chart) { $measure = $chart['M']; $unit = $chart['U']; $label = $chart['L']; // Get the metrics $res = $cw->get_metric_statistics($measure, $statistics, $unit, $start, $end, $opt); if ($res->isOK()) { $datapoints = $res->body->GetMetricStatisticsResult->Datapoints->member; // Populate an array with the metrics for sorting $dataRows = array(); foreach ($datapoints as $datapoint) { $timestamp = (string) $datapoint->Timestamp; $dataRows[$timestamp] = array('Timestamp' => (string) $datapoint->Timestamp, 'Units' => (string) $datapoint->Unit, 'Samples' => (string) $datapoint->Samples, 'Average' => (double) $datapoint->Average, 'Minimum' => (double) $datapoint->Minimum, 'Maximum' => (double) $datapoint->Maximum, 'Sum' => (double) $datapoint->Sum); } // Sort the metrics ksort($dataRows); // Form arrays for each of the statistics $averages = array(); $minimums = array(); $maximums = array(); $sums = array();
#!/usr/bin/php # This is pulled right out of the on-line documentation # http://docs.amazonwebservices.com/AWSSDKforPHP/latest/#m=AmazonCloudWatch/get_metric_statistics # <?php error_reporting(E_ALL); require_once 'AWSSDKforPHP/sdk.class.php'; // Get metrics $cw = new AmazonCloudWatch(); $opt = array(); $response = $cw->get_metric_statistics('AWS/EC2', 'CPUUtilization', '17 December 2010', '20 December 2010', 1800, 'Average', 'Percent'); // Success? var_dump($response->isOK()); print_r($response);