Monitoring and observability service providing metrics, logs, and alarms for AWS resources and applications.
Main interface for Amazon CloudWatch operations including metrics, alarms, and monitoring.
/**
* Amazon CloudWatch client interface
*/
public interface AmazonCloudWatch {
String ENDPOINT_PREFIX = "monitoring";
// Metrics operations
PutMetricDataResult putMetricData(PutMetricDataRequest putMetricDataRequest);
GetMetricStatisticsResult getMetricStatistics(GetMetricStatisticsRequest getMetricStatisticsRequest);
ListMetricsResult listMetrics(ListMetricsRequest listMetricsRequest);
ListMetricsResult listMetrics();
// Alarm management
PutMetricAlarmResult putMetricAlarm(PutMetricAlarmRequest putMetricAlarmRequest);
DeleteAlarmsResult deleteAlarms(DeleteAlarmsRequest deleteAlarmsRequest);
DescribeAlarmsResult describeAlarms(DescribeAlarmsRequest describeAlarmsRequest);
DescribeAlarmsResult describeAlarms();
SetAlarmStateResult setAlarmState(SetAlarmStateRequest setAlarmStateRequest);
// Alarm history
DescribeAlarmHistoryResult describeAlarmHistory(DescribeAlarmHistoryRequest describeAlarmHistoryRequest);
// Lifecycle management
void shutdown();
}/**
* Builder for creating Amazon CloudWatch clients
*/
public final class AmazonCloudWatchClientBuilder extends AwsClientBuilder<AmazonCloudWatchClientBuilder, AmazonCloudWatch> {
public static AmazonCloudWatchClientBuilder standard();
public static AmazonCloudWatch defaultClient();
}/**
* Request for putting metric data
*/
public class PutMetricDataRequest extends AmazonWebServiceRequest {
public PutMetricDataRequest();
public String getNamespace();
public List<MetricDatum> getMetricData();
public PutMetricDataRequest withNamespace(String namespace);
public PutMetricDataRequest withMetricData(MetricDatum... metricData);
}
/**
* Metric data point
*/
public class MetricDatum {
public MetricDatum();
public String getMetricName();
public Double getValue();
public String getUnit();
public Date getTimestamp();
public List<Dimension> getDimensions();
public StatisticSet getStatisticValues();
public MetricDatum withMetricName(String metricName);
public MetricDatum withValue(Double value);
public MetricDatum withUnit(StandardUnit unit);
public MetricDatum withTimestamp(Date timestamp);
public MetricDatum withDimensions(Dimension... dimensions);
}
/**
* Metric dimension for filtering
*/
public class Dimension {
public Dimension();
public String getName();
public String getValue();
public Dimension withName(String name);
public Dimension withValue(String value);
}
/**
* Request for getting metric statistics
*/
public class GetMetricStatisticsRequest extends AmazonWebServiceRequest {
public GetMetricStatisticsRequest();
public String getNamespace();
public String getMetricName();
public List<Dimension> getDimensions();
public Date getStartTime();
public Date getEndTime();
public Integer getPeriod();
public List<String> getStatistics();
public String getUnit();
public GetMetricStatisticsRequest withNamespace(String namespace);
public GetMetricStatisticsRequest withMetricName(String metricName);
public GetMetricStatisticsRequest withDimensions(Dimension... dimensions);
public GetMetricStatisticsRequest withStartTime(Date startTime);
public GetMetricStatisticsRequest withEndTime(Date endTime);
public GetMetricStatisticsRequest withPeriod(Integer period);
public GetMetricStatisticsRequest withStatistics(Statistic... statistics);
}Usage Examples:
import com.amazonaws.services.cloudwatch.*;
import com.amazonaws.services.cloudwatch.model.*;
import java.util.*;
// Create CloudWatch client
AmazonCloudWatch cloudWatchClient = AmazonCloudWatchClientBuilder.defaultClient();
// Put custom metric data
MetricDatum metric = new MetricDatum()
.withMetricName("RequestCount")
.withValue(1.0)
.withUnit(StandardUnit.Count)
.withTimestamp(new Date())
.withDimensions(
new Dimension().withName("Environment").withValue("Production"),
new Dimension().withName("Service").withValue("WebAPI")
);
PutMetricDataRequest putRequest = new PutMetricDataRequest()
.withNamespace("MyApplication")
.withMetricData(metric);
cloudWatchClient.putMetricData(putRequest);
// Get metric statistics
GetMetricStatisticsRequest statsRequest = new GetMetricStatisticsRequest()
.withNamespace("AWS/EC2")
.withMetricName("CPUUtilization")
.withDimensions(new Dimension().withName("InstanceId").withValue("i-1234567890abcdef0"))
.withStartTime(new Date(System.currentTimeMillis() - 3600000)) // 1 hour ago
.withEndTime(new Date())
.withPeriod(300) // 5 minutes
.withStatistics(Statistic.Average, Statistic.Maximum);
GetMetricStatisticsResult statsResult = cloudWatchClient.getMetricStatistics(statsRequest);
for (Datapoint datapoint : statsResult.getDatapoints()) {
System.out.println("Time: " + datapoint.getTimestamp() +
", Average: " + datapoint.getAverage() +
", Max: " + datapoint.getMaximum());
}/**
* Request for creating or updating a metric alarm
*/
public class PutMetricAlarmRequest extends AmazonWebServiceRequest {
public PutMetricAlarmRequest();
public String getAlarmName();
public String getAlarmDescription();
public Boolean getActionsEnabled();
public List<String> getOKActions();
public List<String> getAlarmActions();
public List<String> getInsufficientDataActions();
public String getMetricName();
public String getNamespace();
public String getStatistic();
public List<Dimension> getDimensions();
public Integer getPeriod();
public String getUnit();
public Integer getEvaluationPeriods();
public Integer getDatapointsToAlarm();
public Double getThreshold();
public ComparisonOperator getComparisonOperator();
public String getTreatMissingData();
public PutMetricAlarmRequest withAlarmName(String alarmName);
public PutMetricAlarmRequest withAlarmDescription(String alarmDescription);
public PutMetricAlarmRequest withMetricName(String metricName);
public PutMetricAlarmRequest withNamespace(String namespace);
public PutMetricAlarmRequest withStatistic(Statistic statistic);
public PutMetricAlarmRequest withPeriod(Integer period);
public PutMetricAlarmRequest withEvaluationPeriods(Integer evaluationPeriods);
public PutMetricAlarmRequest withThreshold(Double threshold);
public PutMetricAlarmRequest withComparisonOperator(ComparisonOperator comparisonOperator);
public PutMetricAlarmRequest withAlarmActions(String... alarmActions);
}Usage Examples:
// Create CPU utilization alarm
PutMetricAlarmRequest alarmRequest = new PutMetricAlarmRequest()
.withAlarmName("HighCPUUtilization")
.withAlarmDescription("Alarm when server CPU exceeds 80%")
.withMetricName("CPUUtilization")
.withNamespace("AWS/EC2")
.withStatistic(Statistic.Average)
.withPeriod(300)
.withEvaluationPeriods(2)
.withThreshold(80.0)
.withComparisonOperator(ComparisonOperator.GreaterThanThreshold)
.withAlarmActions("arn:aws:sns:us-east-1:123456789012:cpu-alarm-topic")
.withDimensions(new Dimension().withName("InstanceId").withValue("i-1234567890abcdef0"));
cloudWatchClient.putMetricAlarm(alarmRequest);
// List all alarms
DescribeAlarmsResult alarmsResult = cloudWatchClient.describeAlarms();
for (MetricAlarm alarm : alarmsResult.getMetricAlarms()) {
System.out.println("Alarm: " + alarm.getAlarmName() +
", State: " + alarm.getStateValue() +
", Reason: " + alarm.getStateReason());
}public enum StandardUnit {
Seconds, Microseconds, Milliseconds,
Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes,
Bits, Kilobits, Megabits, Gigabits, Terabits,
Percent, Count,
BytesPerSecond, KilobytesPerSecond, MegabytesPerSecond, GigabytesPerSecond, TerabytesPerSecond,
BitsPerSecond, KilobitsPerSecond, MegabitsPerSecond, GigabitsPerSecond, TerabitsPerSecond,
CountPerSecond, None
}
public enum Statistic {
SampleCount, Average, Sum, Minimum, Maximum
}
public enum ComparisonOperator {
GreaterThanOrEqualToThreshold,
GreaterThanThreshold,
LessThanThreshold,
LessThanOrEqualToThreshold,
LessThanLowerOrGreaterThanUpperThreshold,
LessThanLowerThreshold,
GreaterThanUpperThreshold
}
public class Datapoint {
public Date getTimestamp();
public Double getSampleCount();
public Double getAverage();
public Double getSum();
public Double getMinimum();
public Double getMaximum();
public String getUnit();
}
public class MetricAlarm {
public String getAlarmName();
public String getAlarmDescription();
public Date getAlarmConfigurationUpdatedTimestamp();
public Boolean getActionsEnabled();
public List<String> getOKActions();
public List<String> getAlarmActions();
public String getStateValue();
public String getStateReason();
public Date getStateUpdatedTimestamp();
public String getMetricName();
public String getNamespace();
public String getStatistic();
public List<Dimension> getDimensions();
public Integer getPeriod();
public String getUnit();
public Integer getEvaluationPeriods();
public Double getThreshold();
public String getComparisonOperator();
}