Skip to content

Commit

Permalink
Merge pull request #305 from brharrington/cloudwatch
Browse files Browse the repository at this point in the history
add monitors around cloudwatch put call
  • Loading branch information
dmuino committed Jan 30, 2015
2 parents e13a8d0 + 3da3961 commit e14a018
Showing 1 changed file with 36 additions and 0 deletions.
Expand Up @@ -15,16 +15,26 @@
*/
package com.netflix.servo.publish.cloudwatch;

import com.amazonaws.AmazonServiceException;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.services.cloudwatch.AmazonCloudWatch;
import com.amazonaws.services.cloudwatch.AmazonCloudWatchClient;
import com.amazonaws.services.cloudwatch.model.Dimension;
import com.amazonaws.services.cloudwatch.model.MetricDatum;
import com.amazonaws.services.cloudwatch.model.PutMetricDataRequest;
import com.netflix.servo.DefaultMonitorRegistry;
import com.netflix.servo.Metric;
import com.netflix.servo.aws.AwsServiceClients;
import com.netflix.servo.monitor.BasicTimer;
import com.netflix.servo.monitor.Counter;
import com.netflix.servo.monitor.DynamicCounter;
import com.netflix.servo.monitor.MonitorConfig;
import com.netflix.servo.monitor.StepCounter;
import com.netflix.servo.monitor.Stopwatch;
import com.netflix.servo.monitor.Timer;
import com.netflix.servo.publish.BaseMetricObserver;
import com.netflix.servo.tag.BasicTag;
import com.netflix.servo.tag.Tag;
import com.netflix.servo.tag.TagList;
import com.netflix.servo.util.Preconditions;
Expand Down Expand Up @@ -61,6 +71,23 @@ public class CloudWatchMetricObserver extends BaseMetricObserver {
*/
static final double MAX_VALUE = java.lang.Math.pow(2.0, MAX_EXPONENT);

/** Number of cloudwatch metrics reported. */
private static final Counter METRICS_COUNTER = new StepCounter(
new MonitorConfig.Builder("servo.cloudwatch.metrics").build());

/** Number of cloudwatch put calls. */
private static final Timer PUTS_TIMER = new BasicTimer(
new MonitorConfig.Builder("servo.cloudwatch.puts").build());

/** Number of cloudwatch errors. */
private static final MonitorConfig ERRORS_COUNTER_ID =
new MonitorConfig.Builder("servo.cloudwatch.errors").build();

static {
DefaultMonitorRegistry.getInstance().register(METRICS_COUNTER);
DefaultMonitorRegistry.getInstance().register(PUTS_TIMER);
}

private int batchSize;
private boolean truncateEnabled = false;

Expand Down Expand Up @@ -165,10 +192,19 @@ public void updateImpl(List<Metric> metrics) {
}

private void putMetricData(List<Metric> batch) {
METRICS_COUNTER.increment(batch.size());
final Stopwatch s = PUTS_TIMER.start();
try {
cloudWatch.putMetricData(createPutRequest(batch));
} catch (AmazonServiceException e) {
final Tag error = new BasicTag("error", e.getErrorCode());
DynamicCounter.increment(ERRORS_COUNTER_ID.withAdditionalTag(error));
} catch (Exception e) {
final Tag error = new BasicTag("error", e.getClass().getSimpleName());
DynamicCounter.increment(ERRORS_COUNTER_ID.withAdditionalTag(error));
LOG.error("Error while submitting data for metrics : " + batch, e);
} finally {
s.stop();
}
}

Expand Down

0 comments on commit e14a018

Please sign in to comment.